坐标系基础:世界坐标系、相机坐标系、图像坐标系、像素坐标系及其转换关系
做外参标定,说白了就是搞清楚相机在空间中的位置和朝向。但在这之前,你得先弄明白四个坐标系——它们就像四把尺子,量出来的东西不一样,但彼此之间可以换算。
我刚开始接触视觉SLAM时,就被这四个坐标系绕晕过。后来踩了几个坑,才真正理解它们之间的关系。今天咱们就把这事彻底讲清楚。
1. 世界坐标系:我们生活的三维空间
世界坐标系,就是你在现实世界中定义的一个固定参考系。比如你站在房间中央,以墙角为原点,X轴指向东,Y轴指向北,Z轴指向天——这就是一个世界坐标系。
它的作用很简单:描述物体在真实空间中的位置。一个路标点、一辆车、一个行人,它们在世界坐标系下的坐标是唯一的、不变的(除非物体移动)。
世界坐标系通常用 (X_w, Y_w, Z_w) 表示,单位是米(或毫米、厘米,取决于你的应用)。
3. 相机坐标系:以相机为中心看世界
相机坐标系的原点在相机的光心(也就是镜头中心),Z轴指向相机的前方(沿着光轴方向),X轴向右,Y轴向下(符合图像的行列方向)。
你想想看,相机看到的物体,其实都是在相机坐标系下的坐标。世界坐标系下的一个点,经过旋转和平移,就变成了相机坐标系下的点。
这个转换关系就是外参的核心:
| X_c | | R11 R12 R13 tx | | X_w |
| Y_c | = | R21 R22 R23 ty | * | Y_w |
| Z_c | | R31 R32 R33 tz | | Z_w |
| 1 | | 0 0 0 1 | | 1 |
其中 R 是旋转矩阵,t 是平移向量。这6个参数(3个旋转角 + 3个平移量)就是我们要标定的外参。
3. 图像坐标系:从三维到二维的投影
相机坐标系下的三维点,通过针孔相机模型投影到成像平面上,就变成了图像坐标系下的二维点。
图像坐标系的原点在光轴与成像平面的交点(也就是主点),通常用 (x, y) 表示,单位是毫米。
投影公式很简单:
x = f * X_c / Z_c
y = f * Y_c / Z_c
其中 f 是焦距。这个公式就是传说中的「小孔成像」模型。
嗯,这里要注意:实际相机的主点不一定在图像正中心,因为镜头安装有偏差。这就是内参中 cx、cy 的由来。
4. 像素坐标系:计算机看到的数字世界
图像坐标系是连续的、以毫米为单位的。但计算机只能处理离散的像素。所以我们需要把图像坐标系离散化,变成像素坐标系。
像素坐标系的原点在图像的左上角,u轴向右,v轴向下。单位是像素(pixel)。
转换关系:
u = x / dx + cx
v = y / dy + cy
其中 dx、dy 是每个像素在x、y方向上的物理尺寸(毫米/像素),cx、cy 是主点的像素坐标。
把上面两步合并,就得到了从相机坐标系到像素坐标系的完整投影公式:
u = fx * X_c / Z_c + cx
v = fy * Y_c / Z_c + cy
其中 fx = f / dx,fy = f / dy,这就是内参矩阵中的焦距参数。
5. 四个坐标系的完整转换链路
现在我们把它们串起来:
- 世界坐标系 → 相机坐标系:通过外参(R, t)
- 相机坐标系 → 图像坐标系:通过针孔投影(除以Z)
- 图像坐标系 → 像素坐标系:通过内参(fx, fy, cx, cy)
用矩阵形式表示,一步到位:
Z_c * | u | = | fx 0 cx 0 | | R11 R12 R13 tx | | X_w |
| v | | 0 fy cy 0 | * | R21 R22 R23 ty | * | Y_w |
| 1 | | 0 0 1 0 | | R31 R32 R33 tz | | Z_w |
| 0 0 0 1 | | 1 |
这个公式,就是整个视觉几何的基石。你做的所有标定、三维重建、SLAM,本质上都是在解这个公式中的未知参数。
- 外参描述的是「世界坐标系」到「相机坐标系」的刚体变换
- 内参描述的是「相机坐标系」到「像素坐标系」的投影变换
- 标定的本质:已知若干组3D-2D对应点,求解内外参
6. 一张图看懂四个坐标系的关系
下面这张SVG图,把四个坐标系和它们之间的转换关系画得清清楚楚。我建议你把它保存下来,每次做标定前看一眼。
7. 实战中的注意事项
搞清楚了理论,咱们聊聊实际中容易出问题的地方:
- 坐标系方向要统一:OpenCV、ROS、Pytorch3D用的坐标系方向都不一样。我习惯用OpenCV的约定(Z向前,Y向下),但如果你在ROS里做,记得检查一下。
- 单位要一致:世界坐标用米,焦距用毫米,像素尺寸用微米——混在一起算出来的结果全是错的。我建议全部统一成米。
- 主点不是图像中心:很多初学者以为cx、cy就是图像宽高的一半。实际上由于镜头安装误差,主点通常会偏移几个像素。标定时一定要把它作为未知数来优化。
- 畸变模型别忘了:针孔模型是理想情况。实际相机有径向畸变和切向畸变,标定时需要同时估计畸变参数。否则投影误差会很大。
好了,坐标系基础就讲到这里。这四个坐标系就像四把尺子,搞清楚了它们之间的换算关系,外参标定就成功了一半。下一节咱们会深入讨论旋转矩阵的表示方法——四元数、欧拉角、旋转向量,它们各有优劣,实际项目中怎么选?到时候我会分享我的经验。
可可精品资料库