Halcon 仿射变换基础
仿射变换 Affine Transformation
仿射变换:由一个平面/立体图形变换到另一个平面/立体图形的一种变换。在改变的过程中,保持直线和平行线不变(平行线映射为平行线),任何放射变换都可以分解为缩放、旋转、平移和切变的组合。
仿射变换矩阵:
$$
\begin{bmatrix}
x' \
y' \
1
\end{bmatrix} =
\begin{bmatrix}
a & b & c \
d & e & f \
0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
x \
y \
1
\end{bmatrix}
$$
- 指定变换矩阵的参数(a,b,c,d,e,f)
- 使用一个简单的输入点
(x,y) = (2,3)在齐次坐标中表示为(2,3,1) - 计算得到输出点
(x',y') = (a*2+b*3+c,d*2+e*3+f)
1.平移(Translation)
标准定义:平移由平移向量(Tx,Ty)定义,矩阵为:
$$
\begin{bmatrix}
1 & 0 & Tx \
0 & 1 & Ty \
0 & 0 & 1
\end{bmatrix}
$$
- 示例:取平移向量
(Tx,Ty) = (4,5) - 变换矩阵:
$$
\begin{bmatrix}
1 & 0 & 4 \
0 & 1 & 5 \
0 & 0 & 1
\end{bmatrix}
$$ 计算过程:
$$
\begin{bmatrix}
1 & 0 & 4 \
0 & 1 & 5 \
0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
2 \
3 \
1
\end\begin{bmatrix}
6 \
8 \
1
\end{bmatrix}
$$- 结果:点
(2,3)变换到点(6,8) - 解释:点沿 x 轴移动 4 单位,沿 y 轴移动 5 单位。
Halcons算子:hom_mat2d_translate在现有变换矩阵基础上添加平移分量。
- 参数:
HomMat2D:输入变换矩阵(若从零开始,需先初始化单位矩阵)Tx,Ty:X/Y方向的平移量HomMat2DTranslate:输出变换矩阵
* 初始化单位矩阵
hom_mat2d_identity(HomMat2DIdentity)
* 添加平移 (Tx=100, Ty=50)
hom_mat2d_translate(HomMat2DIdentity, 100, 50, HomMat2DTranslate)
2.缩放(Scaling)
标准定义:缩放由缩放因子Sx(x方向)和Sy(y方向)定义,矩阵为:
$$
\begin{bmatrix}
Sx & 0 & 0 \
0 & Sy & 0 \
0 & 0 & 1
\end{bmatrix}
$$
示例:取缩放因子
Sx=2和Sy=3变换矩阵:
$$
\begin{bmatrix}
2 & 0 & 0 \
0 & 3 & 0 \
0 & 0 & 1
\end{bmatrix}
$$计算过程:
$$
\begin{bmatrix}
2 & 0 & 0 \
0 & 3 & 0 \
0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
2 \
3 \
1
\end\begin{bmatrix}
4 \
9 \
1
\end{bmatrix}
$$- 结果:点
(2,3)变换到点(4,9) - 解释:点沿 x 轴缩放 2 倍,沿 y 轴缩放 3 倍。
- 结果:点
Halcons算子:hom_mat2d_scale以指定中心点缩放。
- 参数:
HomMat2D:输入变换矩阵(若从零开始,需先初始化单位矩阵)Sx,Sy:X/Y方向的缩放因子Px,Py:缩放中心坐标(图像坐标系)HomMat2DScale:输出变换矩阵
* 初始化单位矩阵
hom_mat2d_identity(HomMat2DIdentity)
* 以点 (Px=300, Py=300) 为中心,X方向放大2倍,Y方向缩小0.5倍
hom_mat2d_scale(HomMat2DIdentity, 2, 0.5, 300, 300, HomMat2DScale)
3.旋转(Rotation)
标准定义:旋转由旋转角度θ(逆时针为正)定义,矩阵为:
$$
\begin{bmatrix}
\cos(\theta) & -\sin(\theta) & 0 \
\sin(\theta) & \cos(\theta) & 0 \
0 & 0 & 1
\end{bmatrix}
$$
示例:取旋转角度
θ=90°(π/2弧度),则sin 90° = 1, cos 90° = 0变换矩阵:
$$
\begin{bmatrix}
0 & -1 & 0 \
1 & 0 & 0 \
0 & 0 & 1
\end{bmatrix}
$$计算过程:
$$
\begin{bmatrix}
0 & -1 & 0 \
1 & 0 & 0 \
0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
2 \
3 \
1
\end\begin{bmatrix}
-3 \
2 \
1
\end{bmatrix}
$$结果:点
(2,3)变换到点(-3,2)解释:点沿 x 轴旋转 90°,即逆时针旋转 90°。
Halcons算子:hom_mat2d_rotate绕指定中心点旋转。
- 参数:
HomMat2D:输入变换矩阵(若从零开始,需先初始化单位矩阵)Angle: 旋转角度(弧度制)Px,Py:旋转中心坐标(图像坐标系)HomMat2DRotate:输出变换矩阵
* 初始化单位矩阵
hom_mat2d_identity(HomMat2DIdentity)
* 绕点 (Px=200, Py=200) 旋转 30°(弧度 ≈0.5236)
AngleRad := 30 * 3.1415926 / 180
hom_mat2d_rotate(HomMat2DIdentity, AngleRad, 200, 200, HomMat2DRotate)
4.错切(Shearing)
标准定义:错切由错切系数Sx(x方向)和Sy(y方向)定义,矩阵为:
$$
\begin{bmatrix}
1 & Sx & 0 \
Sy & 1 & 0 \
0 & 0 & 1
\end{bmatrix}
$$
示例:取错切系数
Sx=0.5和Sy=0.2变换矩阵:
$$
\begin{bmatrix}
1 & 0.5 & 0 \
0.2 & 1 & 0 \
0 & 0 & 1
\end{bmatrix}
$$计算过程:
$$
\begin{bmatrix}
1 & 0.5 & 0 \
0.2 & 1 & 0 \
0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
2 \
3 \
1
\end\begin{bmatrix}
1.5 \
2.6 \
1
\end{bmatrix}
$$- 结果:点
(2,3)变换到点(1.5,2.6) - 解释:点沿 x 轴错切 0.5 单位,沿 y 轴错切 0.2 单位。
- 结果:点
注意:错切矩阵的逆矩阵是:
$$
\begin{bmatrix}
1 & -0.5 & 0 \
-0.2 & 1 & 0 \
0 & 0 & 1
\end{bmatrix}
$$
5.复合变换(Composition)
多个仿射变换可以组合成一个复合变换,矩阵的乘积表示。
示例:先平移再缩放再旋转,平移向量
(Tx,Ty)=(4,5),缩放因子Sx=2和Sy=3,旋转角度θ=90°(π/2弧度)变换矩阵:
$$
\begin{bmatrix}
2 & 0 & 0 \
0 & 3 & 0 \
0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
1 & 0 & 4 \
0 & 1 & 5 \
0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
0 & -1 & 0 \
1 & 0 & 0 \
0 & 0 & 1
\end{bmatrix}
$$合并后的复合变换矩阵:
$$
\begin{bmatrix}
0 & -2 & 8 \
3 & 0 & 15 \
0 & 0 & 1
\end{bmatrix}
$$计算过程:
$$
\begin{bmatrix}
0 & -2 & 8 \
3 & 0 & 15 \
0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
2 \
3 \
1
\end\begin{bmatrix}
-1 \
6 \
1
\end{bmatrix}
$$- 结果:点
(2,3)变换到点(-1,6)
- 结果:点
Halcon 仿射变换基础的更多相关文章
- 《HALCON数字图像处理》第三章笔记
目录 第三章 HALCON图像处理基础 HALCON控制语句 HALCON算子 HALCON图像处理入门 HALCON图像读取 HALCON图像显示 图形窗口 图像显示 显示文字 HALCON图像转换 ...
- Halcon二维仿射变换实例探究
二维仿射变换,顾名思义就是在二维平面内,对对象进行平移.旋转.缩放等变换的行为(当然还有其他的变换,这里仅论述这三种最常见的). Halcon中进行仿射变换的常见步骤如下: ① 通过hom_mat2d ...
- halcon几何变换(仿射变换)
旋转.平移.镜像.缩放.斜切,可参考https://blog.csdn.net/machaoyu86/article/details/51182473 仿射变换前,需要获得仿射变换矩阵. 关于shap ...
- halcon基础应用和方法经验分享
halcon基础应用和方法经验分享 一.Halcon软件 的安装 安装一直点下一步就好了,这个过程很简单,就不讲了 二.Halcon软件license安装 Halcon是商业视觉软件,是需要收费的,但 ...
- halcon基础数据类型
halcon基础数据类型 使用变量不需定义 等号 := 不等号 # 字符串赋值 str:='sdff' 等于比较符 if(q=0) 与 if(a< ...
- HALCON基础知识
HALCON 1. 语法范式 Syntax Style 1.1. 基本格式 1.1.1. 算子格式 算子(输入图像参数:输出图像参数:输入控制参数:输出控制参数) 其中四个参数任意一个可以为空 e.g ...
- Halcon 学习笔记3 仿射变换
像素的减少 开运算(较少) 腐蚀(去除更多) 对灰度图像的开运算或腐蚀 相当于将灰度图像变暗 像素增加 闭运算(较少) 膨胀(较多) 对灰度图像的闭运算或膨胀 相当于将灰度图像变亮 仿射变换 另外一种 ...
- halcon基础数据类型详解
#if defined(__CHAR_UNSIGNED__) || defined(__sgi) #define INT1 signed char /* integer, signed 1 Byte ...
- halcon基础算子介绍(窗口创建,算子运行时长,是否启用更新函数)
前言 halcon有有大约1500个算子,我总结一些简单大家用得到的算子,比如创建窗口的方式有3种,接下来结束这方式,及其异同点等! 1.窗口创建的三种方式 1.1使用dev_open_window算 ...
- halcon 基础总结(一)裁切图片并旋转图像
第一步当然是读取图像了:read_image (Image, 'C:/Users/HJ/Desktop/test_image/b.jpg') 第二步:二值化.二值化.因为我这里的物体是黑色的, ...
随机推荐
- C# datagridView 表格渲染变色 ( 动态改变表格值) 绘制时改变表格值
private void DGV_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) { ...
- 4G DTU
4G DTU是一种可以将RS232/485采集的数据通过3G/4G发送到云端服务器进行数据交互的传输设备.实现串口设备的无线长距离数据传输,进而实现远程数据通信管理,主要应用在远程数据采集和远程控制项 ...
- Spring 6
一.基础 1.什么是反射 在Java中,反射是指在运行时检查和操作类.接口.字段和方法等程序结构的能力. 通过反射,你可以在运行时动态获取类的信息.实例化对象.访问和修改字段.调用方法, 以及构造新的 ...
- Java开发笔记(一百五十五)生成随机数的几种途径
随机数生成是一个常见的业务场景,比如摇号.抽奖等等都需要随机数.Java代码主要有三种随机数的生成方式,包括Math.random.Random.ThreadLocalRandom等,分别说明如下: ...
- 前端自定义cli
Windows PowerShell 版权所有 (C) Microsoft Corporation.保留所有权利. 尝试新的跨平台 PowerShell https://aka.ms/pscore6 ...
- Android计算两个日期相差天数
概述 因为没有现成的函数方法可用,那就通过一个循环来取得相差的天数了 Calendar curcalendar= Calendar.getInstance(); int days = 0; //定义一 ...
- POLIR-Society-Organization-Politics-Self- Identity:Qualities + Habits:To-Be List + Behaviors:To-Do List + Prioritize: ProblemsResolving
POLIR-Society-Organization-Political Habits:To-Be List Behaviors:To-Do List when it comes to habits, ...
- OpenList挂载「夸克网盘」
存储->添加 选择夸克 填写挂载路径 打开并进入自己夸克网盘的网页端 [夸克网盘]夸克网盘PC网页版端入口 进入网盘后按F12进入开发者模式并找到网络模块 Edge.Google等浏览器操作基本 ...
- Linux查看端口的命令-九五小庞
第一种:lsof命令 lsof(list open files)是一个列出当前系统打开文件的工具. lsof -i:端口号 lsof 可查看端口占用情况 示例:查看服务器 8000 端口的占用情况: ...
- Win11双击文件夹卡死转圈打不开的问题
有一部分雨林木风官网的win11专业版用户,在使用电脑鼠标双击文件夹时,出现无法打开,而且箭头也是一直在转圈圈的问题,这是个什么情况呢?本文中,雨林木风小编将为大家分享详细的解决方法,希望可以帮助到有 ...