局部可变形模板匹配算法的初步实现

让我们首先理解halcon中关于2D可变形模板匹配的三个关键算子的区别:create_local_deformable_modelcreate_planar_uncalib_deformable_modelcreate_planar_calib_deformable_model。借助Gemini的分析,回答如下:


这是一个关于HALCON中三种不同“可变形”匹配算子的经典问题。它们的核心区别在于处理变形的类型是否使用相机标定

简单来说:

  1. create_local_deformable_model:用于物体本身会发生局部形变的情况(非刚性物体)。
  2. create_planar_uncalib_deformable_model:用于平面刚性物体,但由于视角变化(透视)而看起来变形。它在2D像素坐标系下工作,不需要相机标定。
  3. create_planar_calib_deformable_model:与上一个类似,用于平面刚性物体视角变化。但它在3D世界坐标系下工作,必须有相机标定,用于高精度位姿测量。

详细对比

为了方便理解,我们将它们分为两大类:局部变形 vs 平面(透视)变形

1. 局部可变形 vs 平面可变形

2. 两种平面模型的区别:uncalib vs calib

这是planar_...系列的核心区别,关键在于你是否标定了相机,以及你需要什么结果


本篇文章主要讨论局部可变形模板匹配,从上面的回答中我们注意到以下文字:

如何工作?:它将模型分为多个小部分,允许这些部分在一定范围内(局部)相对移动。

根据这一思路,我将模板图像划分为多个区块,将位于同一区块内的特征点归为一组。在匹配过程中,对每个区块独立进行匹配,并允许其在限定范围内自由移动。最终,将所有区块的匹配结果进行加权融合,从而得出综合匹配分数。

针对模板划分,我采用最基础的网格划分方法:根据模板图像的实际尺寸,将其均匀划分为2x2、3x3、4x4、5x5、6x6或更多等不同密度的网格。

示例图片 示例图片 示例图片

针对匹配过程,我对每个网格内的特征点独立进行匹配,允许每个网格在限定范围内自由移动。记录每个网格的匹配分数和权重后,将所有网格的分数按权重进行融合,最终得到综合匹配分数。

下面是局部可变形模板匹配的实际例子,能看到即使图片局部存在较大位移,依然能得到很高的匹配分数。

示例图片 示例图片 示例图片 示例图片 示例图片 示例图片