一、标定基础回顾:四相机系统坐标系定义与转换关系

做四相机联合标定,第一步不是调参数,而是把坐标系理清楚。我见过太多项目,标定精度上不去,最后发现是坐标系定义就乱了。说白了,坐标系就是整个系统的「通用语言」,语言不通,后面全是白搭。

1.1 四相机系统里有哪些坐标系?

一个典型的四相机系统,至少涉及四类坐标系。嗯,这里我按从「个体」到「整体」的顺序列出来:

坐标系 符号 描述 维度
像素坐标系 (u, v) 图像上的行列位置,原点在左上角 2D
图像物理坐标系 (x, y) 以光轴与像面交点为原点,单位mm 2D
相机坐标系 (Xc, Yc, Zc) 以光心为原点,Zc沿光轴向前 3D
世界坐标系 (Xw, Yw, Zw) 用户自定义的全局参考系 3D

你想想看,一个空间点从世界坐标系到最终像素,中间要经历三次变换。我在项目中遇到过有人直接把相机坐标系当世界坐标系用,结果四台相机拼出来的点云全是错位的。

1.2 核心转换关系:从世界到像素

这个链条必须刻在脑子里。我习惯把它拆成三步:

  1. 刚体变换:世界坐标 → 相机坐标(旋转R + 平移t)
  2. 透视投影:相机坐标 → 归一化成像平面(内参矩阵K)
  3. 畸变校正 + 数字化:归一化坐标 → 像素坐标(畸变模型 + 像素缩放)

用公式表达就是:

s * [u, v, 1]^T = K * [R | t] * [Xw, Yw, Zw, 1]^T

其中 s 是尺度因子。为什么会有 s?因为从3D到2D丢失了深度信息,投影过程天然带一个尺度模糊。这个细节在单目标定时不明显,但四相机联合标定时,尺度一致性是最大的坑之一。

关键点:四相机联合标定,本质就是求解每台相机的内参K_i,以及每台相机相对于同一个世界坐标系的[R_i | t_i]。

1.3 四相机系统的特殊之处

单目标定你可能会做,但四相机系统多了两个维度:

  • 多视角重叠:相邻相机之间必须有公共视场,否则无法建立约束
  • 全局一致性:四个相机的位姿必须统一到同一个世界坐标系下

我曾经踩过一个坑:四台相机分别标定,各自精度都很好,但拼在一起就是不对。后来发现,每台相机标定时用的棋盘格位置不同,世界坐标系原点根本没对齐。这就是典型的「局部最优,全局崩溃」。

避坑指南:我曾经在产线上调试四相机系统,发现标定结果反复跳动。查了两天才找到原因——标定板在四个相机视野中只出现了三个,缺失的那台相机没有约束,位姿直接飘了。记住:四相机联合标定,每张图像必须保证至少两台相机能同时看到标定板。

1.4 坐标系转换关系图

下面这张图把整个转换链路画清楚了。我建议你把它存下来,调试时对照着看:

四相机系统坐标系转换关系 四相机系统坐标系转换关系 世界坐标系 (Xw, Yw, Zw) R, t 相机坐标系 (Xc, Yc, Zc) K 归一化平面 (xn, yn) 畸变 像素 (u, v) 四相机联合标定核心: 相机1 [R1|t1] 内参 K1 相机2 [R2|t2] 内参 K2 相机3 [R3|t3] 内参 K3 相机4 [R4|t4] 内参 K4 💡 说明 所有相机共享同一个世界坐标系原点。 相邻相机必须有公共视场,才能通过标定板建立[R|t]约束。

1.5 联合标定的输入输出

搞清楚了坐标系,我们再来看联合标定到底要什么、给什么。我习惯用一张表说清楚:

项目 内容
输入 多组同步图像(每组包含4个相机同时拍摄的标定板图像)
待求参数 4组内参K_i + 4组外参[R_i | t_i](共4×6=24个外参自由度)
约束条件 同一标定板角点在多相机图像中的重投影误差最小化
输出 全局统一的相机参数文件(.yaml / .json)

个人经验:我习惯在标定前先做一次「预对齐」——用一张大棋盘格同时覆盖四个相机的视野,粗略估算相机之间的相对位姿。这样后续优化时,初值更准,收敛更快。别小看这一步,能省你半天调试时间。

1.6 一个小结

坐标系定义是四相机联合标定的地基。地基歪了,后面盖的楼再漂亮也得塌。我个人习惯在项目一开始就画好坐标系转换图,贴在工位上,每次调试前先看一眼。你想想看,如果连世界坐标系原点在哪都没统一,那标定结果怎么可能对?