4. 双目相机标定

双目视觉系统要输出可用的深度与尺度,前提是左右相机之间的几何关系被准确描述。标定的本质,是求解一组能把“像素坐标”映射到“物理空间坐标”的参数:内参描述单个相机自身的成像特性,外参描述左右相机之间的相对位姿,畸变系数描述镜头非线性误差。三者缺一不可,且必须联合使用。

标定不是“跑一次就完事”的步骤。温度变化、碰撞、镜头调焦、云台转动都会让外参漂移,工程上通常需要定期复标或在线自标定。

一、核心原理:三类参数各管什么

内参矩阵 K 包含焦距 fx、fy 与主点 cx、cy,它决定一个三维点投影到图像上的位置。畸变系数通常用径向畸变 k1、k2、k3 与切向畸变 p1、p2 表示,描述真实镜头相对理想针孔模型的偏差。外参由旋转矩阵 R 与平移向量 t 组成,描述右相机坐标系相对左相机坐标系的变换。

张正友标定法的核心思想是:用一块已知棋盘格平面,在多个不同姿态下拍摄图像,利用平面单应性约束求解内参初值,再通过最大似然估计优化全部参数。它不需要高精度三维标定物,只需一张打印的棋盘格,因此成为工业界最通用的标定方法。

双目相机标定参数关系与联合标定流程 左相机 K_L, dist_L 图像 I_L 右相机 K_R, dist_R 图像 I_R 外参 R, t 右相机相对左相机 基线 B = |t| 棋盘格标定板 多姿态拍摄 ≥ 15 张 角点检测 → 单应性 标定输出 K_L, K_R, dist R, t, 重投影误差 立体校正 极线对齐 视差 → 深度 重投影误差 RMS 通常要求 < 0.3 pixel,双目外参需联合优化

二、方法流程:从单目标定到双目联合标定

标准流程分为四步。第一步,制作高精度棋盘格,建议使用氧化铝或玻璃基板,避免纸张受潮变形。第二步,左右相机同步采集多组棋盘格图像,覆盖画面中心、四角、远近、倾斜等姿态。第三步,分别对左右相机做单目标定,得到各自内参与畸变系数。第四步,固定内参,利用左右图像中同一棋盘格的对应角点,求解外参 R、t,并做联合光束法平差。

OpenCV 提供了完整接口,典型命令如下:

# 单目标定
ret, K, dist, rvecs, tvecs = cv2.calibrateCamera(
    object_points, image_points, image_size, None, None)

# 双目标定
ret, K1, d1, K2, d2, R, T, E, F = cv2.stereoCalibrate(
    object_points, img_points1, img_points2,
    K1, d1, K2, d2, image_size,
    flags=cv2.CALIB_FIX_INTRINSIC)

# 立体校正
R1, R2, P1, P2, Q, _, _ = cv2.stereoRectify(
    K1, d1, K2, d2, image_size, R, T, alpha=0)

三、案例场景:工业双目模组标定实战

假设一套 1/2.3 英寸双目模组,基线 60 mm,镜头焦距 4 mm,分辨率 1280×720。采集 20 组棋盘格图像后,单目标定得到左相机 fx=620.3、fy=620.8、cx=642.1、cy=358.7,右相机 fx=619.8、fy=620.2、cx=638.5、cy=360.2。双目标定输出平移向量 T≈[-60.12, 0.08, 0.35] mm,旋转矩阵接近单位阵,说明机械装配良好。

此时重投影误差 RMS 为 0.21 pixel,满足要求。若 RMS 大于 0.5 pixel,应检查角点检测是否准确、标定板是否平整、左右图像是否同步。完成标定后,用 stereoRectify 做极线校正,再通过 SGBM 计算视差图,即可得到深度。

参数类别 符号 典型量级 作用
内参焦距fx, fy600~1500 pixel像素与物理尺寸换算
主点cx, cy约图像中心光轴与像面交点
径向畸变k1, k2, k3-0.3~0.3桶形/枕形校正
切向畸变p1, p21e-4 量级镜头与传感器不平行
外参旋转R接近单位阵左右相机姿态差
外参平移t基线长度决定深度尺度

四、误区与复盘

  • 误区一:只标一次就长期使用。 温度变化 10℃ 可能让基线漂移 0.05 mm,深度误差随之放大。建议每季度或每次大修后复标。
  • 误区二:标定板姿态单一。 所有图像都正对相机,会导致内参病态。应覆盖 ±30° 倾斜与画面边缘。
  • 误区三:忽略同步误差。 动态场景下左右曝光不同步,角点对应关系错位,外参会解算错误。需硬件触发或时间戳对齐。
  • 误区四:用低分辨率图像标定。 角点亚像素精度下降,建议使用原始分辨率,避免缩放。
复盘时优先看重投影误差分布图:若误差集中在画面边缘,说明畸变模型阶数不足;若左右误差差异大,说明某一侧镜头或传感器有问题。
标定完成后务必保存 K、dist、R、T、图像尺寸与标定时间,并在 SLAM 初始化时校验基线是否与设计值一致。基线错误会直接导致尺度恢复失败。

掌握内参、外参与畸变系数的联合标定,是双目 SLAM 尺度恢复的第一道工程门槛。只有把这一步做扎实,后续的极线搜索、视差计算与深度恢复才有可靠基础。