Halcon算子——2D几何变换
齐次坐标
介绍仿射变换前,先介绍什么是齐次坐标。对于一个平面像素点,我们可以通过坐标(x,y)描述其位置。但是当涉及平移时,如果仅仅使用它对应的坐标向量[x,y],就必须通过向量加法来描述其位移。 而齐次坐标的引入就是为了统一在变化过程中的操作,我们希望能够通过一个 Pt=TP0,这样一个乘法公式去统一描述对像素点的平移和旋转操作。

齐次坐标是一种用N+1维向量表示N维空间点的方法。在二维空间下,其标准形式为[x,y,1]。对于一个点,我们直接在最后补上一个1,就转换成了齐次坐标。计算后如果得到的向量为[x1,y1,w],通过转后即可得到正确的坐标[x1/w,y1/w,1]。
引入其次坐标后,该平移操作可以表示为

旋转
此处,简要介绍在齐次坐标下如何描述旋转操作。公式可以自己推导以下,利用已知角的三角函数和坐标值计算旋转后的点坐标。

缩放
当放大时a>1,当缩小时0<a<1。放大后的图像,就相当于把原来的点扩大了多份。

几何变换

相似变换

相似变换中,缩放必须为等比例的缩放。
仿射变换

仿射变换只保证直线不发生弯曲以及平行线变换后仍然是平行线,因此物体可能会发生形变(变换后两条直线夹角不同)。

下面是几种仿射变换的类型。Identity对应的就是不发生任何变换,在Halcon我们也是使用hom_mat2d_identity,算子去创建一个空的2D变换齐次矩阵的。

切变
图像向某一方向倾斜。

镜像
实际上就是旋转

投影变换(单应性变换)

投影变换就是将三维物体,映射到二维平面的变换过程。在机器视觉中,主要针对的是第一种投影方式。

定义

左侧的图像中某一个像素点,能够通过某种变换过程,映射到右侧图像中的唯一一个点。这个变换过程可以用一个一个矩阵表示。

投影矩阵的含义

既然仿射矩阵是投影变换的特殊形式,那么两者的变换矩阵中,相同的部分实际上作用是一致的。A用于控制图形变换的缩放和旋转,T控制图形的平移。对于V和S在投影变换中有其对应的意义。

投影矩阵计算方法
在投影变换矩阵中,对于一个变换矩阵H而言,其与aH(a!=0),的变换效果是一致的。计算可知H矩阵的自由度为8。这也说明我们需要计算8个未知数(不包括S),才能得出该矩阵。

对于其计算过程如下所示。


如何获取图像中对应的4对点
实现投影变换,我们至少要在图像中分别获取4组点。那么如何获取到对应的点,从而实现两个视角下图像的转换呢。
常规的方法是使用棋盘格进行计算。
图像校正:将一张棋盘格图像贴在物体表面,提取平面上棋盘格的4个角点。保持棋盘格不变,移动相机拍摄另一个视角下棋盘格的图像,并提取该视角下的4个角点。从而得到4组点。
视角变换:我们分别在不同视角下放置一个相同的棋盘格,然后去提取其对应的4个角点的坐标信息。这样就成功得到了4组点,从而求解变换矩阵。
应用



Halcon中使用仿射变换
其他参数很好理解,对于最后一个参数就是是否自适应调整图像的大小,防止变换后的图像显示不全等。

Halcon中使用投影变换
使用该算子生成投影变换矩阵,至少需要传入4个点。其中Pw就是对应的齐次坐标的s值,通常全部传入1即可(该值并不会影响变换过程)。


浙公网安备 33010602011771号