坐标系基础:世界坐标系、相机坐标系、图像坐标系、像素坐标系
做外参标定,说白了就是搞清楚「相机在哪儿、朝哪儿看」。
但这个问题没法直接回答。你得先定义清楚:用什么坐标系来描述位置和方向。
我个人习惯把坐标系比作「语言的语法」。没有语法,你说的话别人听不懂。没有坐标系,你测出来的数据就是一堆没意义的数字。
这一章,我们就来把这四个坐标系彻底捋清楚。
1. 四个坐标系,一个都不能少
在计算机视觉和自动驾驶里,我们通常要打交道的是这四个坐标系:
- 世界坐标系 —— 真实世界的「绝对位置」
- 相机坐标系 —— 以相机为中心看世界
- 图像坐标系 —— 相机感光芯片上的物理位置
- 像素坐标系 —— 你最终看到的图像上的行列号
嗯,这里要注意:很多人把图像坐标系和像素坐标系搞混。我刚开始学的时候也踩过这个坑。它们俩其实就差一个「缩放+平移」的关系,后面会细说。
2. 世界坐标系(World Coordinate System)
世界坐标系是我们定义的一个固定参考系。它不随相机移动而改变。
在自动驾驶中,通常以车辆后轴中心为原点,或者以GPS的经纬度作为参考。在实验室里,我习惯用标定板的角点来定义世界坐标系。
关键点:世界坐标系是人为选定的。你选哪儿,哪儿就是原点。但一旦选定,整个场景里所有物体的位置都相对于它来描述。
举个例子:标定板上左上角的角点,我定义它为 (0, 0, 0)。那么右下角的角点就是 (棋盘格宽度, 棋盘格高度, 0)。
3. 相机坐标系(Camera Coordinate System)
相机坐标系的原点在相机的光心(也就是镜头的光学中心)。
它的Z轴指向相机的前方(也就是镜头朝向的方向),X轴向右,Y轴向下(注意,这和世界坐标系的习惯可能不一样)。
为什么要有相机坐标系?因为世界坐标系里的点,要经过一次旋转+平移才能变成相机坐标系下的坐标。这个旋转和平移,就是我们要标定的外参。
我的经验:我在做多相机标定时,经常遇到一个问题——不同相机的坐标系定义不一致。有的相机Z轴朝前,有的朝后。所以拿到相机参数后,第一件事就是确认它的坐标系定义。我曾经因为没确认这个,浪费了整整两天。
4. 图像坐标系(Image Coordinate System)
图像坐标系是物理单位(比如毫米)下的二维坐标系。它的原点通常在相机感光芯片的中心(也就是主点位置)。
X轴和Y轴分别平行于相机的X轴和Y轴。
从相机坐标系到图像坐标系,靠的是透视投影。说白了就是小孔成像原理。
公式很简单:
X_image = f * X_cam / Z_cam
Y_image = f * Y_cam / Z_cam
其中 f 是焦距。你想想看,一个三维空间里的点,投影到二维平面上,就是除个Z嘛。
5. 像素坐标系(Pixel Coordinate System)
像素坐标系就是我们最终看到的图像。它的原点在图像的左上角,u轴向右,v轴向下。单位是像素。
从图像坐标系到像素坐标系,就是一个缩放+平移:
u = X_image / dx + u0
v = Y_image / dy + v0
其中 dx、dy 是每个像素的物理尺寸(毫米/像素),u0、v0 是主点在像素坐标系下的位置。
注意:像素坐标系的原点在左上角,而图像坐标系的原点在中心。这个偏移很容易搞错。我见过有人把这两个坐标系混为一谈,结果标定出来的外参全是错的。
6. 它们之间的转换关系
好了,四个坐标系都介绍完了。现在我们把它们串起来。
一个世界坐标系下的点 P_w,要变成像素坐标系下的点 p_pixel,总共分三步:
- 世界 → 相机: P_c = R * P_w + T (外参)
- 相机 → 图像: 透视投影,除以Z
- 图像 → 像素: 缩放+平移(内参的一部分)
写成矩阵形式,就是大家熟悉的相机投影矩阵:
s * [u, v, 1]^T = K * [R | T] * [X_w, Y_w, Z_w, 1]^T
其中 K 是内参矩阵,[R | T] 是外参矩阵,s 是尺度因子。
核心理解:外参标定,就是求解 [R | T] 这个矩阵。内参标定,就是求解 K 矩阵。两者合在一起,就是完整的相机标定。
7. 一张图看懂整个流程
下面我用一张SVG图来展示这四个坐标系之间的转换关系。你一看就明白了。
8. 避坑指南
最后,分享几个我踩过的坑:
- 坐标系方向搞反:我曾经在标定一个环视系统时,把相机坐标系的Y轴方向搞反了。结果标定出来的外参,车辆看起来是倒着开的。排查了整整一天才发现。
- 单位不统一:世界坐标系用米,相机坐标系用毫米,图像坐标系用微米。这种混用会导致标定结果完全不可用。我的建议是:全程统一用毫米。
- 主点位置搞错:有些相机的图像坐标系原点在左上角,而不是中心。如果你用错了,内参矩阵里的u0、v0会差很多。
一个小技巧:在写代码之前,先在纸上画一遍坐标系转换的流程图。把每个坐标系的原点、方向、单位都标清楚。这一步花不了10分钟,但能帮你省下几小时的调试时间。
好了,这一章就到这里。坐标系是外参标定的地基,地基打不牢,后面全是空中楼阁。下一章我们开始讲具体的标定方法,到时候你会感谢自己把坐标系搞清楚了。