2. 摄像头成像原理:小孔成像模型、透镜畸变、数字图像传感器(CMOS/CCD)工作原理
做多摄像头融合感知,第一件事是什么?不是调算法,不是标定,而是先把摄像头本身吃透。你想想看,如果连传感器怎么成像的都不清楚,后面那些复杂的融合逻辑就是空中楼阁。
这一章,我们就从最基础的物理原理讲起。我会结合自己这些年踩过的坑,把成像这件事掰开了揉碎了讲清楚。
2.1 小孔成像模型:一切的基础
先说小孔成像。这是所有摄像头模型的鼻祖,说白了就是初中物理课本里那个暗箱实验。
光线从物体表面反射,穿过一个小孔,在后面的平面上形成倒立的像。这个模型简单到令人发指,但它抓住了成像的本质——透视投影。
核心公式:
X_image = f * (X_world / Z_world)
Y_image = f * (Y_world / Z_world)
其中 f 是焦距,Z_world 是物体到相机的距离。
这个公式告诉我们一个关键事实:物体越远,成像越小。这就是为什么远处的车在图像里只有几个像素,近处的车能占满整个画面。
我个人习惯把这个模型当作「理想情况」。实际摄像头不可能用一个小孔,因为进光量太少,曝光时间太长,根本没法用。所以就有了透镜。
2.2 透镜畸变:理想很丰满,现实很骨感
加了透镜之后,进光量上去了,但问题也来了——畸变。
我记得刚入行时,第一次做车道线检测,发现算法在图像边缘总是把直线识别成弯的。排查了半天,最后发现是摄像头畸变没校正。嗯,这个坑我替你们踩过了。
畸变主要分两种:
- 径向畸变:光线经过透镜边缘时弯曲程度不同,导致图像边缘向内或向外扭曲。向内叫桶形畸变,向外叫枕形畸变。
- 切向畸变:透镜和成像平面不平行,导致图像倾斜。这个在量产摄像头里比较常见,因为装配公差很难完全消除。
避坑指南:
我曾经在一个项目中,因为赶进度,跳过了畸变校正这一步。结果融合后的鸟瞰图在边缘区域出现了严重的拼接错位。后来花了整整两天重新标定,才把问题解决。所以,畸变校正不是可选项,是必选项。
畸变校正的数学模型长这样:
// 径向畸变
x_distorted = x * (1 + k1*r^2 + k2*r^4 + k3*r^6)
y_distorted = y * (1 + k1*r^2 + k2*r^4 + k3*r^6)
// 切向畸变
x_distorted = x + (2*p1*x*y + p2*(r^2 + 2*x^2))
y_distorted = y + (p1*(r^2 + 2*y^2) + 2*p2*x*y)
其中 k1、k2、k3 是径向畸变系数,p1、p2 是切向畸变系数。这些参数需要通过标定来获取。
2.3 数字图像传感器:CMOS vs CCD
光线穿过透镜,打到传感器上,这时候就该数字图像传感器上场了。
目前主流就两种:CMOS 和 CCD。我直接说结论:自动驾驶领域几乎全是 CMOS。为什么?往下看。
| 特性 | CMOS | CCD |
|---|---|---|
| 功耗 | 低(约 CCD 的 1/10) | 高 |
| 读出速度 | 快(支持高帧率) | 慢 |
| 噪声 | 较高(但近年改善明显) | 低 |
| 集成度 | 高(可集成 ADC、ISP) | 低 |
| 成本 | 低 | 高 |
你看,CMOS 在功耗、速度、集成度、成本上全面占优。虽然噪声比 CCD 大一点,但现在的降噪算法已经能处理得很好了。
我建议你在选型时重点关注这几个参数:
- 分辨率:不是越高越好。分辨率高了,数据量大了,处理带宽跟不上的话反而会拖累系统。
- 帧率:自动驾驶至少需要 30fps,高速场景建议 60fps。
- 动态范围:这个很关键。隧道出入口那种场景,动态范围不够的话,要么一片黑要么一片白。
- 全局快门 vs 卷帘快门:做多摄像头融合,我强烈建议用全局快门。卷帘快门在高速运动时会产生果冻效应,融合时对不齐。
注意:
我曾经在一个项目中用了卷帘快门的摄像头做前向感知。车速 80km/h 时,图像里的车道线都是歪的。后来换成全局快门,问题立刻解决。这个教训让我记住了:运动场景下,全局快门是刚需。
2.4 从光子到像素:传感器的工作流程
传感器是怎么把光变成数字信号的?我简单梳理一下流程:
- 光电转换:每个像素上的光电二极管把光子转换成电子。光子越多,电子越多。
- 电荷积累:在曝光时间内,电子不断积累。曝光时间越长,积累的电子越多。
- 读出:CMOS 是每个像素独立读出,CCD 是逐行转移读出。
- 模数转换:把模拟电压转换成数字值,通常是 8bit、10bit 或 12bit。
- ISP 处理:去噪、白平衡、色彩校正、伽马校正等。
这里有个概念很重要——量子效率。它表示传感器把光子转换成电子的效率。效率越高,弱光下表现越好。
我一般会关注传感器的量子效率曲线,看看它在可见光波段的表现。有些传感器在近红外波段效率也不错,这对夜间辅助照明很有帮助。
2.5 多摄像头融合中的传感器考量
做多摄像头融合,传感器层面有几个坑要特别注意:
- 传感器型号要统一:不同型号的传感器,响应曲线、噪声特性都不一样,融合时很难对齐。
- 曝光时间要同步:多个摄像头如果曝光时间不一致,同一时刻拍到的场景亮度不同,融合后会出现明显的拼接痕迹。
- 白平衡要一致:这个容易被忽略。不同摄像头的白平衡算法如果独立运行,同一块区域的颜色会不一样。
我的做法:
在项目中,我会把所有摄像头配置成相同的曝光参数和白平衡模式,然后用硬件触发信号让它们同时曝光。这样采集到的图像在时间上和亮度上都是对齐的,后续融合就省了很多麻烦。
好了,这一章的内容就到这里。从物理原理到工程实践,我把摄像头成像的各个环节都过了一遍。下一章我们会讲标定,那是把理论变成可操作数据的关键一步。
记住一句话:理解传感器,是做好感知的第一步。