3. 图像采集与相机标定
在 HALCON 工业视觉项目中,图像采集与相机标定是整条处理链的起点。采集决定了“拿到什么质量的原始数据”,标定决定了“像素坐标如何映射到真实物理世界”。两者一旦存在系统性偏差,后续的测量、定位、缺陷检测都会带着误差运行,且很难通过算法弥补。本节围绕面阵与线阵相机的采集方式、主流接口协议、标定板选择、内外参标定、畸变校正以及手眼标定展开,重点说明实际工程中如何配置、如何计算、如何判断结果是否可用。
面阵相机与线阵相机的采集差异
面阵相机一次曝光获得一幅二维图像,适合静态或准静态场景,例如零件定位、字符识别、表面缺陷检测。它的采集逻辑是“整帧曝光—整帧传输”,HALCON 中通过 open_framegrabber 打开采集接口,再用 grab_image 或 grab_image_async 取图。异步采集允许在上一帧处理的同时触发下一帧,是提高节拍的关键。
线阵相机每次只采集一行像素,必须配合物体与相机之间的相对运动,逐行拼接成完整图像。它适合连续卷材、传送带上的长条物体,例如布匹、金属带、印刷品。线阵采集的核心参数是行频(line rate)与运动速度的匹配:若物体运动速度为 v(mm/s),单行对应的物理宽度为 w(mm/line),则行频 f = v / w。例如物体速度 500 mm/s、单行覆盖 0.1 mm,则行频需设为 5000 Hz。行频设置不当会导致图像被拉伸或压缩,表现为圆形变椭圆、正方形变矩形。HALCON 中通常使用 open_framegrabber 指定 'LineScan' 类接口,并通过 set_framegrabber_param 设置 'lines_per_scan' 等参数。
GenICam、GigE Vision、USB3 Vision 接口
工业相机接口的标准化极大降低了 HALCON 的集成成本。GenICam 是通用相机编程接口标准,它定义了相机功能的描述方式(XML 描述文件)和访问方式,使不同厂商的相机可以用统一的 API 访问。GigE Vision 基于千兆以太网,传输距离可达 100 米,支持 PoE 供电,适合多相机、远距离部署;USB3 Vision 基于 USB 3.0,带宽高、即插即用,适合单相机、短距离、高帧率场景。
在 HALCON 中,这三类接口通常通过 open_framegrabber 的 Interface 参数区分,例如 'GigEVision2'、'USB3Vision'。实际配置时需关注:GigE 的包大小(packet size)与网卡巨帧(Jumbo Frame)设置,包大小过小会导致丢包;USB3 的带宽分配与供电稳定性。判断采集是否正常,可观察 grab_image 返回的图像是否完整、是否有丢行或撕裂。
标定板选择与内外参标定
标定板是标定的物理基准。HALCON 常用的是圆点阵列标定板(如 calplate 系列)和棋盘格标定板。选择时需考虑:标定板尺寸应覆盖相机视场的 1/3 以上,圆点间距与相机分辨率匹配,标定板平整度要高。标定板文件(.descr)必须与实物一致,否则标定结果会系统性偏移。
相机内参标定确定焦距、主点、像素尺寸和畸变系数;外参标定确定相机相对于世界坐标系的位置和姿态。HALCON 中通过 find_calib_object 提取标定板上的标记点,再用 calibrate_cameras 计算内外参。实际操作中,需要拍摄 10~20 张不同位姿的标定板图像,覆盖视场各个区域和倾斜角度。标定完成后,用 get_calib_data 读取参数,并用 calibrate_cameras 返回的平均误差判断质量:误差通常应小于 0.1 像素,若大于 0.3 像素则需检查标定板图像质量或位姿分布。
畸变校正与手眼标定
镜头畸变主要表现为径向畸变(桶形或枕形)和切向畸变。HALCON 通过 change_radial_distortion_cam_off 或 gen_radial_distortion_map 生成校正映射,再用 map_image 对图像进行校正。校正后的图像中,直线应保持直线,这是判断畸变校正是否有效的直观依据。
手眼标定解决的是相机坐标系与机器人(或运动平台)坐标系之间的变换关系。常见形式有两种:眼在手(eye-in-hand),相机安装在机器人末端;眼在外(eye-to-hand),相机固定在外部。HALCON 中通过 calibrate_hand_eye 完成,需要机器人带动标定板或相机运动多个位姿,同时记录机器人位姿和标定板在相机中的位姿。标定结果是一个 4×4 的齐次变换矩阵,用于将相机坐标下的目标位置转换到机器人坐标下。判断手眼标定质量,可检查标定误差和重投影误差,通常要求误差小于 0.5 mm(具体取决于应用精度要求)。
采集与标定的工程检查要点
| 环节 | 关键参数/对象 | 判断依据 |
|---|---|---|
| 面阵采集 | 曝光时间、增益、触发模式 | 图像不过曝、不欠曝,运动物体无拖影 |
| 线阵采集 | 行频、物体速度、单行宽度 | 圆形不变形,行频与速度匹配 |
| 接口配置 | GigE 包大小、USB3 带宽 | 无丢包、无撕裂、帧率稳定 |
| 内参标定 | 焦距、主点、畸变系数 | 平均误差 < 0.1 像素 |
| 畸变校正 | 径向畸变映射 | 直线校正后仍为直线 |
| 手眼标定 | 4×4 变换矩阵 | 重投影误差满足精度要求 |
采集与标定的每一步都直接影响后续算法的输入质量。实际项目中,建议先固定相机与镜头的物理安装,再完成内参标定和畸变校正,最后进行手眼标定。标定文件应随项目版本管理,避免因参数错配导致测量结果漂移。