4. 从世界到像素:坐标变换的完整链路
各位同学,今天我们来聊聊自动驾驶感知中最基础、也最容易踩坑的一个环节——坐标变换。
说白了,车道线检测的终极目标,就是把物理世界中的一条白线,映射到你屏幕上那个像素点。这中间经历了三次变换:世界→相机(外参)、相机→图像(投影)、图像→像素(离散化)。每一步都有它的物理意义和数学表达。
我个人习惯把这三步拆开来看,因为每一步的误差来源完全不同。你如果混在一起调参,出了问题根本不知道是标定板没放平,还是内参矩阵算错了。
4.1 世界坐标系 → 相机坐标系(外参)
先问一个问题:为什么需要世界坐标系?
因为你的车在动,但车道线是固定的。我们需要一个全局参考系来描述车道线的绝对位置。通常,世界坐标系的原点选在车体中心或者第一个GPS天线下方,X轴指向车头,Y轴指向左侧,Z轴向上。
相机坐标系呢?它的原点在相机光心,Z轴指向镜头前方,X轴向右,Y轴向下(注意,这里和世界坐标系的方向不同)。
从世界到相机,本质上就是一个刚体变换:旋转 + 平移。
核心公式:
P_cam = R * P_world + T
其中 R 是 3x3 旋转矩阵,T 是 3x1 平移向量。这 6 个自由度(3 旋转 + 3 平移)就是所谓的外参。
我在项目中遇到过一个问题:标定完外参后,发现车道线投影到图像上总是偏左 2 个像素。排查了半天,结果是安装支架在车辆行驶中发生了微小形变。嗯,这里要注意——外参不是标定一次就一劳永逸的。特别是对于 L4 级别的量产车,建议每次上电后做一次在线标定校验。
我的经验:外参标定最常用的方法是 PnP(Perspective-n-Point)。你只需要知道 3D-2D 的对应点对,就能解出 R 和 T。但注意,点对数量至少 4 组,且不能共面。我曾经用 6 组点对,结果 3 组几乎在一条直线上,解出来的外参直接让车道线飞到天上去了。
4.2 相机坐标系 → 图像坐标系(投影)
这一步是从 3D 到 2D 的关键。相机坐标系下的点 (X_c, Y_c, Z_c),通过小孔成像模型,投影到图像平面上。
你想想看,小孔成像的本质是什么?是相似三角形。
x = f * X_c / Z_c
y = f * Y_c / Z_c
这里 f 是焦距(单位:毫米)。注意,投影后的坐标 (x, y) 是在图像坐标系下,单位还是毫米,原点在图像中心(主点)。
为什么强调这个?因为很多初学者直接把这一步得到的坐标当成像素坐标去用,结果发现图像边缘的物体位置全错了。说白了,你还需要一步离散化。
避坑指南:我曾经在调试一个环视系统时,发现四个相机的拼接处总有 3-5 个像素的错位。查了两天,最后发现是投影公式里忘了考虑镜头畸变。记住,实际镜头不是理想小孔,径向畸变和切向畸变必须校正。OpenCV 里用 cv::undistort() 或者 cv::initUndistortRectifyMap() 都可以做。
4.3 图像坐标系 → 像素坐标系(离散化)
最后一步,把连续的图像坐标 (x, y) 变成离散的像素坐标 (u, v)。
这一步其实就是一个仿射变换:
u = x / dx + u0
v = y / dy + v0
其中 dx, dy 是每个像素的物理尺寸(单位:毫米/像素),(u0, v0) 是主点在像素坐标系下的位置。
把这三步合起来,就得到了完整的投影矩阵 P:
P = K * [R | T]
其中 K 是内参矩阵:
K = [fx 0 u0
0 fy v0
0 0 1]
fx = f / dx, fy = f / dy,单位是像素。
我个人习惯把内参矩阵 K 看作一个「翻译器」——它把物理世界的毫米,翻译成图像世界的像素。而外参 [R|T] 则是「定位器」——它告诉相机在世界中的位置和朝向。
4.4 知识体系总览
下面这张图总结了从世界到像素的完整链路。我建议你把它打印出来贴在工位上,调试的时候对照着看,能省不少时间。
4.5 实战中的注意事项
讲完理论,说点实际的。我在量产项目中总结了几条经验:
- 坐标系方向要统一。 不同传感器(相机、激光雷达、IMU)的坐标系定义可能不同。我见过一个团队,相机用右手系,激光雷达用左手系,结果融合出来的车道线直接反了 180 度。
- 外参标定要定期做。 车辆行驶中的振动、温度变化都会导致外参漂移。建议每 1000 公里或者每次保养后重新标定一次。
- 内参一般不需要频繁标定。 除非你换了镜头或者相机模组。但注意,变焦镜头的内参会随焦距变化,每次变焦后必须重新标定。
- 投影前先做畸变校正。 这是最容易忽略的一步。我曾经在高速上测试,因为没做畸变校正,车道线在图像边缘偏移了 8 个像素,差点导致变道决策失误。
一个小技巧:在调试阶段,你可以把投影后的车道线叠加到原始图像上,用肉眼检查是否对齐。如果发现车道线在图像边缘出现弯曲或偏移,大概率是畸变校正没做好或者外参有误差。
好了,这一章的内容就到这里。坐标变换是整个车道线检测的基石,你如果能把这三步理解透,后面的语义分割、后处理都会轻松很多。
可可精品资料库