【halcon知识】应用仿射变换

2023-05-16

一、说明

        无论什么样的变换,都离不开齐次变换矩阵。一般地,先准备一个空的齐次变换矩阵,这个矩阵随便填写:1)填入旋转类参数就是旋转矩阵,2——填入仿射参数就可进行仿射变换,3)填入透视变换,就能进行透视变换。本文专门谈谈halcon的关于局部图像进行线性变换是如何进行的。

二、方法说明

2.1 hom_mat2d_identity — 生成通用二维变换的齐次变换矩阵

        对于方法 hom_mat2d_identity,只有一个输出HomMat2DIdentity,就是生成一个齐次变换矩阵。此矩阵为单位矩阵。该方法实际上可以用其它手段替代,此处仅仅是方便用户生成矩阵而已。

        hom_mat2d_identity (HomMat2DIdentity)

        以上代码执行过后, HomMat2DIdentity就被赋值为:

                HomMat2DIdentity=\begin{pmatrix} 1 & 0& 0\\ 0 & 1 & 0\\ 0 & 0 & 1 \end{pmatrix}

 2.2 hom_mat2d_rotate — 生成通用二维旋转变换的齐次变换矩阵

        hom_mat2d_rotate方法用来产生旋转变换矩阵:

    hom_mat2d_rotate( : : HomMat2D, Phi, Px, Py : HomMat2DRotate)

参数表: 

参数说明参数性质
HomMat由hom_mat2d_identity生成的一个单位矩阵输入。输入
Phi旋转的角度输入
Px旋转中心x坐标输入
Py选装中心的y坐标输入
 hom_mat2d_rotate由上列参数对单位阵赋值,最后得到的旋转齐次变换矩阵输出

 2.3  affine_trans_image — 生成通用二维仿射变换的齐次变换矩阵

        affine_trans_image — 对图像应用任意仿射二维变换。 注意,所有变换都是一个矩阵相乘的结果。因此,旋转、仿射、透视变换,都可以用该方法实现。(只是换换矩阵而已)

affine_trans_image(Image : ImageAffinTrans : HomMat2D, Interpolation, AdaptImageSize : )

 参数表:

参数描述性质
ImageFilled输入图像输入
ImageAffinTrans,输出图像输出
HomMat2DRotate,齐次变换矩阵,这个也是在修改单位阵获得的。输入
Interpolation间隙填充:'bilinear', 'constant', 'nearest_neighbor', 'weighted'输入
AdaptImageSize

值为“true”时,将调整大小,以便在右边缘或下边缘不会发生裁剪。值为“false”时,目标图像的大小与输入图像的大小相同。请注意,与 AdaptImageSize 无关,图像总是在左边缘和上边缘被裁剪,即,在变换后具有负坐标的所有图像部分都被裁剪。

输入

2.4 模板的旋转匹配

        best_match_rot_mg — 通过旋转搜索模板和金字塔的最佳匹配。

best_match_rot_mg(Image : : TemplateID, AngleStart, AngleExtend, MaxError, SubPixel, NumLevels : Row, Column, Angle, Error)

        best_match_rot_mg的参数表:

参数描述性质数据类型
Image (input_object)输入单通道图像(-array) → object (byte),在图像内部有模式图输入btype
TemplateID模式对象索引号输入int
AngleStart角度的起始(默认-0.39)建议值:-3.14, -1.57, -0.79, -0.39, -0.20, 0.0输入real
AngleExtend角度的旋转步长:(默认0.79)6.28, 3.14, 1.57, 0.79, 0.39 输入real
MaxError

灰度最大平均差别(默认40灰度级)建议值: 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 9.0, 11.0, 15.0, 17.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0

输入real
SubPixel是否亚像素 'false', 'true';默认: 'false'输入string
NumLevels(input_control)  integer 旋转等级数,默认3;建议123456;输入int
row

 point.y(-array) → (real) 最佳匹配点的行坐标

输出real
Column

 point.x(-array) → (real) 最佳匹配点的列坐标

输出real
Angle angle.rad(-array) → (real) ,模板旋转角度输出real
Error real(-array) → (real)  最佳匹配的灰度值的平均散度。输出real

