3、特征提取基础:边缘检测、角点检测、Blob分析、区域特征(面积、中心、方向)的计算
在Halcon的2D对位算法体系中,特征提取是连接图像预处理与几何变换求解之间的核心桥梁。对位算法的本质是寻找两幅图像(模板图像与运行图像)中同一物理特征的位置与姿态差异,因此,特征提取的质量直接决定了后续仿射变换矩阵的精度与鲁棒性。本章将系统讲解Halcon中四种最基础且最常用的特征提取手段:边缘检测、角点检测、Blob分析以及区域特征计算,并深入剖析它们在2D对位场景中的工程化应用逻辑。
3.1 边缘检测:从像素梯度到亚像素轮廓
核心原理
边缘是图像中灰度发生剧烈变化的位置,在物理上对应物体的轮廓、表面纹理边界或光照分界线。在Halcon中,边缘检测并非仅停留在像素级梯度计算,而是通过算子edges_sub_pix直接输出亚像素精度的边缘轮廓(XLD,eXtended Line Description)。该算子内部集成了多种滤波器(如Canny、Deriche、Lanser等),通过非极大值抑制和滞后阈值连接,提取出连续、单像素宽、具有亚像素坐标的轮廓线。对于2D对位而言,亚像素边缘是后续拟合直线、圆或矩形的基础,其精度直接影响旋转中心与平移量的计算误差。
操作流程
- 图像预处理:使用
gauss_filter或median_image抑制噪声,避免伪边缘。 - 亚像素边缘提取:调用
edges_sub_pix (Image, Edges, 'canny', 1.5, 20, 40),其中Sigma控制平滑程度,Low和High为滞后阈值。 - 轮廓筛选:通过
select_contours_xld按长度、方向或封闭性过滤干扰轮廓。 - 几何拟合:使用
fit_line_contour_xld或fit_circle_contour_xld将轮廓转化为参数化几何元素。
smooth_contours_xld进行轮廓平滑,最后用fit_line_contour_xld的'Huber'权重抑制离群点,从而获得稳定的板边直线方程。
gray_histo观察灰度分布后合理设定。
3.2 角点检测:特征点的定位与匹配
核心原理
角点是图像中两条或多条边缘的交点,具有旋转不变性和光照鲁棒性,是2D对位中常用的特征点。Halcon提供points_harris算子实现Harris角点检测,其核心思想是计算图像局部窗口内灰度变化的自相关矩阵,通过响应值判断该点是否为角点。与边缘检测不同,角点检测直接输出离散的像素坐标(可扩展至亚像素),适合作为模板匹配的种子点或视觉伺服的控制点。
判断方法与参数选择
| 参数 | 含义 | 推荐范围 | 对位场景建议 |
|---|---|---|---|
| SigmaGrad | 梯度计算的高斯平滑 | 0.7 - 1.5 | 图像噪声大时取1.2 |
| SigmaSmooth | 响应图平滑 | 1.0 - 3.0 | 控制角点密集程度 |
| Alpha | 角点响应系数 | 0.04 - 0.06 | 0.05为经典值 |
| Threshold | 响应阈值 | 相对值,需调试 | 先取低值再筛选 |
案例拆解:芯片引脚对位
在半导体封装设备的视觉对位中,芯片对角上的两个焊盘角点常被用作定位基准。初始图像中,由于金线反光,Harris响应值分布杂乱。处理流程如下:
- 使用
points_harris (Image, SigmaGrad, SigmaSmooth, Alpha, Threshold, Row, Col)提取候选角点。 - 通过
sort_region按响应值降序排列,仅保留前20个点。 - 利用
distance_pp计算候选点与芯片模板中心的大致距离,剔除远离目标区域的噪点。 - 最终保留4个最强角点,通过
vector_to_rigid计算与模板角点的仿射变换。
reduce_domain,仅在小范围内检测角点,既提升速度又减少误检。若角点位置需要亚像素精度,可对Harris响应图做抛物线插值,或改用corner_points_sub_pix(基于轮廓的交点计算)。
3.3 Blob分析:连通域提取与筛选
核心原理
Blob分析是指将图像中灰度值满足特定范围的像素集合提取为连通区域,并基于区域的形状、灰度、位置等特征进行筛选。在Halcon中,典型流程为:threshold → connection → select_shape。Blob分析特别适用于背景与目标灰度差异明显的场景,如工件定位、缺陷检测、液位测量等。对于2D对位,Blob分析通常用于提取具有明显灰度特征的标记点(如圆形Mark点、矩形基准块)。
操作流程与筛选逻辑
// 示例:提取圆形Mark点
threshold (Image, Region, 0, 128) // 二值化
connection (Region, ConnectedRegions) // 连通域分割
select_shape (ConnectedRegions, SelectedRegions,
['area', 'circularity'], 'and',
[500, 0.8], [5000, 1.0]) // 按面积和圆度筛选
shape_trans (SelectedRegions, RegionTrans, 'outer_circle') // 拟合外接圆
area_center (RegionTrans, Area, Row, Column) // 获取圆心坐标
实战场景:手机屏幕组装对位
在屏幕与中框的贴合工序中,屏幕玻璃上印刷有四个圆形对位Mark点。由于玻璃透光,Mark点灰度与背景差异较小,直接阈值分割效果不佳。改进方案:
- 使用
invert_image反转灰度,使Mark点变为亮目标。 - 采用
dyn_threshold动态阈值替代固定阈值,适应光照不均。 - 通过
select_shape限定面积范围(如2000-3000像素)和圆度(>0.9),排除玻璃边缘干扰。 - 最终输出四个圆心坐标,作为对位特征点。
illuminate或scale_image进行灰度归一化。此外,connection默认采用8邻域连通,若目标存在细小断裂,可改用connection配合closing_rectangle1先闭合间隙。
3.4 区域特征计算:面积、中心与方向
核心原理
区域特征是将提取到的Blob或分割区域转化为数值参数的过程。其中,面积(Area)表示区域像素总数;中心(Row, Column)是区域的灰度质心;方向(Orientation)则通过计算区域的二阶矩(惯性矩)获得,表示区域主轴与图像x轴的夹角。在2D对位中,区域中心提供了平移量(Tx, Ty),方向提供了旋转量(θ),两者结合即可构造仿射变换矩阵。
计算方法与Halcon实现
| 特征 | 数学定义 | Halcon算子 | 对位用途 |
|---|---|---|---|
| 面积 | 像素计数 | area_center | 筛选目标大小 |
| 中心 | 一阶矩 m10/m00, m01/m00 | area_center | 平移基准 |
| 方向 | 0.5 * atan2(2*m11, m20-m02) | orientation_region | 旋转角度 |
| 椭圆参数 | 二阶矩推导 | elliptic_axis | 形状校验 |
案例拆解:药瓶盖对位
在药品灌装线上,瓶盖顶部有一个矩形凹槽,需要旋转至固定角度后压合。使用Blob分析提取凹槽区域后:
- 通过
area_center (Region, Area, Row, Column)获得凹槽中心坐标。 - 通过
orientation_region (Region, Phi)获得凹槽主轴方向角。 - 将模板的(Row, Column, Phi)与当前值代入
vector_to_rigid,生成旋转平移矩阵。 - 使用
affine_trans_image将当前图像校正至模板姿态,完成对位。
gen_contour_region_xld),再拟合圆或直线,通过几何元素的参数计算中心与方向,可将精度提升至0.1像素级别。