其核心原理可以分为两个主要部分:模板创建(离线阶段)和图像匹配(在线阶段)。
Shape-Based Matching(形状模板匹配)不是比较灰度,而是比较轮廓(Edge)
Shape-Based Matching = 边缘提取 + 梯度方向编码 + 图像金字塔 + 几何搜索 + 亚像素优化
因此:
- 光照变化影响小
- 对旋转鲁棒
- 可支持部分遮挡
- 定位精度高
保留:边缘。所以:它根本不关心:里面:到底:黑色还是:白色。
因此:
光照变化:影响很小
简单流程:
原图 ↓ ROI ↓ 边缘提取 ↓ 建立Shape Model ↓ 保存模型 ------------------------ 检测图片 ↓ 边缘提取 ↓ 金字塔搜索 ↓ 粗定位 ↓ 细定位 ↓ 亚像素优化 ↓ 输出 (Row Column Angle Score)2D 形状匹配 目标物体被遮挡,如何解决-CSDN博客
一、 模板创建 - 学习阶段
这个阶段的目标是创建一个紧凑而富有信息的模板,用于在后续的图像中搜索。
输入参考图像:
选择一张高质量的、包含目标物体的图像,物体轮廓清晰,对比度好。
定义模板区域:
用户通过绘制一个ROI(感兴趣区域,通常是矩形、多边形或圆形)来精确指定图像中哪个部分是我们要找的模板。这步非常关键,因为它排除了背景干扰。
特征提取 - 核心所在:
Halcon并不直接存储模板的像素信息。相反,它提取物体的轮廓特征。这些特征主要基于物体的边缘(梯度信息)。
过程:
边缘检测:首先,在模板区域内进行边缘检测(如使用
sobel,edges_image等算子),得到物体的轮廓。创建模型:使用
create_shape_model或create_scaled_shape_model(带缩放)等算子。金字塔化:算子内部会为模板图像创建图像金字塔。金字塔顶层是原图的下采样版本(分辨率低,但特征稳定),底层是原图或接近原图的分辨率。
梯度方向量化:在每个金字塔层级上,计算轮廓上每个边缘点的梯度方向(即边缘的法线方向)。为了提升匹配速度和鲁棒性,Halcon会将连续的梯度方向量化为几个离散的方向(例如,量化为0°-360°之间的8、16或32个方向)。
结果:最终生成的模板(
.shm文件)本质上是一个多分辨率、由带方向的边缘点组成的集合,并附带了一些用于加速搜索的索引结构。
为什么用边缘/梯度?
因为相对于灰度值,边缘特征对光照变化、颜色变化、纹理变化以及局部遮挡具有更强的鲁棒性。
二、 图像匹配 - 搜索阶段
这个阶段的目标是在一张新的、待检测的图像中,快速找到所有与模板相似的实例。
输入待检测图像。
图像金字塔搜索:
匹配过程从金字塔的顶层(最低分辨率)开始。
原因:顶层图像像素少,噪声少,可以非常快地进行粗略的全局搜索,排除掉大量不可能的候选位置。
在顶层找到一些“可能”的位置(候选点)后,算法会沿着金字塔向下,在更高分辨率的图层上对这些候选位置进行精炼和验证。
这种“由粗到细”的策略是Halcon形状匹配能够如此快速的根本原因。
相似性度量 - 另一个核心:
在金字塔的每一层,算法如何判断某个位置是不是匹配呢?它使用一种叫做归一化相关系数的变体,但作用在梯度方向上。
具体来说,对于图像中的一个候选位置
(x, y)和旋转角度θ,算法会:将模板的轮廓点(及其量化后的梯度方向)通过仿射变换(平移
(x, y),旋转θ)投射到待检测图像上。在待检测图像上,计算这些投射点位置的实际梯度方向。
比较模板点的预期梯度方向和图像上对应点的实际梯度方向。如果两者方向一致,则认为该点是一个好的匹配点。
将所有轮廓点的匹配程度汇总,得到一个匹配得分(Score),范围通常是0到1。1表示完美匹配,0表示完全不匹配。
结果输出:
算法会输出所有匹配得分高于用户设定阈值(如
MinScore)的实例。对于每个找到的实例,输出其位置
(Row, Column)、旋转角度Angle,如果使用了可缩放模板,还会输出缩放比例Scale。
三、 主要特点与优势
高速度:
基于图像金字塔的“由粗到细”的搜索策略。
梯度方向的量化。
优化的算法,可以处理亚像素精度。
高鲁棒性:
对光照变化不敏感:因为使用梯度而非灰度值。
对遮挡不敏感:匹配得分是轮廓点的总和,即使有部分点被遮挡,只要剩余点的匹配得分超过阈值,依然能找到。
对噪声不敏感:金字塔顶层本身就具有平滑去噪的效果。
对杂乱背景不敏感:只要模板特征足够独特,就能从复杂背景中分离出来。
灵活性:
可以处理多个实例。
可以处理旋转和缩放(通过创建相应模型)。
甚至可以处理轻微的形变(通过设置
MaxDeformation等参数)。
四、 关键参数解析
在使用find_shape_model时,理解以下参数对优化匹配效果至关重要:
NumLevels:金字塔层数。层数越多,搜索越快,但可能会漏掉小物体或细节。AngleStart/AngleExtent:限制搜索的旋转角度范围,可以大幅加速搜索。MinScore:最小匹配得分。设置越高,要求越严格,可能漏检;设置过低,可能导致误检。Greediness:贪婪度(0-1)。控制搜索的“侵略性”。值越高(接近1),速度越快,但可能漏掉一些较差的匹配;值越低(接近0),速度越慢,但搜索更彻底。MaxOverlap:最大重叠度。用于处理多个实例时,允许实例之间重叠的比例。
总结
Halcon形状匹配的本质是:一种基于物体轮廓梯度方向的多分辨率、由粗到细的相似性搜索算法。
它的强大之处在于将人类视觉中“看形状”的直觉,转化为了一套高效、鲁棒的数学计算和搜索流程,使其成为工业视觉定位应用中无可替代的工具。
五、是形状匹配(Shape Matching)原理
1、HALCON 中模板匹配(Template Matching)的原理
| 类型 | HALCON 算子 | 特点 |
|---|---|---|
| 基于灰度的匹配 | create_template,find_template | 快速,但不抗光照、遮挡 |
| 基于形状(边缘)的匹配 | create_shape_model,find_shape_model | 高精度,抗光照、速度快 |
| 基于局部仿射的匹配 | create_aniso_shape_model | 允许方向非均匀缩放 |
| 基于透视模型的匹配 | create_planar_calib_deformable_model | 用于视角变化 |
| 基于梯度方向匹配 | create_shape_model_xld | 抗噪、抗光变化 |
ROI │ ▼ 提取边缘 │ ▼ 计算梯度方向 │ ▼ 筛选稳定边缘 │ ▼ 建立Shape Model边缘提取
为什么要建立图像金字塔?
例如:图片:4000×3000
直接搜索:速度:太慢。
HALCON:
Level3 400×300 ↓ Level2 800×600 ↓ Level1 1600×1200 ↓ Level0 4000×3000先:粗搜索。再:细搜索。速度:提高:几十倍。
2、形状模板匹配(Shape-Based Matching)数学原理
待检测图像 │ ▼ 建立图像金字塔 │ ▼ 每层提取边缘 │ ▼ 旋转搜索 │ ▼ 平移搜索 │ ▼ Score计算 │ ▼ 粗定位 │ ▼ 亚像素优化 │ ▼ 输出 (Row,Column,Angle,Score)HALCON 的 Shape Model 是基于边缘点(XLD)+ 梯度方向的匹配。
HALCON 提供多种类型的模板匹配:
形状匹配是在图像中找到与模板形状最相似的目标的技术。
在 Halcon 中,它主要用来处理目标位置、角度、缩放变化等情况。
Halcon 的形状匹配分两类:
基于轮廓的形状匹配(Contours-based / Shape-based Matching)
基于灰度的形状匹配(Gray-value / Intensity-based Matching)
1. 提取模板轮廓(XLD)
edges = Edges(image, ...) // Canny or Sobel XLD = SelectEdges(edges)2. 建立形状模型(Shape Model)
3、匹配阶段 find_shape_model 的原理
1. 梯度方向一致性检查
2. 位姿投票(Generalized Hough Transform)
数学
3. 模板评分(Score)
4. 亚像素精定位
6、vector_angle_to_rigid()
将:
模板坐标:
转换:
实际坐标。
5、HALCON vs OpenCV 模板匹配对比
| 项目 | HALCON shape-based | OpenCV TM / SIFT |
|---|---|---|
| 光照 | ✔ 抗光照 | ✘ 灰度 TM 很差 |
| 旋转缩放 | ✔ 支持 | ✘ TM 不支持 |
| 遮挡 | ✔ 可容忍 | ✘ TM 基本崩 |
| 精度 | 亚像素 | 到像素 |
| 速度 | 非常快 | 中等 |
| 工业应用 | 标配 | 较少 |
3️⃣ 旋转、缩放、平移处理
Halcon 的轮廓匹配支持:
平移:模板在图像中移动。
旋转:模板可旋转一定角度范围。
缩放:模板可按比例缩放。
亚像素精度:匹配结果可以达到亚像素精度。
Halcon 使用金字塔搜索和轮廓方向编码来加速匹配和提高鲁棒性。
4️⃣ 优缺点
| 优点 | 缺点 |
|---|---|
| 对目标形状变化(旋转、缩放)鲁棒 | 对严重遮挡敏感 |
| 精度高(亚像素级) | 对光照和噪声敏感 |
| 速度快,Halcon 内置优化 | 模板需要精心选择,边缘提取质量影响大 |
5️⃣ 应用场景
✅ 工业零件定位
✅ 机器人抓取
✅ PCB 定位
✅ 汽车零件装配
✅ 存在旋转
✅ 存在少量遮挡
✅ 光照变化
不推荐:
❌ 目标发生较大形变(橡胶、布料等)
❌ 尺度变化很大(普通 Shape Model 不处理尺度,可使用 Scaled Shape Model)
❌ 纹理丰富但边缘不明显(可考虑特征点方法)
| 内容 | Shape-Based Matching 核心 |
|---|---|
| 匹配对象 | 边缘点 + 梯度方向,不是灰度 |
| 数学基础 | 梯度计算、几何变换、边缘一致性评分、局部优化 |
| 建模 | create_shape_model提取稳定边缘并建立多分辨率模型 |
| 搜索 | 图像金字塔 + 平移 + 旋转搜索 |
| Score | 边缘位置和方向的一致程度(HALCON 未公开完整公式) |
| 精定位 | 亚像素优化(输出 Row、Column、Angle) |
| 关键算子 | create_shape_model、find_shape_model、create_shape_model_xld、find_shape_models |
| 适用场景 | 工业定位、机器人抓取、PCB、装配、存在旋转和一定遮挡 |