三、仿射变换的齐次坐标矩阵形成

        上面说到,齐次变换矩阵,都是由三维单位矩阵转化而成,三维齐次单位矩阵由  获得,那么这个矩阵如何随客户的意愿,改造成不同的仿射矩阵呢?如下例完成

hom_mat2d_identity(Matrix1)
hom_mat2d_scale(Matrix1,0.5,0.5,256.0,256.0,Matrix2)
hom_mat2d_rotate(Matrix2,3.14,256.0,256.0,Matrix3)
hom_mat2d_translate(Matrix3,-128.0,-128.0,Matrix4)

        而且,所有的操作,本质上就是矩阵乘法。如:

        hom_mat2d_scale( : : HomMat2D, Sx, Sy, Px, Py : HomMat2DScale)

        就是:

        Matrix2=Matrix1\times \bigl(\begin{smallmatrix} S_x &0 &p_x \\ 0& S_y&P_y \\0&0 & 1\end{smallmatrix}\bigr)

        其它类推。

        (这里我不明白,halcon给用户一个直接赋值的方法,难道不可吗?非要增加理解成本。)

四、实验和结果

        如果参数值正确,则运算符 best_match_rot_mg 返回值 2 (H_MSG_TRUE)。如果输入为空(没有输入图像可用),可以通过 set_system('no_object_result',<Result>) 设置action。如有必要,会引发异常。

dev_close_window ()
read_image (For6, 'for6')
get_image_size (For6, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowID)
fill_interlace (For6, ImageFilled, 'odd')
* gen_rectangle1 (Rectangle, 266, 390, 348, 435)
gen_rectangle1 (Rectangle, 78, 292, 129, 402)
* gen_rectangle1 (Rectangle, 258, 214, 296, 258)
area_center (Rectangle, Area, Row, Column)
reduce_domain (ImageFilled, Rectangle, ImageReduced)
pi := acos(0.0) * 2
* Preparing a pattern for template matching with rotation
create_template_rot (ImageReduced, 4, -pi, 2 * pi, pi / 16, 'sort', 'original', TemplateID)
write_template (TemplateID, 'testt')
* Deallocation of the memory of a template
clear_template (TemplateID)
* Reading saved template from file
read_template ('testt', TemplateID)
dev_set_color ('red')
for Phi := -180 to 180 by 5
  hom_mat2d_identity (HomMat2DIdentity)
  hom_mat2d_rotate (HomMat2DIdentity, rad(Phi), 256, 256, HomMat2DRotate)
  * Apply an arbitrary affine transformation to the image
  affine_trans_image (ImageFilled, ImageAffinTrans, HomMat2DRotate, 'constant', 'false')
  * add_noise_white (ImageAffinTrans, ImageAffinTrans, 30)
  * Searching the best matching of a template and a pyramid with rotation
  best_match_rot_mg (ImageAffinTrans, TemplateID, -pi, 2 * pi, 40, 'true', 4, Row, Column, Angle, Error)
  disp_arrow (WindowID, Row, Column, Row - cos(Angle) * 50, Column - sin(Angle) * 50, 1)
  AngleDeg := deg(Angle)
  DiffAngle := abs(AngleDeg - Phi)
endfor
clear_template (TemplateID)

输入图像:

