坐标系基础:世界坐标系、相机坐标系、图像坐标系、像素坐标系、激光雷达坐标系

做外参标定,说白了就是搞清楚不同传感器之间的空间位置关系。而这一切的起点,就是坐标系。我见过不少新手,上来就调参数,结果标定结果一塌糊涂。为什么?坐标系没搞明白。

今天咱们就把这五个坐标系彻底捋清楚。你想想看,一个点从激光雷达里测出来,到最后变成图像上的一个像素,中间经历了多少次坐标变换?嗯,至少四次。每一步都对应一个坐标系。

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

世界坐标系是一个固定的参考系。它不随传感器移动而改变。我个人习惯把世界坐标系的原点放在车辆后轴中心,或者第一帧相机的位置。

为什么需要它?因为激光雷达和相机都在动。但世界坐标系不动。所有传感器的位姿,最终都要统一到世界坐标系下。

关键点:世界坐标系是三维的,用 (Xw, Yw, Zw) 表示。单位通常是米。

我在项目中遇到过一个问题:有人把世界坐标系的原点放在了车辆正前方10米处。结果所有标定参数都偏了。后来查了半天,才发现是坐标系定义不一致。所以,团队内部一定要统一世界坐标系的定义。

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

相机坐标系是以相机光心为原点的三维坐标系。它的 Z 轴指向相机正前方,X 轴向右,Y 轴向下。嗯,这里要注意:相机坐标系的 Y 轴是朝下的,这和世界坐标系不一样。

相机坐标系的作用,是把世界坐标系中的点,转换到相机“眼里”的位置。说白了,就是回答一个问题:这个物体相对于相机,到底在哪儿?

小技巧:在代码里,我习惯用 R 和 t 来表示从世界坐标系到相机坐标系的变换。R 是旋转矩阵,t 是平移向量。

我曾经在标定场上,因为相机坐标系定义反了,导致所有投影点都跑到了图像外面。当时急得满头汗。后来发现,只要把旋转矩阵的符号改一下就好了。这种坑,踩过一次就记住了。

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

图像坐标系是二维的。它的原点在图像平面的中心,也就是相机光轴与图像平面的交点。X 轴向右,Y 轴向下。

从相机坐标系到图像坐标系,靠的是透视投影。说白了,就是把三维空间中的点,通过小孔成像原理,映射到二维平面上。

公式很简单:

x = f * (X_c / Z_c)
y = f * (Y_c / Z_c)

其中 f 是焦距,(X_c, Y_c, Z_c) 是相机坐标系下的点坐标,(x, y) 是图像坐标系下的坐标。

注意:这里的单位是物理单位(毫米或米),不是像素。很多初学者在这里搞混了。

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

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

从图像坐标系到像素坐标系,就是一个缩放加平移的过程:

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

其中 dx 和 dy 是每个像素的物理尺寸,u0 和 v0 是图像中心点的像素坐标。

你想想看,一个三维空间中的点,经过世界坐标系→相机坐标系→图像坐标系→像素坐标系,最终变成了图像上的一个像素。每一步都有对应的矩阵运算。

核心公式:把上面三步合并,就是相机内参矩阵 K。K 包含了焦距、像素尺寸、主点坐标等信息。

5. 激光雷达坐标系(LiDAR Coordinate System)

激光雷达坐标系的原点通常在激光雷达的旋转中心。X 轴指向车辆前方,Y 轴指向左侧,Z 轴指向上方。注意,这和相机坐标系不一样。

激光雷达直接输出三维点云数据,每个点用 (X_l, Y_l, Z_l) 表示。单位也是米。

外参标定的核心任务,就是找到激光雷达坐标系到相机坐标系的变换关系。也就是一个旋转矩阵 R 和一个平移向量 t。

我的经验:标定时,我通常会准备一个棋盘格标定板。激光雷达能扫到标定板的边缘,相机能拍到标定板的角点。通过对应关系,就能解出外参。

6. 坐标系变换总览

咱们把整个流程串起来。一个点从激光雷达出发,到图像上的像素,经历了:

  1. 激光雷达坐标系 → 世界坐标系:通过激光雷达的外参(R_l, t_l)
  2. 世界坐标系 → 相机坐标系:通过相机的外参(R_c, t_c)
  3. 相机坐标系 → 图像坐标系:通过透视投影
  4. 图像坐标系 → 像素坐标系:通过内参矩阵 K

实际上,我们通常把第1步和第2步合并,直接求激光雷达坐标系到相机坐标系的变换。这就是外参标定要解的问题。

避坑指南:我曾经在标定过程中,忘记考虑激光雷达和相机的采集时间戳对齐。结果点云和图像对不上,标定结果一塌糊涂。后来加了时间同步模块,问题才解决。

7. 知识体系结构图

下面这张图,展示了五个坐标系之间的关系,以及外参标定的核心流程:

坐标系变换与外参标定核心流程 世界坐标系 (Xw, Yw, Zw) 激光雷达坐标系 (Xl, Yl, Zl) 相机坐标系 (Xc, Yc, Zc) 图像坐标系 (x, y) 像素坐标系 (u, v) 外参 R_l, t_l 外参 R_c, t_c 外参标定 R, t 透视投影 内参 K 核心任务 找到激光雷达坐标系到相机坐标系的变换关系(R, t),实现点云与图像的精准对齐

8. 总结一下

五个坐标系,层层递进。世界坐标系是全局基准,相机坐标系和激光雷达坐标系是传感器本地坐标,图像坐标系和像素坐标系是最终输出。

外参标定,就是打通激光雷达坐标系到相机坐标系的桥梁。内参标定,则是搞定相机内部的光学映射关系。两者缺一不可。

一句话记住:坐标系搞不清楚,标定就是瞎搞。坐标系搞清楚了,标定就成功了一半。

我在实际项目中,每次拿到新的传感器,第一件事就是确认坐标系定义。然后写一个简单的测试脚本,把几个已知点投影到图像上,看看对不对。这一步花不了多少时间,但能避免后面的大坑。

好了,坐标系基础就讲到这里。记住,坐标系是标定的地基。地基不稳,房子盖得再高也得塌。

可可精品资料库