4. 相机标定原理
相机标定是机器视觉系统中连接二维图像坐标与三维空间坐标的桥梁,其精度直接决定了手眼标定、工件定位、尺寸测量等后续环节的可靠性。在工业机器人应用中,相机标定的核心任务是通过拍摄已知几何特征的标定板,求解相机的内参矩阵(焦距、主点、畸变系数)和外参矩阵(旋转、平移)。张正友标定法因其操作简便、精度高、无需昂贵设备,成为工业现场最主流的标定方法。本节将深入剖析张正友标定法的数学原理、标定板设计准则、角点检测与亚像素优化技术,并结合实际工程案例说明如何规避标定过程中的常见陷阱。
4.1 张正友标定法核心原理
张正友标定法(Zhang's Method)于2000年提出,其核心思想是利用平面标定板在不同姿态下的多幅图像,通过单应性矩阵(Homography)约束来线性求解相机内参,再通过最大似然估计进行非线性优化。该方法介于传统标定(需三维标定块)与自标定(无需标定物)之间,兼顾了精度与灵活性。
其数学基础可概括为:对于标定板平面上的三维点 M = [X, Y, 0, 1]T(假设Z=0),其图像投影点 m = [u, v, 1]T 满足单应性关系:
s·m = K·[r1 r2 t]·M
其中:
K = [fx γ cx]
[0 fy cy]
[0 0 1 ]
r1, r2 为旋转矩阵的前两列,t 为平移向量
s 为尺度因子
由于旋转矩阵的正交性(r1T·r2 = 0,||r1|| = ||r2|| = 1),每幅图像可以提供两个约束方程。当采集 n 幅图像时,可以建立 2n 个方程来求解内参矩阵的 5 个未知数(fx, fy, cx, cy, γ),因此理论上至少需要 3 幅图像。实际工程中,为保证数值稳定性和抗噪能力,通常采集 15-25 幅不同位姿的图像。
| 参数类型 | 符号 | 物理意义 | 典型值范围(工业相机) |
|---|---|---|---|
| 焦距(x方向) | fx | 以像素为单位的x方向焦距 | 500-5000 px |
| 焦距(y方向) | fy | 以像素为单位的y方向焦距 | 500-5000 px |
| 主点坐标 | cx, cy | 光轴与成像平面的交点 | 图像中心附近 ±50 px |
| 径向畸变 | k1, k2, k3 | 镜头径向形变系数 | -0.5 ~ +0.5 |
| 切向畸变 | p1, p2 | 镜头装配偏心导致的形变 | -0.05 ~ +0.05 |
在求解过程中,首先通过直接线性变换(DLT)计算每幅图像的单应性矩阵 H,然后利用 H 的约束条件建立关于内参的线性方程组,得到内参的闭式解。随后,将畸变系数纳入考虑,使用Levenberg-Marquardt算法对所有参数进行全局优化,最小化重投影误差:
误差 = Σ || m_ij - m_hat(K, k1, k2, p1, p2, R_i, t_i, M_j) ||²
其中 m_ij 为第 i 幅图像中第 j 个角点的实际检测坐标,m_hat 为通过当前参数投影得到的理论坐标。
4.2 棋盘格与圆点标定板设计
标定板的设计直接影响角点检测的稳定性和标定精度。目前工业界最常用的两种标定板为棋盘格(Checkerboard)和圆点阵列(Circle Grid),两者各有优劣,需根据应用场景选择。
4.2.1 棋盘格标定板
棋盘格由黑白相间的正方形格子组成,其角点(黑白格交点)具有极高的对比度和几何确定性。OpenCV 的 findChessboardCorners 函数对棋盘格有成熟的检测算法,能够自动识别内角点并排序。设计时需注意:
- 方格尺寸:根据视场大小和相机分辨率确定。一般原则是让每个方格在图像中占据 20-50 像素,例如 500 万像素相机(2448×2048)配合 30mm 方格,视场约 300mm×250mm。
- 内角点数量:推荐使用 10×7 或 9×6(内角点数),避免使用对称数量(如 8×8),否则检测时方向可能歧义。
- 边框留白:标定板四周应留有至少一个方格宽度的白色边框,便于检测算法识别边界。
- 基板材质:工业级推荐使用表面哑光处理的玻璃或陶瓷基板,避免反光;实验室环境可使用高精度打印并贴在平整铝板上。
4.2.2 圆点标定板
圆点阵列由规则排列的实心圆组成,其圆心作为特征点。圆点标定板在图像边缘畸变较大时,圆心提取精度优于棋盘格角点,因为圆心的亚像素定位不受透视变形影响(椭圆拟合后取中心)。但圆点标定板需要额外的方向标记(如一个大圆或缺失点)来建立唯一坐标系。
| 对比维度 | 棋盘格 | 圆点阵列 |
|---|---|---|
| 特征点类型 | 角点(梯度交点) | 圆心(椭圆拟合中心) |
| 检测算法成熟度 | 高(OpenCV内置) | 中(需自定义或Halcon支持) |
| 亚像素精度 | 0.05-0.1 px | 0.02-0.05 px(椭圆拟合) |
| 抗畸变能力 | 边缘角点易偏移 | 圆心对畸变不敏感 |
| 方向唯一性 | 需非对称设计 | 需额外标记 |
| 适用场景 | 通用标定、快速部署 | 高精度测量、畸变较大镜头 |
4.3 角点检测与亚像素优化
角点检测的精度是标定精度的基础。粗检测通常使用 Harris 角点或 OpenCV 的 cornerSubPix 函数,但工业级标定必须进行亚像素优化。亚像素优化的核心思想是利用角点邻域内的灰度梯度信息,通过迭代搜索使角点位置达到梯度正交条件的极值。
OpenCV 中亚像素角点优化的核心代码如下:
// 粗检测
std::vector<cv::Point2f> corners;
bool found = cv::findChessboardCorners(image, patternSize, corners);
// 亚像素优化
cv::TermCriteria criteria(cv::TermCriteria::EPS + cv::TermCriteria::COUNT, 30, 0.001);
cv::cornerSubPix(gray, corners, cv::Size(11, 11), cv::Size(-1, -1), criteria);
// 绘制并显示
cv::drawChessboardCorners(image, patternSize, corners, found);
亚像素优化的数学原理是:对于理想角点,其邻域内所有像素的梯度方向与该像素到角点的向量垂直。通过最小化以下误差函数来精化角点位置:
ε = Σ (∇I(q_i) · (p - q_i))²
其中:
p 为待求的亚像素角点位置
q_i 为角点邻域内的像素点
∇I(q_i) 为 q_i 处的图像梯度
迭代过程中,搜索窗口大小(如 11×11)和终止条件(如 0.001 像素变化)需要根据图像噪声水平调整。窗口过小无法覆盖足够梯度信息,窗口过大则可能引入邻近角点的干扰。
4.3.1 角点检测的常见问题与对策
- 光照不均匀:导致部分角点对比度不足,检测失败。对策:使用均匀光源,或对图像进行自适应直方图均衡化预处理。
- 运动模糊:标定板在采集时抖动导致边缘模糊。对策:使用三脚架或固定夹具,缩短曝光时间。
- 镜头畸变过大:边缘角点偏移严重,粗检测可能失败。对策:先使用畸变较小的中心区域进行初始标定,再逐步扩展。
- 反光与镜面反射:玻璃基板在强光下产生高光区域。对策:使用偏振片或调整光源角度。
4.4 实战案例:6轴机器人手眼标定中的相机标定优化
背景与约束:某汽车零部件生产线需要利用 6 轴机器人进行螺栓抓取,要求定位精度 ±0.5mm。系统采用眼在手外(Eye-to-Hand)构型,相机固定于机器人上方 800mm 处,视场 400mm×300mm,使用 500 万像素工业相机(2448×2048),镜头焦距 12mm,光圈 F8。
初始现象:首次标定后,重投影误差为 0.42px,机器人抓取测试中,视场边缘区域出现最大 1.8mm 的位置偏差,超出工艺要求。
分析判断过程:
- 检查标定板:发现使用的是 A4 纸打印的棋盘格,表面有轻微褶皱,平面度误差约 0.3mm。
- 检查图像采集:共采集 12 张图像,但标定板在视场中的姿态分布不均匀,大部分图像集中在视场中心区域,边缘区域覆盖不足。
- 检查角点检测:部分边缘图像的角点检测出现 1-2 个像素的偏移,亚像素优化后仍有 0.3px 左右的残差。
关键输入数据:
初始标定结果:
fx = 2456.32, fy = 2453.87, cx = 1224.15, cy = 1023.68
k1 = -0.1523, k2 = 0.0876, p1 = -0.0012, p2 = 0.0008
重投影误差:0.42 px
实际操作步骤:
- 更换标定板:定制 300mm×250mm 玻璃基板棋盘格,方格尺寸 25mm,平面度误差 < 0.01mm,表面镀铬哑光处理。
- 重新规划图像采集:采集 20 张图像,确保标定板在视场的九个区域(左上、中上、右上、左中、中心、右中、左下、中下、右下)均有覆盖,且倾斜角度覆盖 15°-40°。
- 优化角点检测参数:将亚像素搜索窗口从 11×11 调整为 15×15,终止条件精度从 0.001 提高到 0.0005。
- 剔除异常图像:通过重投影误差分析,删除 2 张因轻微运动模糊导致误差大于 0.5px 的图像。
结果对比:
| 指标 | 优化前 | 优化后 | 提升幅度 |
|---|---|---|---|
| 重投影误差 | 0.42 px | 0.08 px | 81% |
| fx 稳定性(多次标定标准差) | ±12.5 px | ±2.3 px | 81.6% |
| 视场边缘定位误差 | 1.8 mm | 0.35 mm | 80.6% |
| 抓取成功率(100次测试) | 87% | 99% | +12% |
风险与代价:定制玻璃标定板成本约 800-1500 元,采集时间从 10 分钟增加到 25 分钟,但换来了定位精度的显著提升。后续维护中需定期清洁标定板表面,防止油污影响角点检测。
复盘经验:标定精度 80% 取决于标定板质量和图像采集质量,而非算法本身。在工业现场,优先保证标定板的平面度、图像覆盖的均匀性以及光照的稳定性,比盲目调整算法参数更有效。
4.5 常见误区与总结复盘
- 误区一:认为标定板越大越好。实际上,标定板尺寸应占视场的 1/3 到 1/2,过大可能导致边缘角点超出畸变模型的有效范围。
- 误区二:忽略标定板的平面度。普通打印纸在受潮或受力后平面度可达 0.5mm 以上,对于 500mm 工作距离的相机,这会导致 0.2-0.5mm 的系统误差。
- 误区三:图像数量越多越好。当图像数量超过 30 张后,标定精度的提升趋于饱和,反而可能引入更多因标定板微小移动导致的噪声。
- 误区四:只关注重投影误差,忽略外参的物理合理性。例如,标定出的焦距应与镜头标称焦距和像素尺寸计算值接近,偏差超过 5% 应检查标定流程。
标定质量验证清单:
- 重投影误差是否小于 0.1px(优秀)或 0.3px(合格)?
- fx 与 fy 的比值是否接近 1.0(对于方形像素)?
- 主点 (cx, cy) 是否在图像中心附近 ±10% 范围内?
- 畸变系数 k1 是否在 -0.5 到 +0.5 范围内?
- 使用标定结果对已知尺寸物体进行测量,误差是否在允许范围内?
- 不同时间、不同光照条件下重复标定,内参标准差是否小于 1%?
总结而言,张正友标定法为工业机器人视觉系统提供了可靠的内参求解框架,但其精度上限取决于标定板制造精度、图像采集质量和角点检测的亚像素优化水平。工程师应建立"标定板是基准、图像采集是过程、角点精度是核心、重投影误差是验证"的完整质量意识,才能在实际项目中获得稳定可靠的标定结果。