4. 相机标定原理

相机标定是3D视觉定位的基础,其核心目标是确定相机的内参矩阵(焦距、主点、畸变系数)和外参矩阵(旋转、平移)。张正友标定法因仅需拍摄多张不同姿态的棋盘格图像即可完成高精度标定,成为工业界最广泛使用的平面标定方法。

4.1 棋盘格角点检测

棋盘格角点检测是标定的第一步,其精度直接影响后续参数求解。检测流程如下:

  1. 图像预处理:将输入图像转为灰度图,使用自适应直方图均衡化增强对比度。
  2. 粗定位:通过Harris角点检测或SUSAN算子提取候选角点。
  3. 亚像素精化:在粗定位周围使用梯度投影法或Forstner算子,将角点精度提升至0.1像素级别。
  4. 棋盘格拓扑排序:利用棋盘格黑白交替的几何约束,对角点进行行列排序,剔除误检点。
工程经验: 棋盘格内角点数量建议为 (7×10) 或 (8×11),避免使用正方形棋盘(如4×4),否则无法唯一确定方向。拍摄时棋盘格应占图像面积的 1/4 ~ 1/2,且至少采集 15~20 张不同姿态的图像。

4.2 单应性矩阵求解

张正友标定法假设棋盘格平面位于世界坐标系 Z=0 平面。设棋盘格上一点在世界坐标系下的齐次坐标为 M = [X, Y, 0, 1]^T,对应图像像素坐标为 m = [u, v, 1]^T,则投影关系为:

s * m = K * [r1  r2  r3  t] * M
      = K * [r1  r2  t] * [X, Y, 1]^T

其中 K 为内参矩阵,r1、r2 为旋转矩阵的前两列,t 为平移向量。定义单应性矩阵 H = K * [r1 r2 t],则每张图像对应一个 3×3 的单应性矩阵。求解 H 的步骤如下:

步骤 操作 数学表达
1 构建线性方程组 将 H 展开为 h = [h11, h12, h13, h21, h22, h23, h31, h32, h33]^T,利用每对匹配点 (X,Y) ↔ (u,v) 建立两个方程
2 归一化处理 对图像坐标和世界坐标分别进行平移缩放归一化,提高数值稳定性
3 SVD分解 对系数矩阵 A (2n×9) 进行奇异值分解,取最小奇异值对应的右奇异向量作为 h 的初始解
4 去归一化 将归一化后的 H 还原为原始坐标下的单应性矩阵
关键约束: 单应性矩阵 H 有 8 个自由度(尺度因子 s 可归一化),因此至少需要 4 对不共线的匹配点才能求解。实际使用中通常取棋盘格所有内角点(如 7×10=70 个点)进行最小二乘优化。

4.3 内参外参优化

利用多张图像的单应性矩阵,可以构建关于内参的线性约束。核心推导基于旋转矩阵的正交性:

  • 约束1:r1^T · r2 = 0 → h1^T · K^{-T} · K^{-1} · h2 = 0
  • 约束2:||r1|| = ||r2|| = 1 → h1^T · K^{-T} · K^{-1} · h1 = h2^T · K^{-T} · K^{-1} · h2

定义对称矩阵 B = K^{-T} · K^{-1},则 B 为 3×3 对称矩阵,包含 6 个未知量。每张图像提供两个约束方程,因此至少需要 3 张图像(6 个方程)才能求解 B。求解出 B 后,通过 Cholesky 分解即可得到内参矩阵 K。

得到内参后,每张图像的外参可由下式直接计算:

r1 = λ * K^{-1} * h1
r2 = λ * K^{-1} * h2
r3 = r1 × r2
t  = λ * K^{-1} * h3
其中 λ = 1 / ||K^{-1} * h1||

最后,使用非线性最小二乘优化(如Levenberg-Marquardt算法)对所有参数进行全局优化,目标函数为所有角点的重投影误差平方和:

min Σ || m_ij - m_hat(K, R_i, t_i, M_j) ||^2

其中 m_ij 为第 i 张图像中第 j 个角点的实际像素坐标,m_hat 为根据当前参数计算的重投影坐标。

常见陷阱: 优化时需同时考虑镜头畸变(径向畸变 k1, k2 和切向畸变 p1, p2)。张正友标定法通常先忽略畸变求解线性初值,再加入畸变参数进行联合优化,否则容易陷入局部极小值。
张正友标定法完整流程 采集多张棋盘格图像 棋盘格角点检测 求解单应性矩阵 H 线性求解内参 K 计算外参 R, t 非线性全局优化 输出标定参数 关键参数说明 • 内参 K: fx, fy, cx, cy • 畸变: k1, k2, p1, p2 • 外参: 每张图像 R_i, t_i • 重投影误差 < 0.5 像素

4.4 标定精度评估与验证

标定完成后,必须进行精度验证。常用评估指标包括:

指标 计算公式 合格标准
平均重投影误差 Σ||m_ij - m_hat|| / N < 0.5 像素
最大重投影误差 max(||m_ij - m_hat||) < 1.0 像素
内参重复性 多次标定结果的 fx, fy 标准差 < 0.5%
畸变系数稳定性 k1 的变异系数 < 10%
验证技巧: 使用标定后的参数对棋盘格进行三维重建,测量棋盘格相邻角点之间的距离,与已知物理尺寸(如 30mm)对比。若测量误差小于 0.1mm,说明标定质量良好。此外,建议保留 3~5 张图像不参与标定,专门用于验证。
重投影误差分布示意图 误差 (像素) 频数 -0.6 -0.4 -0.2 0.0 0.2 0.4 0.6 误差分布特征 • 中心峰值在 0 附近 • 呈近似正态分布 • 标准差 < 0.3 像素

4.5 工程实践要点

  • 图像数量与姿态:至少 15 张,棋盘格应覆盖图像四个角落和中心区域,且绕 X/Y/Z 轴均有 15°~45° 的倾斜。
  • 光照条件:避免反光和阴影遮挡角点,建议使用漫反射光源。
  • 棋盘格质量:使用陶瓷或玻璃基底的棋盘格,避免纸张变形;角点打印精度应优于 0.01mm。
  • 标定板固定:标定板应贴附在平整刚性平面上,拍摄时相机或标定板移动,但两者不能同时移动。
  • 畸变模型选择:对于普通镜头,使用 2 个径向畸变参数 (k1, k2) 和 2 个切向畸变参数 (p1, p2) 即可;鱼眼镜头需使用专门模型。
总结: 张正友标定法通过“角点检测 → 单应性矩阵求解 → 内参线性求解 → 外参计算 → 非线性全局优化”五步流程,实现了高精度、高鲁棒性的相机标定。该方法仅需平面棋盘格,操作简便,是 3D 视觉定位系统中不可或缺的基础环节。