Halcon仿射变换的基本原理是什么?
摘要:仿射变换 Affine Transformation 仿射变换:由一个平面立体图形变换到另一个平面立体图形的一种变换。在改变的过程中,保持直线和平行线不变(平行线映射为平行线),任何放射变换都可以分解为缩放、旋转、平移和切变的组合。 仿
仿射变换 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{bmatrix}
=
\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{bmatrix}
=
\begin{bmatrix}
4 \\
9 \\
1
\end{bmatrix}
\]
结果:点(2,3)变换到点(4,9)
解释:点沿 x 轴缩放 2 倍,沿 y 轴缩放 3 倍。
Halcons算子:hom_mat2d_scale以指定中心点缩放。
