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 乘以这个矩阵,就直接得到相机坐标下的齐次点。

整个投影流程就变成了:

  1. 世界坐标 → 外参矩阵 → 相机坐标
  2. 相机坐标 → 内参矩阵 → 像素坐标

合在一起,就是咱们第一章讲的那个 3×4 投影矩阵 P = K[R|t]。

4.5 外参矩阵的几何意义

外参矩阵的几何意义,我总结为三点:

  • 定位:告诉你相机在世界中的位置和朝向
  • 变换:把世界坐标系的点,映射到相机自己的坐标系里
  • 关联:多相机系统中,外参矩阵把各个相机的视角统一到同一个世界坐标系下

做三维重建时,外参矩阵尤其重要。我记得有个项目,用 8 个相机环绕拍摄一个物体,每个相机的外参都要精确标定。只要有一个相机的旋转矩阵偏差 0.5 度,重建出来的模型就会出现裂缝。

4.6 知识结构图:外参矩阵全景

下面这张图,把外参矩阵的组成、变换流程和几何意义串在了一起。

相机外参矩阵知识结构图 外参矩阵知识结构图 外参矩阵 [R|t] 旋转矩阵 R (3×3) 绕 X 轴 (roll) 绕 Y 轴 (pitch) 绕 Z 轴 (yaw) 平移向量 t (3×1) X 方向偏移 Y 方向偏移 Z 方向偏移 几何意义:定位 + 变换 + 关联 核心公式 Pcam = R · Pworld + t 相机位置 = -RT · t

4.7 外参矩阵的标定方法

实际项目中,外参矩阵通常通过以下方式获得:

方法 适用场景 精度 操作复杂度
张正友标定法 单相机标定(同时获得内参和外参) 高 低
PnP 求解 已知内参,已知 3D-2D 对应点 中高 中
手眼标定 相机固定在机械臂上 高 高
多相机全局标定 多个相机共视同一标定物 中 高

我个人最常用的是张正友法配合PnP 精化。先用棋盘格标定出内参和每帧的外参初值,再用 PnP 做一次非线性优化,把重投影误差降到最低。

小技巧:标定外参时,标定板尽量放在视场的不同位置和角度。我一般会拍 15-20 张不同姿态的棋盘格图像,覆盖整个视场。只拍正对着的几张,外参的精度会差很多。

4.8 外参矩阵的典型应用

  • 双目立体视觉:两个相机的外参矩阵,决定了极线约束和视差计算
  • 视觉引导定位:机械臂抓取时,需要把相机坐标系下的目标位置,转换到机器人基坐标系
  • SLAM 与 AR:实时估计相机的外参,实现虚拟物体与真实场景的对齐
  • 多视角三维重建:每个视角的外参矩阵,决定了点云融合时的空间对齐

我记得做视觉引导项目时,外参标定花了整整两天。不是因为算法复杂,而是因为机械臂的坐标系定义和相机坐标系不一致,反复调试才对齐。所以,坐标系约定这件事,一定要在项目开始前就定死。