4. 相机标定原理:针孔相机模型、内参矩阵、畸变模型、标定板与标定流程
相机标定是3D视觉引导抓取的基石。它建立了从三维世界坐标到二维像素坐标的映射关系,并校正镜头畸变。本章深入剖析针孔相机模型、内参矩阵、畸变模型、标定板选择及完整标定流程,为后续手眼标定与位姿解算提供精确的相机参数。
4.1 针孔相机模型
针孔相机模型是理想化的线性投影模型,描述了空间点 P(X, Y, Z) 如何通过光心投影到成像平面上的点 p(x, y)。其核心是相似三角形原理:
- 光心 (O):相机坐标系原点,光线汇聚点。
- 主光轴:过光心且垂直于成像平面的直线。
- 焦距 (f):光心到成像平面的距离。
- 成像平面:感光元件所在平面,像点在此形成。
关键公式: 在理想针孔模型下,
x = f * (X / Z) y = f * (Y / Z)
其中 (X, Y, Z) 为相机坐标系下的三维坐标,(x, y) 为归一化成像平面坐标。
x = f * (X / Z) y = f * (Y / Z)
其中 (X, Y, Z) 为相机坐标系下的三维坐标,(x, y) 为归一化成像平面坐标。
4.2 内参矩阵
内参矩阵 K 将归一化成像平面坐标转换为像素坐标,包含焦距、主点偏移和像素尺寸信息。它是相机固有的属性,与相机位置无关。
| 参数 | 符号 | 含义 | 单位 |
|---|---|---|---|
| 焦距 x 方向 | fx | f / dx,dx 为像素宽度 | 像素 |
| 焦距 y 方向 | fy | f / dy,dy 为像素高度 | 像素 |
| 主点 x 坐标 | cx | 光轴与成像平面交点的像素列坐标 | 像素 |
| 主点 y 坐标 | cy | 光轴与成像平面交点的像素行坐标 | 像素 |
| 倾斜因子 | s | 像素坐标系倾斜系数(通常为0) | — |
内参矩阵 K 的标准形式:
K = [[f_x, s, c_x],
[ 0, f_y, c_y],
[ 0, 0, 1]]
对于大多数工业相机,s ≈ 0,矩阵简化为对角线形式。
4.3 畸变模型
实际镜头存在光学畸变,导致像素位置偏离理想针孔模型。主要分为径向畸变和切向畸变。
- 径向畸变:由镜头形状引起,光线在边缘弯曲更严重。包括桶形畸变(负)和枕形畸变(正)。用参数 k1, k2, k3 描述。
- 切向畸变:由镜头与成像平面不平行引起。用参数 p1, p2 描述。
畸变校正公式:
x_corrected = x * (1 + k1*r^2 + k2*r^4 + k3*r^6) + [2*p1*x*y + p2*(r^2 + 2*x^2)]
y_corrected = y * (1 + k1*r^2 + k2*r^4 + k3*r^6) + [p1*(r^2 + 2*y^2) + 2*p2*x*y]
其中 r2 = x2 + y2,(x, y) 为归一化坐标。
4.4 标定板与标定流程
标定板提供已知尺寸的精确特征点,是相机标定的物理基准。常用标定板类型:
| 类型 | 特征 | 优点 | 缺点 |
|---|---|---|---|
| 棋盘格 | 角点 | 检测算法成熟,精度高 | 需要完整可见 |
| 圆点阵列 | 圆心 | 亚像素精度高,抗遮挡 | 需要椭圆拟合 |
| ChArUco | 角点+ID | 支持部分遮挡,可多板组合 | 算法稍复杂 |
4.5 完整标定流程
标准相机标定流程分为以下步骤,通常使用OpenCV或Halcon实现:
- 准备标定板:打印高精度棋盘格或圆点阵列,测量方格尺寸(如30mm×30mm)。
- 采集图像:从不同角度、距离、姿态拍摄15~30张标定板图像。确保标定板覆盖视场各个区域。
- 特征点提取:使用角点检测或圆心检测算法,提取每张图像中的特征点像素坐标。
- 求解内参和畸变:基于针孔模型和畸变模型,使用最小二乘法优化内参矩阵K和畸变系数(k1, k2, k3, p1, p2)。
- 重投影误差评估:计算所有特征点的重投影误差,通常要求平均误差 < 0.5像素。
- 保存标定结果:将内参矩阵和畸变系数保存为配置文件,供后续抓取位姿计算使用。
标定避坑指南:
- 标定板必须平整,避免弯曲或褶皱。
- 图像数量不宜过少(<10张),否则参数不稳定。
- 采集时标定板倾斜角度不宜过大(<45°),否则特征点提取失败。
- 定期重新标定,尤其是相机受到震动或温度变化后。
- 标定板必须平整,避免弯曲或褶皱。
- 图像数量不宜过少(<10张),否则参数不稳定。
- 采集时标定板倾斜角度不宜过大(<45°),否则特征点提取失败。
- 定期重新标定,尤其是相机受到震动或温度变化后。
4.6 标定结果验证
标定完成后,必须验证参数的正确性。常用验证方法:
- 重投影误差:将三维点重投影到图像,计算与检测点的像素距离。平均误差应 < 0.3像素。
- 畸变校正效果:对一张包含直线的图像进行畸变校正,观察直线是否恢复平直。
- 三维重建测试:使用标定参数对已知尺寸的物体进行三维测量,验证精度。
标定结果示例(OpenCV输出):
内参矩阵 K:
[[532.15, 0. , 320.78],
[ 0. , 531.89, 240.45],
[ 0. , 0. , 1. ]]
畸变系数:
[k1, k2, p1, p2, k3] = [-0.283, 0.082, -0.001, 0.002, -0.015]
重投影误差: 0.12 像素
精确的相机标定是3D视觉引导抓取的基础。只有获得准确的内参和畸变参数,后续的手眼标定和位姿解算才能达到亚毫米级精度,确保机器人抓取的成功率。