局部可变形模板匹配算法的初步实现
让我们首先理解halcon中关于2D可变形模板匹配的三个关键算子的区别:create_local_deformable_model、create_planar_uncalib_deformable_model、create_planar_calib_deformable_model。借助Gemini的分析,回答如下:
这是一个关于HALCON中三种不同“可变形”匹配算子的经典问题。它们的核心区别在于处理变形的类型和是否使用相机标定。
简单来说:
create_local_deformable_model:用于物体本身会发生局部形变的情况(非刚性物体)。create_planar_uncalib_deformable_model:用于平面刚性物体,但由于视角变化(透视)而看起来变形。它在2D像素坐标系下工作,不需要相机标定。create_planar_calib_deformable_model:与上一个类似,用于平面刚性物体的视角变化。但它在3D世界坐标系下工作,必须有相机标定,用于高精度位姿测量。
详细对比
为了方便理解,我们将它们分为两大类:局部变形 vs 平面(透视)变形。
1. 局部可变形 vs 平面可变形
create_local_deformable_model(局部可变形)- 处理什么变形?:处理非刚性变形。这意味着物体本身在物理上发生了拉伸、弯曲或扭曲。
- 典型例子:
- 印在T恤、布料上的Logo(布料会褶皱)。
- 印在塑料包装袋上的文字(包装袋不平整)。
- 检查皮革、木材等天然材料上的纹理。
- 不平整的铸件上的标记。
- 如何工作?:它将模型分为多个小部分,允许这些部分在一定范围内(局部)相对移动。
- 结果:它返回物体在图像中的2D位置、角度以及一个描述局部变形的“变形场”。它不提供3D位姿。
create_planar_..._deformable_model(平面可变形,包括标定和非标定)- 处理什么变形?:处理刚性物体的透视变形。物体本身是平的、硬的(如PCB板、纸张),但由于相机不是垂直拍摄它,导致它在图像中看起来被拉伸或倾斜(例如,一个矩形变成了梯形)。
- 典型例子:
- 从不同角度拍摄桌面上的名片。
- 在倾斜的传送带上定位PCB板。
- 机器人引导中,从斜上方抓取一个平坦的工件。
- 如何工作?:它通过一个2D投影变换(单应性矩阵 Homography)来描述这种变形。
2. 两种平面模型的区别:uncalib vs calib
这是planar_...系列的核心区别,关键在于你是否标定了相机,以及你需要什么结果。
create_planar_uncalib_deformable_model(平面非标定)- 标定?:否 (Uncalibrated)。你不需要提供相机参数。
- 工作坐标系:2D 图像(像素)坐标系。
- 结果:它返回一个2D单应性矩阵 (Homography)。这个矩阵描述了模板(像素)是如何变换到当前图像(像素)的。
- 何时使用?:当你只需要在2D图像上对齐或定位物体时。例如,你只想知道物体在图像中的像素位置,或者你想在倾斜的物体上进行2D的OCR或测量(你需要先用这个矩阵“校正”图像)。
create_planar_calib_deformable_model(平面标定)- 标定?:是 (Calibrated)。在创建模型时,你必须提供相机参数(通过
set_calib_data_cam_param)和模型在世界坐标系中的位姿(通过set_calib_data_observ_pose)。 - 工作坐标系:3D 世界坐标系。
- 结果:它直接返回物体在3D世界坐标系中的位姿 (Pose)。
- 何时使用?:当你需要进行高精度的机器人引导或3D测量时。例如,你需要告诉机械手在现实世界中(X, Y, Z毫米)的哪个位置去抓取这个倾斜的平面物体。
- 标定?:是 (Calibrated)。在创建模型时,你必须提供相机参数(通过
本篇文章主要讨论局部可变形模板匹配,从上面的回答中我们注意到以下文字:
如何工作?:它将模型分为多个小部分,允许这些部分在一定范围内(局部)相对移动。
根据这一思路,我将模板图像划分为多个区块,将位于同一区块内的特征点归为一组。在匹配过程中,对每个区块独立进行匹配,并允许其在限定范围内自由移动。最终,将所有区块的匹配结果进行加权融合,从而得出综合匹配分数。
针对模板划分,我采用最基础的网格划分方法:根据模板图像的实际尺寸,将其均匀划分为2x2、3x3、4x4、5x5、6x6或更多等不同密度的网格。

针对匹配过程,我对每个网格内的特征点独立进行匹配,允许每个网格在限定范围内自由移动。记录每个网格的匹配分数和权重后,将所有网格的分数按权重进行融合,最终得到综合匹配分数。
下面是局部可变形模板匹配的实际例子,能看到即使图片局部存在较大位移,依然能得到很高的匹配分数。
