3. 2D定位基础概念

在机器视觉与工业自动化领域,2D定位是引导机器人抓取、精密对位、缺陷检测和尺寸测量的核心前置步骤。Halcon作为业界领先的机器视觉库,其定位能力依赖于对“模板匹配”、“特征定位”以及“坐标系统变换”三大支柱的深刻理解。本章将系统拆解这三个基础概念,帮助您建立从“图像像素”到“物理世界坐标”的完整认知链路,为后续的TCP/IP通信与结果输出打下坚实的数学与逻辑基础。

2D定位核心概念链路图 图像采集 相机/镜头/光源 分辨率/畸变/噪声 定位方法选择 模板匹配 (形状/灰度) 特征定位 (Blob/边缘) 像素坐标 (Row, Column) 原点: 左上角 世界坐标 (X, Y, Z) 单位: mm 核心转换模型 像素坐标 → 世界坐标 涉及: 内参(焦距/畸变) + 外参(旋转/平移) Halcon算子: calibrate_cameras / vector_to_hom_mat2d 输出结果 Row/Column + Angle + Score → 世界坐标(X,Y) + 角度 匹配/提取 标定/变换

3.1 模板匹配:基于灰度与形状的定位原理

模板匹配是Halcon中最常用的定位手段,其本质是在搜索图像中寻找与预先定义模板最相似的区域。根据匹配依据的不同,可分为基于灰度值的匹配和基于形状的匹配。灰度匹配直接比较像素亮度分布,计算速度快但对光照变化敏感;形状匹配则提取边缘轮廓的梯度方向信息,对光照、遮挡和噪声具有更强的鲁棒性,是工业现场的首选方案。

核心原理:Halcon的create_shape_model算子会从模板图像中提取边缘点的梯度方向,生成一个紧凑的多分辨率金字塔模型。在搜索阶段,find_shape_model在图像金字塔的各层中滑动窗口,计算梯度方向与模型方向的相似度,通过归一化互相关(NCC)或最小二乘距离来评分。最终返回的Score值(0~1)表示匹配的置信度,通常要求大于0.5才认为定位成功。

对比维度灰度模板匹配形状模板匹配
鲁棒性对光照、噪声敏感对光照、遮挡、噪声鲁棒
计算速度较快(直接像素比较)较慢(需金字塔搜索)
适用场景光照稳定、背景简单工业产线、复杂背景
关键算子create_gray_modelcreate_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对亚像素边缘进行圆拟合,获得更高精度的圆心坐标。

案例拆解:PCB板Mark点定位
背景:某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)
风险提示:标定时使用的点对必须覆盖整个视野范围,且分布均匀。若标定板倾斜或光照不均,会导致标定误差放大。建议使用Halcon自带的calplate标定板,并保持标定板与相机平面平行(倾斜角小于5度)。

3.4 综合实战:从图像采集到坐标输出的完整链路

下面通过一个完整的案例,将模板匹配、特征定位和坐标转换串联起来。假设我们需要定位一个手机中框上的螺丝孔,并输出其世界坐标供机器人锁付。

场景约束:相机分辨率为2448×2048,视野范围100mm×80mm,要求定位精度±0.05mm,节拍时间小于500ms。

  1. 模板创建:使用create_shape_model创建螺丝孔的形状模板,设置金字塔层数5,角度范围-30°~30°。
  2. 在线匹配:调用find_shape_model,设置最小Score为0.6,最大匹配数为1,获得像素坐标(Row, Col)和角度Angle。
  3. 特征验证:在匹配位置周围ROI内执行Blob分析,计算螺丝孔的实际半径,若与模板半径偏差超过5%则判定为异常。
  4. 坐标转换:利用预先标定的HomMat2D矩阵,将像素坐标转换为世界坐标,并补偿角度偏移。
  5. 结果输出:将世界坐标(X, Y, Angle)通过TCP/IP协议发送给机器人控制器。
步骤输入算子/方法输出耗时(ms)
1模板图像create_shape_model模型句柄200(离线)
2实时图像find_shape_modelRow, Col, Angle80
3ROI区域threshold + fit_circle半径, 圆心30
4像素坐标affine_trans_point_2dX, Y (mm)1
5坐标数据TCP/IP Socket字符串报文5

结果分析:实测100个样本,定位成功率99%,平均定位误差0.03mm,最大误差0.06mm,满足产线需求。在调试过程中发现,当产线光照强度波动超过20%时,匹配Score会下降至0.4以下,通过增加光源控制器反馈闭环解决了该问题。

总结复盘:2D定位的精度不仅取决于算法本身,更依赖于成像质量、标定精度和机械重复精度。建议在项目初期就建立标准化的标定流程,并定期校验HomMat2D矩阵是否漂移。对于高精度场景,可考虑使用亚像素边缘提取和最小二乘拟合来提升定位稳定性。