坐标系基础:世界坐标系、相机坐标系、图像坐标系、像素坐标系定义与转换关系

做传感器融合,第一关就是坐标系。我见过不少新手,算法推得头头是道,结果一跑数据,点云和图像对不上——十有八九是坐标系搞混了。说白了,坐标系就是给空间里的每个点一个唯一的“身份证号”。

今天咱们把四个核心坐标系掰开揉碎讲清楚。你想想看,一个三维点从真实世界落到你屏幕上的像素,中间经历了什么?嗯,就是下面这张图说的故事。

核心逻辑一句话:世界坐标系 → 相机坐标系 → 图像坐标系 → 像素坐标系。每一步都是一次数学变换,少一个环节,数据就对不上。

坐标系转换流程 世界坐标系 (Xw, Yw, Zw) 刚体变换 相机坐标系 (Xc, Yc, Zc) 透视投影 图像坐标系 (x, y) 离散化 像素坐标系 (u, v) 关键理解: 1. 世界→相机:外参(旋转R + 平移t),描述相机在真实世界的位置和朝向 2. 相机→图像:内参(焦距f),将三维点投影到成像平面 3. 图像→像素:内参(主点偏移 + 像素尺寸),从连续坐标到离散像素

1. 世界坐标系 (World Coordinate System)

世界坐标系是整个场景的“参考系”。你可以把它想象成一个固定的原点,所有物体、传感器、车辆的位置都相对于它来描述。我习惯把世界坐标系的原点设在场景的某个角落,比如停车场的第一根柱子,或者用GPS经纬度作为基准。

  • 表示方式: (Xw, Yw, Zw)
  • 单位: 米(或毫米,看应用场景)
  • 特点: 一旦定义,不再改变。所有其他坐标系都通过变换与之关联。

我的习惯:在自动驾驶项目中,我通常把世界坐标系Z轴朝上(右手系),这样和大多数地图数据兼容。如果你做机器人室内导航,Z轴朝上也是主流。别小看这个选择——方向错了,后面所有旋转矩阵都得重算。

2. 相机坐标系 (Camera Coordinate System)

相机坐标系的原点在相机的光心(镜头中心),Z轴指向相机的前方(也就是拍摄方向),X轴向右,Y轴向下。嗯,这里要注意:相机坐标系的Y轴是朝下的,这和世界坐标系的习惯不一样。

为什么这么定义?因为图像的行是从上往下数的,Y轴朝下方便后续映射到图像坐标。我在第一次做标定时,没注意这个细节,结果点云投影到图像上全是上下颠倒的——折腾了一天才发现是坐标系方向搞反了。

  • 表示方式: (Xc, Yc, Zc)
  • 与世界坐标系的关系: 通过旋转矩阵R和平移向量t进行刚体变换

数学表达:

[Xc]   [R11 R12 R13] [Xw]   [tx]
[Yc] = [R21 R22 R23] [Yw] + [ty]
[Zc]   [R31 R32 R33] [Zw]   [tz]

简写为:Pc = R · Pw + t

3. 图像坐标系 (Image Coordinate System)

图像坐标系是二维的,原点在成像平面的中心(也就是光轴与成像平面的交点),x轴向右,y轴向下。单位是毫米。

这里有个关键点:相机坐标系里的三维点,通过透视投影变成图像坐标系里的二维点。说白了,就是小孔成像原理——远处的物体在成像平面上变小了。

我曾经踩过的坑:图像坐标系的原点不是图像左上角,而是成像平面的物理中心。很多初学者直接把图像左上角当原点,结果投影全偏了。记住:图像坐标系是连续的物理坐标,像素坐标系才是离散的整数坐标。

透视投影公式:

x = f * (Xc / Zc)
y = f * (Yc / Zc)

其中f是焦距(单位:毫米)。Zc是物体到相机的深度。

4. 像素坐标系 (Pixel Coordinate System)

像素坐标系就是我们最终看到的图像坐标。原点在图像左上角,u轴向右,v轴向下。单位是像素(pixel)。

从图像坐标系到像素坐标系,其实就是一次“离散化”和“偏移”:

u = (x / dx) + u0
v = (y / dy) + v0

其中:

  • dx, dy:每个像素在x和y方向的物理尺寸(毫米/像素)
  • u0, v0:图像坐标系原点在像素坐标系中的位置(主点坐标)

我建议:在实际项目中,不要手动算这些公式。直接用OpenCV的cv2.projectPoints()或者Eigen的投影函数。但理解背后的原理很重要——当投影结果不对时,你知道该查哪个环节。

5. 完整转换关系总结

把上面四步串起来,一个世界坐标系下的点Pw到像素坐标(u, v)的完整变换是:

Zc * [u]   [fx  0  u0  0] [R  t] [Xw]
     [v] = [ 0 fy  v0  0] [0  1] [Yw]
     [1]   [ 0  0   1  0]        [Zw]
                                  [ 1]

其中:

  • fx = f / dx, fy = f / dy:以像素为单位的焦距
  • u0, v0:主点坐标
  • R, t:相机外参(旋转和平移)
坐标系 维度 原点 单位 关键参数
世界坐标系 3D 自定义 米 无(参考)
相机坐标系 3D 光心 米 R, t(外参)
图像坐标系 2D 成像平面中心 毫米 f(焦距)
像素坐标系 2D 图像左上角 像素 fx, fy, u0, v0(内参)

一句话记住:世界坐标系是“真实世界”,相机坐标系是“以相机为中心看世界”,图像坐标系是“物理成像平面”,像素坐标系是“你看到的图像”。每一步变换都有明确的数学公式,少一个环节,数据就对不上。