结果显示:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【halcon知识】应用仿射变换 的相关文章

  • 事件流及其三阶段

    事件流 1 事件的捕获阶段 2 事件的目标阶段 3 事件的冒泡阶段 事件有三个阶段 xff0c 首先发生的是捕获阶段 xff0c 然后是目标阶段 xff0c 最后才是冒泡阶段 xff0c 对于捕获和冒泡 xff0c 我们只能干预其中的一个
  • 卡尔曼滤波

    这篇文章完全是我自己为了记录一下自己对于KF的印象 xff0c 表层的不能再表层了 如果是需要详细了解KF的请去阅读高手的文章 xff0c 不要在此篇上浪费时间 前言 xff1a 在读一些文章的时候 xff0c 总会看到研究方法基于卡尔曼滤
  • Nvidia Jetson TX2入门指南(白话版)

    最近要用到jetson tx2 xff0c 但之前也完全没有接触过 边用边学 xff0c 这篇文章就是向新手介绍下jetson tx2刚入手的一些事项 适合纯小白 一 TX2初认识 开发板全称 xff1a Nvidia Jetson tx2
  • Nvidia Jetson TX2+Intel Realsense D435i跑ORB_SLAM3

    前言 xff1a 网上的教程实在是太多 xff0c 从诸多教程中找到一个适合自己的实属不易 将此记录下来 xff0c 希望能够帮助到有需要的人 因为时间紧迫 xff0c 没时间写特别详细的内容 xff0c 只能引用一些他人的步骤 请见谅 x
  • catkin_make

    普通情况下编译文件都是使用cmake make工具 xff0c 与此有关的内容可以参考 xff1a cmake CMakeLists txt make makefile的关系 但ROS中还有catkin make xff0c 不清楚他们之间
  • Airsim仿真

    Airsim设计的目的 xff1a 1 现实世界开发测试自动驾驶车辆算法费时费力 2 迎合AI的发展 xff0c 需要在各种条件下和环境下收集大量带注释训练数据 模块化设计 xff0c 强调可扩展性 提供很多API xff0c 核心组件包括
  • 0404---通过SSH连接远程服务器运行图形界面程序问题

    远程运行 linux 服务器图形界面程序问题 通常部署在数据中心机房中的服务器是没有图形桌面的 xff0c 对服务器的日常运维也往往通过远程客户端命令窗口来进行 xff0c 但有时候往往需要在服务器上远程安装或运行图形窗口类软件 xff0c
  • Jetson NX emmc版本系统转移到SSD

    因emmc版本的NX自带内存不够大 xff0c 只有16GB xff08 手上的是这个型号 xff09 xff0c 安装系统大概需要除去4G多内存 xff0c 再安装CUDA cuDNN TensorRT等内存直接爆满 无法继续使用 所以需
  • ssh远程登录报错:kex_exchange_identification: Connection closed by remote host

    基本信息 系统 xff1a MacOS Catalina 10 15 7 报错信息 xff1a 终端登录远程 服务器 时报错 xff1a kex exchange identification Connection closed by re
  • 如何在Windows的cmd下让程序在后台执行

    如何在Windows的cmd下让程序在后台执行 xff1f Hu Dennis 2008 12 24 在windows下启动JBoss服务器 xff0c 需要在命令行中输入run bat 但是运行后如果你想停止服务器 xff0c 可能的做法
  • 嵌入式LINUX识别U盘的问题

    我试过mount U盘 当开机后mount 第一个U盘时 xff0c 一般设备名为sda xff0c 然后umount xff0c 并重插另外一个U盘 xff0c 再mount xff0c 发现设备名变为sdb了 此试验进行了几次 xff0
  • yolov4+deepsort(yolo目标检测+自适应卡尔曼滤波追踪+毕业设计代码)

    项目介绍 该项目一个基于深度学习和目标跟踪算法的项目 xff0c 主要用于实现视频中的目标检测和跟踪 该项目使用了 YOLOv4 目标检测算法和 DeepSORT 目标跟踪算法 xff0c 以及一些辅助工具和库 xff0c 可以帮助用户快速
  • 集成学习(含常用案列)

    集成学习原理 xff1a 工作原理是生成多个分类器 模型 xff0c 各自独立地学习和作出预测 这些预测最后结合成组合预测 xff0c 因此优于任何一个单分类的做出预测 集成学习算法分类 xff1a 集成学习算法一般分为 xff1a bag
  • 字节序与比特序详解

    字节序的定义 几种类型的字节序 cpu字节序外部bus字节序设备字节序网络协议字节序 Ethernet协议字节序IP协议字节序 编译字节序 比特序的定义字节序与bit序的转换结构体的位域 字节序的定义 字节序就是说一个对象的多个字节在内存中
  • 【动态规划】01背包问题

    问题描述 有n个物品 xff0c 它们有各自的体积和价值 xff0c 现有给定容量的背包 xff0c 如何让背包里装入的物品具有最大的价值总和 xff1f 为方便讲解和理解 xff0c 下面讲述的例子均先用具体的数字代入 xff0c 即 x
  • 献给初学labview数据采集的初学者

    前言 xff1a 参考来源 xff1a http bbs elecfans com jishu 209658 1 5 html xff0c 感谢原作者 zhihuizhou 这里的内容只针对NI的数据采集卡 xff0c 不保证适用于其它公司
  • 如何从科学论文中实现一个算法

    原文 xff1a http codecapsule com 2012 01 18 how to implement a paper 作者 xff1a Emmanuel Goossaert 本文是从科学论文中实现算法的简短指南 我从书籍和科学
  • 国内C/C++刷题网站汇总

    作者 xff1a Luau Lawrence 链接 xff1a https www zhihu com question 25574458 answer 31175374 来源 xff1a 知乎 Welcome To PKU JudgeOn
  • 华为16道经典面试题

    面试过程中 xff0c 面试官会向应聘者发问 xff0c 而应聘者的 回答将成为面试官考虑是否接受他的重要依据 对应聘者而言 xff0c 了解这些问题背后的 猫腻 至关重要 本文对面试中经常出现的一些典型问题进行了整理 xff0c 并给出相
  • 语音信号的预加重和加窗处理

    原文转载于 xff1a http blog csdn net ziyuzhao123 article details 12004603 非常感谢 一 语音信号的预加重 语音信号的预加重 xff0c 目的是为了对语音的高频部分进行加重 xff

