3. 2D定位基础概念
在机器视觉与工业自动化领域,2D定位是引导机器人抓取、精密对位、缺陷检测和尺寸测量的核心前置步骤。Halcon作为业界领先的机器视觉库,其定位能力依赖于对“模板匹配”、“特征定位”以及“坐标系统变换”三大支柱的深刻理解。本章将系统拆解这三个基础概念,帮助您建立从“图像像素”到“物理世界坐标”的完整认知链路,为后续的TCP/IP通信与结果输出打下坚实的数学与逻辑基础。
3.1 模板匹配:基于灰度与形状的定位原理
模板匹配是Halcon中最常用的定位手段,其本质是在搜索图像中寻找与预先定义模板最相似的区域。根据匹配依据的不同,可分为基于灰度值的匹配和基于形状的匹配。灰度匹配直接比较像素亮度分布,计算速度快但对光照变化敏感;形状匹配则提取边缘轮廓的梯度方向信息,对光照、遮挡和噪声具有更强的鲁棒性,是工业现场的首选方案。
核心原理:Halcon的create_shape_model算子会从模板图像中提取边缘点的梯度方向,生成一个紧凑的多分辨率金字塔模型。在搜索阶段,find_shape_model在图像金字塔的各层中滑动窗口,计算梯度方向与模型方向的相似度,通过归一化互相关(NCC)或最小二乘距离来评分。最终返回的Score值(0~1)表示匹配的置信度,通常要求大于0.5才认为定位成功。
| 对比维度 | 灰度模板匹配 | 形状模板匹配 |
|---|---|---|
| 鲁棒性 | 对光照、噪声敏感 | 对光照、遮挡、噪声鲁棒 |
| 计算速度 | 较快(直接像素比较) | 较慢(需金字塔搜索) |
| 适用场景 | 光照稳定、背景简单 | 工业产线、复杂背景 |
| 关键算子 | create_gray_model | create_shape_model |
num_levels参数控制金字塔层数(通常4~6层),并设置angle_start和angle_extent来限定搜索角度范围。若目标可能发生微小缩放,可启用scale_min和scale_max,但会显著增加计算时间。
3.2 特征定位:Blob分析与边缘拟合
当目标物体不具备丰富的纹理或清晰的边缘轮廓时,模板匹配可能失效。此时可改用特征定位方法,即通过分析图像中的几何特征(如面积、圆度、直线、圆孔等)来确定位置。Halcon中的Blob分析(threshold + connection + select_shape)是最典型的特征定位流程,适用于高对比度场景下的零件、焊点、Mark点定位。
操作流程:首先通过阈值分割将目标区域从背景中分离,然后使用连通域分析将相邻像素合并为独立区域,接着通过形状特征(面积、长宽比、凸度)筛选出目标区域,最后计算区域的中心坐标(area_center)和方向(orientation_region)。对于圆形Mark点,还可使用fit_circle_contour_xld对亚像素边缘进行圆拟合,获得更高精度的圆心坐标。
背景:某SMT贴片产线需要定位PCB板上的圆形基准Mark点(直径2mm),用于后续贴装头的对位。
初始现象:Mark点周围有铜箔反光干扰,直接阈值分割产生大量噪点。
关键参数:使用
threshold (Image, Regions, 0, 120)提取暗色Mark点,设置面积筛选范围select_shape (Regions, SelectedRegions, 'area', 'and', 500, 2000)。分析过程:通过
opening_circle去除细小噪点,再使用fit_circle_contour_xld拟合亚像素轮廓,得到圆心坐标(123.45, 678.90)像素,半径98.5像素。结果对比:与人工测量值偏差小于0.02mm,满足产线±0.05mm的精度要求。
复盘经验:当反光严重时,可考虑使用偏振光源或调整相机曝光时间,而非单纯依赖图像处理算法。
3.3 坐标系统:像素坐标与世界坐标的转换矩阵
在Halcon中,图像坐标系的原点位于左上角,Row轴向下为正,Column轴向右为正,单位为像素。而机器人或运动控制平台通常使用世界坐标系,以毫米为单位,原点位于机械零点。两者之间的转换关系由相机内参(焦距、主点、畸变系数)和相机外参(旋转矩阵R、平移向量T)共同决定。
转换方法:对于平面物体(Z=0),可使用单应性矩阵(Homography)简化转换。通过vector_to_hom_mat2d算子,输入至少4组对应的像素坐标与世界坐标点对,即可求解出3×3的变换矩阵。对于需要三维空间定位的场景,则需使用calibrate_cameras进行张正友标定,获得完整的相机内外参。
// Halcon标定与转换示例
* 读取标定板图像并提取角点
find_calib_object (Image, CalibObj, CalibObjID, 0, 0, [], [])
* 执行相机标定
calibrate_cameras (CalibObj, CameraParam, FinalPose, Nx, Ny, Nz)
* 创建像素到世界坐标的变换矩阵
vector_to_hom_mat2d (PixelRows, PixelCols, WorldX, WorldY, HomMat2D)
* 应用变换
affine_trans_point_2d (HomMat2D, Row, Col, WorldX, WorldY)
calplate标定板,并保持标定板与相机平面平行(倾斜角小于5度)。
3.4 综合实战:从图像采集到坐标输出的完整链路
下面通过一个完整的案例,将模板匹配、特征定位和坐标转换串联起来。假设我们需要定位一个手机中框上的螺丝孔,并输出其世界坐标供机器人锁付。
场景约束:相机分辨率为2448×2048,视野范围100mm×80mm,要求定位精度±0.05mm,节拍时间小于500ms。
- 模板创建:使用
create_shape_model创建螺丝孔的形状模板,设置金字塔层数5,角度范围-30°~30°。 - 在线匹配:调用
find_shape_model,设置最小Score为0.6,最大匹配数为1,获得像素坐标(Row, Col)和角度Angle。 - 特征验证:在匹配位置周围ROI内执行Blob分析,计算螺丝孔的实际半径,若与模板半径偏差超过5%则判定为异常。
- 坐标转换:利用预先标定的HomMat2D矩阵,将像素坐标转换为世界坐标,并补偿角度偏移。
- 结果输出:将世界坐标(X, Y, Angle)通过TCP/IP协议发送给机器人控制器。
| 步骤 | 输入 | 算子/方法 | 输出 | 耗时(ms) |
|---|---|---|---|---|
| 1 | 模板图像 | create_shape_model | 模型句柄 | 200(离线) |
| 2 | 实时图像 | find_shape_model | Row, Col, Angle | 80 |
| 3 | ROI区域 | threshold + fit_circle | 半径, 圆心 | 30 |
| 4 | 像素坐标 | affine_trans_point_2d | X, Y (mm) | 1 |
| 5 | 坐标数据 | TCP/IP Socket | 字符串报文 | 5 |
结果分析:实测100个样本,定位成功率99%,平均定位误差0.03mm,最大误差0.06mm,满足产线需求。在调试过程中发现,当产线光照强度波动超过20%时,匹配Score会下降至0.4以下,通过增加光源控制器反馈闭环解决了该问题。