2D变换——坐标系
Halcon的坐标系主要分为三类。像素坐标系、亚像素坐标系、亚像素边缘坐标系。像素坐标系和亚像素坐标系统称为Halcon标准坐标系。亚像素边缘坐标系(Edge Centered)称为Halcon非标准坐标系。
Halcon标准坐标系(HALCON Standard Coordinate System)
在Halcon标准坐标系下,坐标系的原点都在左上角像素的中心位置。但根据是否为亚像素精度分为以下两种坐标系。
两种标准坐标系的示意图如下。左侧为像素坐标系,右侧为亚像素坐标系。值得注意的是,对于像素坐标系而言,两种坐标系的表示精度存在差异。在像素坐标系中,X的位置在(6,5)。亚像素坐标系中则在(6.0,5.0)。并且能够发现,亚像素坐标系能够精确表示出跨像素的圆环的所在位置,但在像素坐标系下无法表示。

红色的是亚像素精度下的边缘轮廓,蓝色的就是像素精度下的一个Region的边缘。

像素坐标系(Pixel Accurate Coordinate System)
只为每一个像素中心点分配坐标,无法衡量一个像素以内的距离单位。
像素坐标系下的图像尺寸与行列对应关系如下。

亚像素坐标系(Pixel Accurate Coordinate System)
坐标划分更加细致,能够表示一个像素以内的距离。
亚像素坐标系下的图像尺寸与行列对应关系如下。

Halcon非标准坐标系
Halcon中非标准坐标系的提出,主要是为了方便我们更加直观的进行2D转换。 如果我们在2D转换中仍然使用Halcon的标准坐标系进行,那么我们不仅要考虑左上角负值的问题,而且图像进行旋转后还会有一个像素单位的重叠。 但如果我们将像素原点指定在图像左上角那么这些问题都能解决。
Halcon中的非标准坐标系,属于亚像素精度。主要是下面这一种。
亚像素边缘中心坐标系(Subpixel Accurate Coordinate System: Edge Centered)
注意下面的图,在这个非标准坐标系下能够表示圆形区域的坐标值,因此属于亚像素精度。

该坐标系下的图像尺寸与行列坐标的对应关系如下。

Halcon不同坐标系下的转换
当我们进行仿射变换时,Halcon中存在这么一类算子。其希望处理的图形对象处于Halcon的标准坐标系下,但他们所接受的仿射变换矩阵的信息是基于边缘坐标系创建的。 对于这类算子,我们无需担心其转换问题。调用如下算子时其内部会自动完成,对于图形对象的坐标系转换(标准坐标系->边缘中心坐标系),在使用仿射矩阵进行变换,变换结束后再将其转换为标准坐标系。
例如,当我们进行模板匹配时,得到的坐标信息就是在边缘坐标系下的。因此我们可以直接根据得到的结果创建仿射变换矩阵并使用affine_trans_contour_xld进行仿射变换。

2025.9.27补充
重新阐述一下,上面的问题。先看下面的Halcon文档(摘自affine_trans_image算子的说明文档),文档中已经说了affine_trans_image与affine_trans_pixel使用相同的坐标系,即边缘中心坐标系。下面说如果我们使用了基于Halcon标准坐标系进行计算的算子,例如area_center_gray,该算子得到的图像中心是在Halcon标准坐标系下表示的,存在0.5的偏差。假如此刻,你使用这个点作为创建旋转矩阵的旋转点时,去变换图像,那么旋转中心实际上不是,图片的正中心,从而导致偏差。

文档中也给出了具体的解决办法。


浙公网安备 33010602011771号