随机推荐

  • 单独编译和使用webrtc音频增益模块(AGC)

    原文转载于 xff1a http www cnblogs com mod109 p 5767867 html top 非常感谢 webrtc的音频处理模块分为降噪ns xff08 nsx xff09 xff0c 回音消除aec xff08
  • 功率谱和频谱的区别

    生活中很多东西之间都依靠信号的传播 xff0c 信号的传播都是看不见的 xff0c 但是它以波的形式存在着 xff0c 这类信号会产生功率 xff0c 单位频带的信号功率就被称之为功率谱 它可以显示在一定的区域中信号功率随着频率变化的分布情
  • 如何解决在rviz中,路径规划导航时,点击2D Pose estimate后机器人位置没有改变,终端也没有反应的问题

    在rviz中 xff0c 点击2D Pose estimate后机器人位置没有改变 xff0c 终端也没有反应 xff0c 通常这种情况就是由于客户端和服务端IP地址不一致导致的 xff0c IP地址有时候系统会自动变更 xff0c 这里我
  • 五款免费开源的语音识别工具

    按 xff1a 本文原作者 Cindi Thompson xff0c 美国德克萨斯大学奥斯汀分校 xff08 University of Texas at Austin xff09 计算机科学博士 xff0c 数据科学咨询公司硅谷数据科学
  • 动态内存分配

    动态内存分配 常见的内存分配的错误 先上一个内存分配的思维导图 便于联想想象 xff0c 理解 xff1a 首先我们介绍一下内存分配的方式 xff1a 1 在静态存储区域中进行分配 内存在程序编译的时候就已经分配好 xff0c 这块内存在程
  • UEFI架构

    UEFI架构 UEFI提供系统化的标准方法 xff0c 加载驱动并管理他们之间的交互 前言 xff1a 感谢uefi blog UEFI 提供了一个标准接口 xff0c 以便在硬件发生变更时固件能提供足够信息而保证操作系统不受影响 它包含有
  • C++调试工具(未完)

    C 43 43 调试相关命令 ld so conf https blog csdn net Bruce 0712 article details 78816790相关的命令 ar nm 目标格式文件分析 xff0c 所以也可以分析 a文件
  • 11_UART串口

    11 UART 文章目录 11 UART1 串口连接芯片图2 串口传输一个字节的过程3 发送接收过程4 编写UART函数4 1 初始化函数uart0 init 4 1 1 设置引脚用于串口4 1 2 使能上拉4 1 3 设置波特率4 1 4
  • 汇编指令:LDMIA、LDMIB、LDMDB、LDMDA、STMIA、LDMFD、LDMFA、LDMED、LDMEA

    ARM指令中多数据传输共有两种 xff1a LDM load much xff1a 多数据加载 将地址上的值加载到寄存器上 STM store much xff1a 多数据存储 将寄存器的值存到地址上 主要用途 xff1a 现场保护 数据复
  • C++ 实现 发送HTTP Get/Post请求

    1 简述 最近简单看了一下关于HTTP请求方面的知识 xff0c 之前一直用Qt来实现 xff0c 有专门HTTP请求的QNetworkAccessManager类来处理 xff0c 实现也比较简单 xff0c 这里主要讲解一下用C 43
  • [Simple] 洗牌算法

    题目要求 xff1a 平时洗牌是两打牌 xff0c 交叉洗在一起 也就是开始 1 2 3 4 5 6 7 8 第一次 1 5 2 6 3 7 4 8 第二次 1 3 5 7 2 4 6 8 第k次 给你一个数组a 2N xff0c 要求在O
  • 【PID控制原理及其算法】

    前言 本文以自己的学习过程总结而来 xff0c 将自己的经验写出来以供大家一起学习 xff0c 如有错误请多指教 一 PID是什么 xff1f PID就是比例 积分 微分 xff0c PID算法可以说是在自动控制原理中比较经典的一套算法 x
  • printf重定向的相关总结

    简介 实现printf重定向有多种方式 xff0c 下面一一介绍 linux环境下 虽然linux系统的默认标准输出设备是显示器 xff0c 但是我们可以把printf打印输出的内容重定向到其他设备或文件 方法如下 xff1a 方法1 xf
  • 开发者七问七答:什么是产品化?

    简介 xff1a 之前参加了企业智能部门如何做产品化的讨论 xff0c 大家对产品化的定义和过程都有各自不同的见解 我觉得这个话题其实可以扩展下 xff0c 想站在一个开发人员的视角尝试探讨一下产品化 下面以自问自答的方式来展开 1 当我们
  • 系统调用和库函数及API的区别

    在写程序的过程中 xff0c 像MFC xff0c VC 43 43 这些编程 xff0c 都会涉及到函数的调用 xff0c 有库函数也有系统函数 xff0c 下面看一看它们的区别 xff01 xff01 系统调用 xff08 system
  • 应用服务器与zk之间的连接超时

    关于connectString服务器地址配置 格式 192 168 1 1 2181 192 168 1 2 2181 192 168 1 3 2181 这个地址配置有多个ip port之间逗号分隔 底层操作 span class hljs
  • 日本小学生走向APP开发私塾 智能手机迫切改变IT教育——日本经济新闻报道

    如要在日本接受专门的信息技术教育 xff08 IT xff09 xff0c 只有结束义务教育课程才能接受 如今 xff0c 打破这些障碍的趋势逐渐浓厚 因为从小就接触到各种数字机器和互联网而长大的 数字土著 xff08 digital na
  • 步进电机和伺服电机的区别

    步进电机作为一种开环控制的系统 xff0c 和现代数字控制技术有着本质的联系 在目前国内的数字控制系统中 xff0c 步进电机的应用十分广泛 随着全数字式交流伺服系统的出现 xff0c 交流伺服电机也越来越多地应用于数字控制系统中 为了适应
  • 【图像处理】墨西哥小波和带通滤波

    一 说明 在连续小波的家族当中 xff0c 埃尔米特小波是个非常特别的存在 xff08 应用在连续小波转换称作埃尔米特转换 xff09 Ricker子波计算电动力学的广谱源项 它通常只在美国才会被称作墨西哥帽小波 xff0c 因为在作为核函
  • 【halcon知识】应用仿射变换

    一 说明 无论什么样的变换 xff0c 都离不开齐次变换矩阵 一般地 xff0c 先准备一个空的齐次变换矩阵 xff0c 这个矩阵随便填写 xff1a 1 xff09 填入旋转类参数就是旋转矩阵 xff0c 2 填入仿射参数就可进行仿射变换