3、摄像头仿真基础:摄像头模型原理(针孔模型、畸变模型)、内参外参配置

好,咱们进入摄像头仿真这一块。

说实话,摄像头是自动驾驶里最“像人”的传感器。但它也有自己的脾气。你想想看,一个镜头拍出来的东西,跟人眼看到的,其实差别挺大。为什么?因为镜头有畸变,成像有透视关系。搞不懂这些,你仿真出来的图像就是“假”的,算法上去一跑,准出问题。

我个人习惯,在讲摄像头模型之前,先让大家理解一个核心问题:我们到底在仿真什么?说白了,就是模拟光线怎么从真实世界,落到相机传感器上,变成一张数字图像。这个过程,就是摄像头模型要干的事。

3.1 针孔模型:最基础的成像原理

针孔模型,是所有摄像头模型的“老祖宗”。它简单,但管用。

想象一个密封的黑盒子,前面戳一个小孔。外面的光线穿过小孔,在盒子后面的墙上形成一个倒立的像。这就是针孔成像。摄像头镜头,本质上就是把这个小孔换成了透镜,让更多光线进来,成像更亮更清晰。

在数学上,针孔模型描述的是“世界坐标系中的点”“图像像素坐标系中的点”的映射关系。这个映射,靠的就是内参和外参。

核心公式(简化版):

像素坐标 = 内参矩阵 × 外参矩阵 × 世界坐标

这个公式,你仿真的时候天天要用。记牢它。

内参矩阵长什么样?它包含焦距(fx, fy)、主点(cx, cy)。焦距决定了视角大小,主点就是光轴和成像平面的交点,一般在图像中心附近。

# 典型的针孔相机内参矩阵
K = [[fx,  0, cx],
     [ 0, fy, cy],
     [ 0,  0,  1]]

外参矩阵呢?它描述的是相机在世界坐标系中的位置和朝向。说白了,就是相机“站在哪”、“看哪”。

3.2 畸变模型:镜头不是完美的

针孔模型是理想情况。但现实中的镜头,尤其是广角镜头,会引入畸变。你拍出来的直线,在图像里变弯了。这就是畸变。

畸变主要分两种:径向畸变切向畸变

  • 径向畸变:光线在镜头边缘弯曲得更厉害。表现为“桶形畸变”(直线向外凸)或“枕形畸变”(直线向内凹)。
  • 切向畸变:镜头和成像平面不平行导致的。表现为图像像被“拧”了一下。

我在项目中遇到过,有一次仿真出来的车道线,算法怎么都检测不准。查了半天,发现是畸变参数没配对。仿真里用的是理想针孔模型,但实际车上的镜头有畸变。算法在仿真里学到的“直线”,到了实车上全变成了“曲线”。嗯,这个坑我踩过。

避坑指南:

我曾经在仿真里直接用了厂商给的畸变参数,结果发现图像边缘的物体位置偏差很大。后来才意识到,厂商给的参数是在特定分辨率下标定的。你仿真用的分辨率如果不一样,需要先做缩放处理。切记!

畸变模型通常用几个多项式系数来描述。最常用的是Brown-Conrady模型:

# 畸变系数 (k1, k2, p1, p2, k3)
# k1, k2, k3 是径向畸变系数
# p1, p2 是切向畸变系数
dist_coeffs = [k1, k2, p1, p2, k3]

在仿真中,我们通常先根据针孔模型生成“理想图像”,然后再施加畸变,得到“真实图像”。这个顺序不能搞反。

3.3 内参外参配置:让仿真相机“活”起来

配置内参和外参,是摄像头仿真里最基础,也最容易出错的一步。

内参配置,就是告诉仿真引擎:你的相机镜头是什么样的。包括分辨率、焦距、像素大小、畸变系数等。这些参数,决定了仿真图像的“画风”。

参数 含义 典型值(举例)
分辨率 图像宽高像素数 1920 x 1080
水平视场角 (HFOV) 相机水平方向能看到的范围 60° ~ 120°
焦距 (f) 镜头光学中心到成像平面的距离 取决于传感器尺寸和视场角
主点 (cx, cy) 光轴与成像平面的交点 通常接近图像中心
畸变系数 描述镜头畸变程度 k1, k2, p1, p2, k3

外参配置,就是告诉仿真引擎:你的相机装在哪、朝哪看。在自动驾驶中,摄像头通常装在车顶、前挡风玻璃、后视镜等位置。外参包括平移向量(x, y, z)和旋转向量(roll, pitch, yaw)。

重要提醒:

外参的坐标系定义一定要统一!有的仿真工具用“前-左-上”坐标系,有的用“右-前-上”。搞混了,你仿真出来的图像位置全错。我建议你在项目一开始,就明确写下坐标系定义,贴在工位上。

举个例子,一个前视摄像头的外参配置:

# 外参:相机相对于车辆坐标系
translation: [1.5, 0.0, 1.2]  # 车头前方1.5米,中心,高度1.2米
rotation: [0.0, 0.0, 0.0]     # 俯仰角0°,偏航角0°,翻滚角0°(水平向前看)

配置好内参和外参,你的仿真摄像头就算“装好”了。接下来,仿真引擎就会根据这些参数,渲染出每一帧图像。

我个人习惯,在配置完参数后,会先跑一个简单的“棋盘格”标定场景。看看仿真出来的图像,畸变对不对,视角对不对。这一步能帮你提前发现很多配置错误。

好了,摄像头模型原理和内参外参配置,就讲这么多。下一章,我们会聊聊摄像头仿真里更进阶的话题——光照模型与图像渲染。到时候再聊。