机器视觉标定基础:相机成像模型、内参外参与畸变类型
在进入 Halcon 标定板的具体设计与使用之前,我们必须先建立对机器视觉标定底层逻辑的清晰认知。标定不是“拍一张棋盘格照片再跑个算子”那么简单,它本质上是求解一个从三维世界坐标到二维像素坐标的数学映射关系。这个映射关系由相机成像模型决定,而标定板则是我们用来“探测”这个映射关系的精密工具。本章将系统拆解相机成像的物理与数学原理,厘清内参、外参、畸变的核心概念,并明确标定在工程实践中的真正目的与意义。
2.1 相机成像模型:从三维世界到二维像素
绝大多数工业相机遵循针孔成像模型(Pinhole Camera Model)。该模型假设光线沿直线传播,穿过相机光心(光学中心)后投射到成像平面上。虽然真实镜头存在厚度与畸变,但针孔模型作为理想化的基础,是所有标定算法的起点。
完整的成像过程可分解为四个坐标系的连续变换:
- 世界坐标系(Ow-XwYwZw):描述物体在真实三维空间中的位置,单位通常为毫米(mm)。
- 相机坐标系(Oc-XcYcZc):以相机光心为原点,Zc 轴指向镜头前方,Xc、Yc 轴分别平行于成像平面的水平与垂直方向。
- 图像物理坐标系(Oi-xy):以成像平面与光轴的交点(主点)为原点,单位仍为毫米,表示物体在成像平面上的物理投影位置。
- 图像像素坐标系(Op-uv):以图像左上角为原点,单位是像素(pixel),u 轴向右,v 轴向下。
从世界坐标到像素坐标的数学表达式如下:
λ * [u, v, 1]^T = K * [R | t] * [Xw, Yw, Zw, 1]^T
其中,λ 为尺度因子(深度),K 为内参矩阵,[R | t] 为外参矩阵(旋转与平移)。该公式揭示了标定的本质:求解内参矩阵 K 和外参矩阵 [R | t]。
为了更直观地理解这一过程,下图展示了从世界坐标点到像素坐标的完整链路:
2.2 内参与外参:标定求解的核心对象
2.2.1 内参矩阵 K
内参矩阵描述了相机坐标系到像素坐标系的映射关系,其形式为:
K = [ fx 0 cx ]
[ 0 fy cy ]
[ 0 0 1 ]
各参数含义如下:
- fx, fy:归一化焦距,单位为像素。fx = f / dx,fy = f / dy,其中 f 为物理焦距(mm),dx、dy 为单个像素在 x、y 方向上的物理尺寸(mm/pixel)。fx 与 fy 的比值反映了像素是否为正方形。
- cx, cy:主点坐标,即光轴与成像平面的交点,理想情况下位于图像中心,但实际装配误差会导致偏移。
内参是相机的固有属性,一旦镜头与相机相对位置固定,内参即保持不变。这也是为什么标定一次后,只要不更换镜头或松动接口,就可以长期使用同一组内参。
2.2.2 外参矩阵 [R | t]
外参描述了世界坐标系与相机坐标系之间的刚体变换关系:
[R | t] = [ r11 r12 r13 t1 ]
[ r21 r22 r23 t2 ]
[ r31 r32 r33 t3 ]
其中 R 为 3×3 旋转矩阵,t 为 3×1 平移向量。外参的含义是:将世界坐标系中的点,通过旋转和平移,变换到相机坐标系中。外参不是固定的,它取决于相机相对于被测物体的安装位置和姿态。每次移动相机或工件,外参都会改变。
find_calib_object 算子会同时输出每个标定板视图对应的外参,这些外参可用于后续的 3D 测量或机器人手眼标定。
2.3 畸变类型:镜头并非完美
真实镜头由于制造工艺和光学设计的限制,会产生各种畸变,导致实际成像位置偏离理想针孔模型。畸变主要分为三类:
| 畸变类型 | 产生原因 | 数学模型 | 视觉表现 |
|---|---|---|---|
| 径向畸变 | 镜片曲率不均匀,光线在边缘弯曲更严重 | δx_r = x(k1*r² + k2*r⁴ + k3*r⁶) | 直线变曲线,越靠近边缘越明显 |
| 切向畸变 | 镜头与成像平面不平行(装配误差) | δx_t = 2*p1*x*y + p2*(r² + 2x²) | 图像呈梯形或平行四边形变形 |
| 薄棱镜畸变 | 镜头内部镜片微小倾斜 | δx_p = s1*r² + s2*r⁴ | 高精度测量中不可忽略 |
在 Halcon 中,畸变模型通常使用 Division Model 或 Polynomial Model。Halcon 默认使用多项式模型,其畸变系数为:
畸变参数向量: [k1, k2, p1, p2, k3]
其中 k1、k2、k3 为径向畸变系数,p1、p2 为切向畸变系数。Halcon 的 calibrate_cameras 算子会自动优化这些参数,使重投影误差最小化。
2.4 标定的目的与意义:为什么不能跳过
标定的核心目的可以归纳为以下四点:
- 建立像素与物理尺寸的映射关系:通过内参和畸变系数,将像素坐标转换为无畸变的物理坐标,从而获得真实的尺寸信息。
- 消除镜头畸变:对图像进行校正,使直线恢复为直线,保证测量和定位的准确性。
- 确定相机在空间中的位姿:通过外参,将 2D 图像信息与 3D 世界坐标关联,为机器人引导、3D 重建提供基础。
- 多相机系统统一坐标系:在多相机拼接或立体视觉中,标定可确定各相机之间的相对位姿,实现数据融合。
从工程意义上看,标定直接决定了视觉系统的测量精度上限。一个未标定的系统,即使算法再优秀,也无法获得可靠的物理尺寸。标定质量的好坏,通常用重投影误差(Reprojection Error)来评估,Halcon 中该值一般应小于 0.1 像素。
2.5 标定流程与 Halcon 实现框架
在 Halcon 中,标定流程通常遵循以下步骤:
1. 描述相机内参初始值(create_cam_par_look_around 或 create_cam_par_area_scan)
2. 描述标定板(gen_caltab,生成 .descr 描述文件)
3. 采集 10~20 张不同位姿的标定板图像
4. 查找标定板并提取标记点(find_calib_object)
5. 收集所有视图的标记点坐标(get_calib_data)
6. 执行标定优化(calibrate_cameras)
7. 评估标定结果(get_calib_data,检查重投影误差)
8. 保存标定结果(write_cam_par)
其中,第 2 步 gen_caltab 生成的描述文件包含了标定板的物理尺寸、标记点布局等关键信息,是后续标定和测量的基础。这也是下一章将要深入讲解的内容。
2.6 案例:一个典型的 2D 测量项目标定
假设我们需要测量一个手机中框的长度,精度要求 ±0.02mm。相机分辨率为 2448×2048,视野范围为 50mm×40mm,则每个像素对应的物理尺寸约为 0.02mm。若不进行标定,仅凭像素当量换算,误差来源包括:
- 镜头畸变导致边缘位置偏移约 2~3 像素,即 0.04~0.06mm 误差。
- 主点偏移导致整体测量偏差。
- 相机安装倾斜导致透视误差。
通过 Halcon 标定后,畸变被校正,重投影误差控制在 0.05 像素以内,系统测量精度可稳定达到 ±0.015mm,满足工艺要求。该案例充分说明:标定不是可选项,而是高精度视觉系统的必选项。
2.7 常见误区与复盘
单张标定板图像无法充分约束所有内参和外参,尤其是畸变系数。Halcon 官方建议至少采集 10~15 张不同角度、不同位置的图像,且标定板应覆盖视野的各个区域,特别是边缘和角落。
恰恰相反,标定板应倾斜放置(与相机光轴成 15°~30° 夹角),这样能提供更多的几何约束,使标定结果更稳定。但倾斜角度不宜过大,否则标记点提取精度会下降。
内参在镜头焦距锁定、相机与镜头连接紧固的前提下是稳定的。但温度变化、振动、镜头松动都会导致内参漂移。建议定期(如每月)重新标定,或在环境变化较大时重新标定。
标定板本身的平面度误差会直接引入标定误差。陶瓷或玻璃基材的标定板平面度优于 0.005mm,而普通打印标定板平面度可能超过 0.1mm,无法用于高精度标定。
复盘一个实际项目:某锂电检测项目使用 Halcon 标定后,发现测量结果在视野边缘偏差较大。排查后发现,标定板图像仅拍摄了 6 张,且全部集中在视野中心区域,导致边缘畸变参数拟合不准确。重新采集 15 张覆盖全视野的图像后,边缘偏差从 0.08mm 降至 0.02mm。这个案例提醒我们:标定板图像的覆盖范围比数量更重要。