1. 外参的本质与参考坐标系选择
在相机标定领域,外参(extrinsics)的旋转矩阵R和平移向量t始终描述的是相机坐标系相对于某个参考坐标系的位姿关系。这个看似简单的概念在实际工程应用中却经常引发困惑,主要是因为参考坐标系的选择具有多样性。
1.1 外参的数学本质
从数学角度看,外参表示的是一个刚体变换,可以用4×4的齐次矩阵表示:
[ T = \begin{bmatrix}
R & t \
0 & 1
\end{bmatrix} ]
其中R是3×3的旋转矩阵(满足R^T R = I,det(R)=1),t是3×1的平移向量。这个变换矩阵可以将参考坐标系中的点Pref转换到相机坐标系Pc:
[ P_c = R \cdot P_{ref} + t ]
1.2 参考坐标系的三类常见选择
1.2.1 世界坐标系(World Frame)
在SLAM、三维重建等应用中,通常会建立一个全局的世界坐标系。此时外参表示的是世界坐标系到相机坐标系的变换:
[ P_c = R_{wc} \cdot P_w + t_{wc} ]
这种表示方式的特点是:
- 世界坐标系通常是固定的
- 相机移动时,R_wc和t_wc会随之改变
- 适用于需要将多个相机或传感器数据统一到同一坐标系的情况
1.2.2 标定板坐标系(Calibration Board Frame)
使用棋盘格或圆点阵列标定时,常以标定板自身坐标系为参考:
[ P_c = R_{bc} \cdot P_b + t_{bc} ]
其特点是:
- 每张标定图像对应一组不同的R_bc和t_bc
- 标定板坐标系通常定义在标定板的某个角点或中心
- 适用于单相机内参标定和多相机相对位姿标定
1.2.3 其他传感器坐标系(Sensor Frame)
在多传感器系统中,常以一个主传感器(如左相机、IMU等)的坐标系为参考:
[ P_r = R_{lr} \cdot P_l + t_{lr} ]
这种表示的特点是:
- 描述的是传感器之间的相对位姿关系
- 在传感器刚性连接的情况下,R和t是固定的
- 适用于双目视觉、相机-IMU标定等应用
关键提示:同一个物理系统可以采用不同的参考坐标系,选择哪种取决于应用需求。重要的是在整个系统中保持一致的参考系定义。
2. 外参的固定性与应用场景
2.1 外参作为固定值的情况
当相机与参考坐标系之间保持刚性连接时,外参成为固定值。这种情况在实际工程中非常常见:
2.1.1 车载相机系统
在自动驾驶领域,相机通常固定在车体上,此时相机到车体坐标系的外参是固定的:
[ P_c = R_{bc} \cdot P_b + t_{bc} ]
安装后需要通过标定确定这组参数,之后只要相机安装位置不变,参数就保持不变。
2.1.2 双目视觉系统
左右相机固定在同一支架上时,它们的相对位姿固定:
[ P_r = R_{lr} \cdot P_l + t_{lr} ]
其中基线长度(baseline)|t_{lr}|是重要的系统参数,直接影响深度测量精度。
2.1.3 工业机器人视觉系统
安装在机械臂末端的相机,其相对于工具坐标系的外参通常是固定的:
[ P_c = R_{tc} \cdot P_t + t_{tc} ]
这种固定关系使得我们可以通过机器人运动学推导相机在世界坐标系中的位姿。
2.2 外参不固定的情况
当相机与参考坐标系之间存在相对运动时,外参就不再是固定值:
2.2.1 标定过程中的多视角采集
使用棋盘格标定时,每移动一次标定板就得到一组新的外参:
[ P_c = R_i \cdot P_b + t_i ]
这些变化的外参正是标定算法求解相机内参的基础。
2.2.2 手持移动设备
手机或手持相机相对于世界坐标系的位姿随时间变化:
[ P_c(t) = R(t) \cdot P_w + t(t) ]
这种时变外参正是视觉SLAM等实时定位技术需要估计的对象。
2.2.3 云台相机系统
主动控制的PTZ相机,其外参相对于基座坐标系会随云台转动而变化:
[ P_c(\theta,\phi) = R(\theta,\phi) \cdot P_b + t(\theta,\phi) ]
这种情况下需要建立外参与云台角度的函数关系。
工程经验:判断外参是否固定,关键看相机与参考坐标系之间是否存在刚性连接。任何非刚性连接都会导致外参变化。
3. 内参与外参的稳定性对比
3.1 内参的相对稳定性
内参描述的是相机内部的光学几何特性,包括:
- 焦距(fx, fy)
- 主点(cx, cy)
- 畸变系数(k1, k2, p1, p2, k3)
这些参数在以下条件下可视为稳定:
- 使用定焦镜头且对焦锁定
- 工作温度变化不大
- 没有机械冲击或振动
- 图像分辨率保持不变
3.2 内参可能变化的情况
实际工程中需要注意内参可能变化的场景:
3.2.1 变焦镜头系统
焦距随变焦位置变化:
[ f = f(z) ]
通常需要为不同变焦位置建立内参查找表。
3.2.2 自动对焦系统
某些镜头在对焦过程中会轻微改变等效焦距,导致内参变化。
3.2.3 温度敏感场景
高精度工业相机在温度变化较大时,镜头可能发生热胀冷缩,影响内参。
3.2.4 分辨率调整
裁剪或缩放图像会直接影响像素坐标系,导致内参变化:
[ f_{new} = f_{orig} \cdot scale ]
[ c_{new} = c_{orig} \cdot scale ]
3.3 内外参稳定性的工程处理
在实际系统中,建议采取以下策略:
-
对于固定安装的工业相机:
- 标定一次内参后长期使用
- 定期检查(如每月一次)
- 环境变化大时重新标定
-
对于变焦相机:
- 建立不同变焦位置的内参查找表
- 或者实现实时在线标定
-
对于外参:
- 刚性连接的保持定期验证
- 非刚性连接的实现实时估计
实测经验:在振动环境中,即使用螺丝固定的相机也可能因长期振动导致外参微变。高精度应用建议使用防松螺丝并定期检查。
4. 典型应用场景中的坐标系选择
4.1 单相机标定(棋盘格标定)
参考坐标系选择标定板坐标系:
[ P_c = R_{bc} \cdot P_b + t_{bc} ]
特点:
- 每幅图像对应不同的R_bc和t_bc
- 标定板坐标系通常定义在第一个角点
- 所有图像的外参共同约束相机内参
4.2 双目相机标定
参考坐标系选择左相机坐标系:
[ P_r = R_{lr} \cdot P_l + t_{lr} ]
特点:
- R_lr和t_lr是固定值
- 基线长度|t_lr|是关键参数
- 需要同时标定两个相机的内参
4.3 相机-IMU标定
参考坐标系通常选择IMU坐标系:
[ P_c = R_{ic} \cdot P_i + t_{ic} ]
特点:
- R_ic和t_ic需要精确标定
- 时间同步误差也会影响标定精度
- 标定结果对视觉惯性里程计至关重要
4.4 多相机系统标定
通常选择一个主相机作为参考:
[ P_{ci} = R_{1i} \cdot P_{c1} + t_{1i} ]
特点:
- 需要全局优化所有相机的外参
- 重叠视野可提高标定精度
- 可能需要辅助标定物
5. 外参标定的实用技巧
5.1 标定板放置建议
- 覆盖相机视野的不同区域
- 包含各种倾斜角度
- 确保标定板在每幅图像中清晰可见
- 对于广角镜头,需要更多边缘区域的图像
5.2 标定质量检查
-
重投影误差:
[ \epsilon = \frac{1}{N} \sum |p_{observed} - p_{projected}| ]
通常应小于0.5像素 -
参数置信区间:
检查标定工具输出的参数不确定度 -
交叉验证:
用部分图像标定,在剩余图像上测试
5.3 外参验证方法
-
固定场景测试:
- 拍摄已知几何形状的物体
- 检查三维重建精度
-
运动一致性测试:
- 移动相机或物体
- 检查位姿变化是否符合预期
-
多传感器一致性:
- 与其他传感器数据对比
- 如激光雷达、IMU等
5.4 常见问题排查
-
标定结果不稳定:
- 检查标定板检测是否准确
- 增加标定图像数量
- 尝试不同的标定板姿态
-
重投影误差大:
- 检查镜头是否对焦准确
- 确认标定板尺寸输入正确
- 尝试不同的畸变模型
-
外参明显错误:
- 检查坐标系定义是否一致
- 验证标定板坐标系方向
- 确认旋转矩阵满足det(R)=1
6. 工程实践中的注意事项
6.1 坐标系定义一致性
-
明确每个坐标系的:
- 原点位置
- 各轴方向
- 单位制(通常为米)
-
常用约定:
- 相机坐标系:z轴向前,y轴向下,x轴向右
- 机器人基座坐标系:z轴向上
- 车辆坐标系:x轴向前,y轴向左,z轴向上
6.2 外参的存储与使用
-
存储格式:
- 旋转矩阵:3×3数组
- 旋转向量:3×1 Rodrigues向量
- 四元数:4×1单位四元数
- 欧拉角:注意旋转顺序
-
转换关系:
- 各种表示法之间可以相互转换
- 但要注意转换时的约定一致性
6.3 时间同步考虑
对于多传感器系统:
- 硬件同步:使用同步信号线
- 软件同步:时间戳对齐
- 运动补偿:考虑传感器之间的延迟
6.4 长期稳定性维护
-
定期检查:
- 设计验证标定程序
- 建立外参变化监测机制
-
环境适应:
- 温度补偿模型
- 振动抑制措施
-
机械设计:
- 使用稳固的安装结构
- 考虑热膨胀因素
在实际工程中,我经常遇到因为坐标系定义不一致导致的问题。一个实用的建议是:在项目开始时就用文档明确记录每个坐标系的定义,并在代码中用注释清晰说明每个变换的方向。这样可以避免后续很多混淆和错误。