HALCON Local Deformable Matching 实现(一)

find_local_deformable_model 是 HALCON 中用于处理局部形变的模板匹配算子。为了理解其背后的局部形变建模思想,本文参考 Hofhauser、Steger 和 Navab 提出的 Edge-Based Template Matching with a Harmonic Deformation Model,并结合自己的实现过程,对 Local Deformable Matching 的核心流程进行分析。

核心思想

该算子的基本思路可概括为四个步骤:

  1. 构建局部邻域: 为每个特征点选取最近的 k 个邻居,组成局部点集,匹配时以该整体为单位进行相似度度量。

  2. 估计稀疏位移: 对每个局部点集进行匹配,计算其整体平移量 (dx, dy),得到仅覆盖特征点位置的稀疏形变场

  3. 插值生成稠密场: 以稀疏形变场为约束,通过求解拉普拉斯方程(调和函数)将位移平滑传播至全图所有像素,得到稠密形变场。

  4. 图像校正: 利用最终的稠密形变场对图像进行校正,也可将模板扭曲至目标形状,完成匹配。

具体实现

1. 特征点提取与邻域构建

特征点提取结果

图1. 特征点提取结果

邻域构建示例1 邻域构建示例2

图2. 邻域构建结果(不同特征点的局部点集示例)

2. 局部块匹配与稀疏位移估计

将每个局部点集视作独立块,与全局形状匹配类似,对每个块独立进行匹配。在相似度响应图中寻找峰值区域,提取亚像素位移 (dx, dy),汇总后得到稀疏形变场,作为后续稠密插值的约束。

分值图1 分值图2

图3. 局部块分值图

稀疏形变场 局部放大

图4. 稀疏形变场(左:全局稀疏位移,右:局部放大)

3. 调和插值生成稠密形变场

3.1 为什么位移场要满足拉普拉斯方程?

想象位移场 $u(x,y)$ 是一张橡皮膜的高度。你希望这张膜:

数学上,曲面的弯曲程度由它的拉普拉斯算子衡量:

\[\nabla^2 u = \frac{\partial^2 u}{\partial x^2} + \frac{\partial^2 u}{\partial y^2}\]

因此,要求位移场满足拉普拉斯方程,等价于要求它在约束点之间以最平滑的方式过渡

3.2 二维拉普拉斯算子

将 $x$ 和 $y$ 方向的二阶导数合并,离散形式为:

\[\nabla^2 u \approx [u(x+1,y) + u(x-1,y) + u(x,y+1) + u(x,y-1)] - 4u(x,y)\]

令其等于 0(拉普拉斯方程):

\[u(x,y) = \frac{u(x+1,y) + u(x-1,y) + u(x,y+1) + u(x,y-1)}{4}\]

上式即标准的五点法平滑核,代码中可直接用卷积实现。

3.3 Jacobi 迭代求解稠密形变场

以稀疏位移场中的匹配点为约束,对其余像素反复应用 3.2 节的五点平滑核进行 Jacobi 迭代,直至收敛,即可得到平滑的稠密形变场。其中,匹配点的位移在迭代过程中始终保持不变。

稠密形变场 局部放大

图5. 稠密形变场(左:逐像素位移场,右:局部放大)

4. 图像校正与模板扭曲

获得稠密形变场后,即可对图像或模板进行几何变换以消除形变影响。

校正后图像 校正后模板

图6. 校正结果(左:校正后图像,右:扭曲后模板)

总结与展望

错误与缺失位移示例

图7. 错误位移与匹配缺失示例

目前,基于稠密形变场的图像校正与模板扭曲已基本实现配准,但部分细节仍有待完善。理论上,只要位移估计足够精确,变换效果便不是瓶颈。

实现过程中发现,局部匹配存在匹配错误匹配缺失的问题,且难以完全避免。例如,当局部点集呈平行线结构时,匹配容易产生歧义,导致异常位移;某些区域则因纹理匮乏或对比度不足而无法匹配,造成位移缺失。对此,可考虑以下策略加以抑制:

上述问题的深入分析与改进方案,将在后续文章中详细展开。