1. Halcon中的坐标系介绍
1.1Halcon标准坐标系
原点位于左上角像素中心。图像左上角坐标为(-0.5,-0.5)。
(1)像素精度坐标系
将图像视为离散网格,使用整数值来表示图像点的位置。
对于大小为height * width = m * n的图像,行列坐标范围分别为0~m-1,0~n-1。
(2)亚像素精度坐标系
使用浮点数来表示图像点的位置。
1.2Halcon非标准笛卡尔坐标系
原点位于左上角像素角落。图像左上角坐标为(0,0)。图像左上角像素中心角坐标为(0.5,0.5)。
为何要引入此坐标系?
(1)我们期望,当图像旋转90度时,2张图像的边缘邻接但不重合。此外,当图像缩放时,我们也期望图像不要出现负坐标。
(2)Halcon中,某些算子的输入坐标可能来自不同的坐标系。一方面,算子期望输入参数来自通常的标准坐标系;另一方面,对于仿射变换矩阵HomMat2D,算子期望具有边中心坐标的上述优势。
对于这些算子,首先将输入坐标从标准坐标系转换到边缘中心坐标系,使用HomMat2D变换后,再回到标准坐标系。
转换代码如下:
hom_mat2d_translate(HomMat2D, 0.5, 0.5, HomMat2DTmp)
hom_mat2d_translate_local(HomMat2DTmp, -0.5, -0.5, HomMat2DAdapted)
即,上述代码可将对象从标准坐标系转换到边缘中心坐标系。并且,两者代表相同的变换。
1.3全局坐标系与局部坐标系
算子hom_mat2d_translate()与hom_mat2d_translate_local()的区别在于,两者执行变换时基于的坐标系不同,分别为全局和局部坐标系。
2. 2D仿射变换介绍
仿射变换可以保持原来的线共点、点共线的关系不变。
除了刚性变换,其他不能保持原来的线段长度和夹角角度不变。
2.1仿射变换类型
平移、旋转、缩放、反射、斜切。
2.2主要流程
(1)通过模板匹配或Blob分析等方法,获取特征点坐标和角度。
(2)生成仿射变换矩阵。
(3)对图像、区域、轮廓执行仿射变换。
3. 仿射变换矩阵的生成
3.1 由特征点和角度生成仿射变换矩阵
vector_angle_to_rigid(::Row1,Column1,Angle1,Row2,Column2,Angle2:HomMat2D)
这个算子常用于模板匹配过程中,构建模板图像与模板实例间的刚性仿射变换。
3.2 由多个特征点生成仿射变换矩阵
3.2.1各种变换的未知量个数
(1)平移:T = (Tx, Ty)
hom_mat2d_translate( : : HomMat2D, Tx, Ty : HomMat2DTranslate)
未知量个数2:x和y方向的平移。
(2)旋转:
hom_mat2d_rotate( : : HomMat2D, Phi, Px, Py : HomMat2DRotate)
未知量个数1:旋转角度
(3)缩放:S = (Sx, Sy)
hom_mat2d_scale( : : HomMat2D, Sx, Sy, Px, Py : HomMat2DScale)
未知量个数2:x和y方向的缩放系数(Sx != Sy)。
<