4. 相机外参矩阵
聊完了内参,咱们得把目光从相机内部挪到外部世界了。外参矩阵,说白了就是回答一个问题:相机在哪儿?它正朝着哪个方向看?
我刚开始接触标定时,总觉得内参才是核心,外参不就是个位置嘛。后来做多目视觉拼接项目,两台相机只差了几厘米,但外参没标准,拼接出来的图像直接错位。嗯,从那以后我再也不敢小看外参了。
4.1 刚体变换:世界坐标系到相机坐标系
想象一下,你手里拿着一个相机,站在一个房间里。房间里有个物体,它的位置是用世界坐标系描述的。但相机看到的,是它自己相机坐标系下的坐标。
从世界坐标到相机坐标,这个过程就是刚体变换。刚体变换意味着物体本身不会变形、不会缩放,只是被整体挪了个位置、转了个方向。说白了,就是旋转 + 平移。
核心公式:
Pcam = R · Pworld + t
其中:
- Pworld:世界坐标系下的3D点 (X, Y, Z)
- R:3×3 旋转矩阵
- t:3×1 平移向量
- Pcam:相机坐标系下的3D点 (X', Y', Z')
这个公式,就是外参矩阵的数学灵魂。
4.2 旋转矩阵 R:三个轴的转动
旋转矩阵 R 描述了世界坐标系如何旋转,才能与相机坐标系的方向对齐。它是一个 3×3 的正交矩阵,行列式为 +1。
R 矩阵有 9 个元素,但自由度只有 3。为什么?因为旋转可以分解为绕 X、Y、Z 三个轴的转动,每个轴一个角度(欧拉角)。
| 旋转轴 | 角度符号 | 物理含义 |
|---|---|---|
| 绕 X 轴 | α (roll) | 相机左右倾斜(像歪头) |
| 绕 Y 轴 | β (pitch) | 相机上下俯仰(像点头) |
| 绕 Z 轴 | γ (yaw) | 相机左右摇头(像摇头) |
我个人习惯用罗德里格斯公式把旋转向量转成矩阵,这样在优化时更方便。你想想看,9 个参数去优化,约束条件多麻烦;用 3 个参数,省心多了。
避坑指南:我曾经在标定一个机械臂上的相机时,旋转矩阵的符号搞反了。结果机械臂抓取时,偏差了 5 厘米。后来发现是旋转方向定义不一致——有的库用右手系,有的用左手系。一定要确认你的坐标系约定!
4.3 平移向量 t:相机的位置
平移向量 t 描述了世界坐标系原点,在相机坐标系下的位置。或者说,它表示了相机光心在世界坐标系中的位置(取负号后)。
t 是一个 3×1 的向量:
t = [tx, ty, tz]^T
每个分量代表相机在世界坐标系中,沿 X、Y、Z 方向的偏移量。单位是毫米(或米),取决于你的标定板尺寸单位。
这里有个容易混淆的点:公式 Pcam = R·Pworld + t 中的 t,是世界原点在相机坐标系下的坐标,而不是相机在世界坐标系下的坐标。两者相差一个负号和旋转。
注意:如果你从标定结果中直接拿 t 向量当作相机位置,那就错了。正确的做法是:
相机位置 = -RT · t
这个坑我踩过,标定完一看 t 的值,怎么相机跑到地底下去了?后来才反应过来,是坐标系转换没做对。
4.4 外参矩阵的齐次形式
为了方便计算,我们通常把旋转和平移合并成一个 4×4 的外参矩阵:
| R t |
| 0 1 |
这样,世界坐标点 Pworld = (X, Y, Z, 1)T 乘以这个矩阵,就直接得到相机坐标下的齐次点。
整个投影流程就变成了:
- 世界坐标 → 外参矩阵 → 相机坐标
- 相机坐标 → 内参矩阵 → 像素坐标
合在一起,就是咱们第一章讲的那个 3×4 投影矩阵 P = K[R|t]。
4.5 外参矩阵的几何意义
外参矩阵的几何意义,我总结为三点:
- 定位:告诉你相机在世界中的位置和朝向
- 变换:把世界坐标系的点,映射到相机自己的坐标系里
- 关联:多相机系统中,外参矩阵把各个相机的视角统一到同一个世界坐标系下
做三维重建时,外参矩阵尤其重要。我记得有个项目,用 8 个相机环绕拍摄一个物体,每个相机的外参都要精确标定。只要有一个相机的旋转矩阵偏差 0.5 度,重建出来的模型就会出现裂缝。
4.6 知识结构图:外参矩阵全景
下面这张图,把外参矩阵的组成、变换流程和几何意义串在了一起。
4.7 外参矩阵的标定方法
实际项目中,外参矩阵通常通过以下方式获得:
| 方法 | 适用场景 | 精度 | 操作复杂度 |
|---|---|---|---|
| 张正友标定法 | 单相机标定(同时获得内参和外参) | 高 | 低 |
| PnP 求解 | 已知内参,已知 3D-2D 对应点 | 中高 | 中 |
| 手眼标定 | 相机固定在机械臂上 | 高 | 高 |
| 多相机全局标定 | 多个相机共视同一标定物 | 中 | 高 |
我个人最常用的是张正友法配合PnP 精化。先用棋盘格标定出内参和每帧的外参初值,再用 PnP 做一次非线性优化,把重投影误差降到最低。
小技巧:标定外参时,标定板尽量放在视场的不同位置和角度。我一般会拍 15-20 张不同姿态的棋盘格图像,覆盖整个视场。只拍正对着的几张,外参的精度会差很多。
4.8 外参矩阵的典型应用
- 双目立体视觉:两个相机的外参矩阵,决定了极线约束和视差计算
- 视觉引导定位:机械臂抓取时,需要把相机坐标系下的目标位置,转换到机器人基坐标系
- SLAM 与 AR:实时估计相机的外参,实现虚拟物体与真实场景的对齐
- 多视角三维重建:每个视角的外参矩阵,决定了点云融合时的空间对齐
我记得做视觉引导项目时,外参标定花了整整两天。不是因为算法复杂,而是因为机械臂的坐标系定义和相机坐标系不一致,反复调试才对齐。所以,坐标系约定这件事,一定要在项目开始前就定死。