1. 车载夜视方案的整体设计思路拆解
1.1 为什么要把ADAS和全彩夜视捏在一起
先说说我为什么盯上这个方向。去年帮一个做商用车队管理的朋友做技术选型,他们的痛点很直接:白天ADAS(高级辅助驾驶)跑得好好的,一到晚上或者进隧道,前向碰撞预警、行人检测这些功能基本就废了。原因不复杂——传统车载摄像头在低照度下信噪比急剧恶化,画面糊成一团,算法再强也白搭。后来我们试过补红外补光灯,但黑白画面丢失了颜色信息,红绿灯、刹车灯、锥桶这些靠颜色区分的目标识别率掉得厉害。
所以“ADAS辅助驾驶+全彩夜视集成”这个方案的核心思路就一句话:用全彩夜视传感器给ADAS算法喂高质量的夜间图像,让辅助驾驶在暗光环境下不掉链子。这不是简单地把两个模块拼在一起,而是从传感器选型、图像处理管线、算法适配到系统集成的全链路重构。
从行业背景看,这个方向踩中了几个真实需求。一是商用车夜间事故率居高不下,车队有降本增效的硬指标;二是乘用车前装市场对夜间AEB(自动紧急制动)的测试标准越来越严;三是后装市场大量存量车想升级夜间安全能力,但不想换整车。这套方案既能前装集成,也能后装改造,适配面很宽。
适合谁来参考?我把它分成三类:做ADAS算法落地的工程师、做车载硬件集成的产品经理、以及想给车队做安全升级的技术负责人。哪怕你只是对车载夜视感兴趣,看完也能明白这套东西到底怎么搭、坑在哪。
1.2 方案选型的几个关键取舍
选型阶段我们纠结最久的是传感器路线。市面上能实现全彩夜视的路线主要有三条:大靶面CMOS+大光圈镜头、多帧合成+AI降噪、近红外增强+色彩还原算法。第一条靠物理进光量硬扛,成本高但效果最扎实;第二条靠算法补,对算力要求高,暗光下容易出鬼影;第三条介于两者之间,但近红外和可见光混叠会导致色彩偏移。
我们最终选了“大靶面CMOS+大光圈镜头”为主、“多帧合成”为辅的组合。理由很实际:车队场景下算力平台往往不是最顶配的,纯算法路线跑不动;而大靶面传感器虽然贵一点,但一次投入换来的是稳定的原始图像质量,后续算法适配压力小很多。具体参数上,我们选的是1/1.8英寸靶面、F1.4光圈、200万像素的传感器,单像素尺寸做到3.0μm。这个组合在0.001lux照度下还能输出可用的彩色图像,实测比普通车载摄像头的低照度性能提升了大概两个数量级。
镜头这块有个容易忽略的点:大光圈带来的景深变浅问题。F1.4在近距离对焦时景深可能只有几十厘米,如果ADAS需要同时看清近处障碍物和远处车道线,就得靠景深合成或者双焦段方案。我们后来加了一路窄角镜头专门看远处,广角镜头负责近场,两路图像在域控制器里做融合。这个取舍后面在实操部分会详细说。
2. 全彩夜视的核心细节与实操要点
2.1 传感器和镜头的匹配计算
很多人拿到传感器和镜头就直接装,结果发现边缘画质崩了、暗角严重。这里有个匹配计算必须做:传感器的像面尺寸要和镜头的像场直径匹配。我们用的1/1.8英寸传感器,像面对角线约8.9mm,镜头像场直径必须大于等于这个值,否则边缘会有暗角甚至完全黑掉。实际选型时建议留10%余量,也就是选像场直径9.8mm以上的镜头。
光圈和进光量的关系也得算清楚。F1.4比F2.0的进光量多一倍(因为进光量与光圈值的平方成反比),这在暗光下就是“能看见”和“看不见”的区别。但光圈越大,镜头的MTF(调制传递函数)越难做好,边缘解析力下降明显。我们实测过几款F1.4镜头,中心MTF在200lp/mm时还能保持0.6以上,但边缘掉到0.3以下。解决办法是选非球面镜片多的镜头,或者适当缩小光圈到F1.6换取边缘画质。
注意:镜头接口有M12、M16、CS等多种规格,选型时务必确认和传感器板子的接口匹配。我们踩过一次坑,镜头螺纹规格差0.5mm,硬拧上去导致光轴偏移,画面一半清晰一半模糊。
2.2 图像处理管线的搭建要点
传感器出来的原始Bayer数据不能直接给ADAS算法用,中间要经过一整套ISP(图像信号处理)管线。我们的管线顺序是:黑电平校正→镜头阴影校正→坏点校正→去马赛克→白平衡→色彩校正→伽马校正→降噪→锐化。这个顺序不能乱,比如降噪放在去马赛克之前会破坏Bayer pattern的规律性,导致伪彩色。
全彩夜视最关键的环节是白平衡和色彩校正。夜间光源复杂,路灯有钠灯的黄色、LED的冷白、还有各种杂散光,自动白平衡很容易飘。我们的做法是:在ISP里预设几组夜间白平衡参数,根据环境光传感器和图像统计信息动态切换。色彩校正矩阵也要针对低照度单独调一版,白天用的矩阵在夜间会让红色偏暗、蓝色偏亮。
降噪这块有个经验:时域降噪和空域降噪要配合用。时域降噪利用多帧信息,对静态场景效果好,但运动物体会拖影;空域降噪对单帧处理,运动物体干净但静态区域噪点残留多。我们设了一个运动检测阈值,运动区域以空域为主,静态区域以时域为主,实测在0.01lux下信噪比能到30dB以上。
2.3 ADAS算法对图像质量的特殊要求
ADAS算法和人眼看图的需求不一样。人眼要的是“好看”,算法要的是“特征清晰”。具体来说,车道线检测需要高对比度的边缘,行人检测需要准确的轮廓和纹理,车辆检测需要稳定的颜色和亮度分布。全彩夜视图像如果过度降噪,边缘会被抹平,车道线检测率直接掉;如果锐化过度,噪点被放大成假边缘,误检率飙升。
我们做了几轮调参,最后定下来的策略是:给ADAS算法的图像走单独的处理分支。人机交互用的显示图像可以降噪强一点、色彩艳一点;算法用的图像保留更多高频细节,锐化控制在适度范围。两路图像从ISP的不同节点分出来,互不干扰。这个设计后来证明很关键,因为算法团队和显示团队的需求经常打架,分开处理省了很多扯皮。
3. 实操过程与核心环节实现
3.1 硬件搭建与接线实录
先列一下我们用的核心硬件清单,方便你抄作业:
| 部件 | 型号/规格 | 数量 | 备注 |
|---|---|---|---|
| 全彩夜视传感器模组 | 1/1.8英寸CMOS,200万像素,F1.4镜头 | 2 | 广角+窄角各一 |
| 域控制器 | 算力≥4TOPS,支持多路MIPI输入 | 1 | 我们用的某国产平台 |
| 环境光传感器 | I2C接口,量程0.01-10000lux | 1 | 用于白平衡切换 |
| 补光灯 | 近红外LED,波长850nm | 2 | 可选,极暗环境用 |
| 线束 | 同轴线+电源线,屏蔽层完整 | 若干 | 长度按车型定 |
接线顺序很重要:先接电源和地线,再接同轴线,最后接控制线。我们第一次搞的时候先插了同轴线,结果带电插拔把传感器接口的ESD保护管打坏了。同轴线走线要远离发动机点火线圈和电机驱动线,否则图像上会有规律性的横纹干扰。屏蔽层单端接地,两端接地会形成地环路,引入低频噪声。
环境光传感器装在挡风玻璃内侧、后视镜后方,避免被雨刮遮挡。补光灯的安装角度要算一下:如果补光灯和镜头光轴平行,近处物体会过曝;我们让补光灯向下偏5度,近处过曝问题明显改善。
3.2 ISP参数调试的完整流程
ISP调试是个细活,我们前后花了大概三周。流程分五步:
第一步,黑电平校正。盖上镜头盖,在完全黑暗环境下采集100帧,取平均值作为黑电平基准。温度变化会影响黑电平,我们做了温度补偿表,每10度一个档位。
第二步,镜头阴影校正。对着均匀白板拍摄,计算每个像素的亮度衰减系数,生成校正矩阵。注意白板要充满整个画面,光照均匀度控制在±5%以内。
第三步,白平衡标定。用标准色卡在几种典型夜间光源下拍摄,计算RGB增益。我们标了钠灯、LED、卤素灯三种场景,实际运行时根据环境光传感器的色温读数切换。
第四步,色彩校正。用24色卡拍摄,计算3x3色彩校正矩阵。夜间矩阵和白天矩阵分开存,切换逻辑和白平衡联动。
第五步,降噪和锐化调参。这一步最耗时间,因为要反复看效果。我们的方法是:录一段夜间行车视频,用不同参数组合跑离线处理,然后让ADAS算法团队评测检测率。最终选了一组在行人检测和车道线检测之间平衡的参数。
实操心得:ISP调试一定要用真实夜间道路数据,实验室里对着色卡调出来的参数上路经常翻车。我们后来养成了习惯,每周至少跑两次夜间实车采集,积累了几百段典型场景视频。
3.3 ADAS算法适配与联合调试
图像质量调好后,ADAS算法这边还要做适配。主要改三个地方:
输入预处理。算法原本是按白天图像训练的,夜间图像的亮度分布、对比度、色彩都不同。我们在算法前面加了一个轻量级的图像归一化层,把夜间图像的直方图往白天靠,但不改变语义内容。这个归一化层用查表实现,几乎不耗算力。
检测阈值调整。夜间图像的信噪比毕竟不如白天,固定的检测阈值会导致漏检或误检。我们根据图像的整体信噪比估计值动态调整阈值,信噪比低的时候适当放宽阈值,但加一个后处理模块过滤掉明显不合理的检测框。
时序滤波。夜间单帧检测偶尔会抖动,我们加了一个简单的卡尔曼滤波做时序平滑。目标连续三帧检测到才输出,单帧丢失不立即清除,这样既保证了稳定性,又不会引入太大延迟。
联合调试阶段我们跑了一个对比测试:同一段夜间道路,分别用普通车载摄像头和全彩夜视方案跑ADAS算法。结果全彩夜视方案的行人检测率从62%提升到89%,车道线检测率从71%提升到93%,前车距离估计误差从±15%降到±7%。这个提升幅度超出了我们预期,也验证了方案的价值。
4. 常见问题与排查技巧实录
4.1 图像质量类问题速查
| 现象 | 可能原因 | 排查方法 | 解决措施 |
|---|---|---|---|
| 画面整体偏绿 | 白平衡增益异常 | 检查环境光传感器读数是否正常 | 重新标定白平衡或手动锁定增益 |
| 边缘有暗角 | 镜头像场不匹配 | 对比传感器像面尺寸和镜头像场直径 | 更换匹配镜头或开启阴影校正 |
| 画面有横纹干扰 | 电源纹波或地环路 | 用示波器看电源纹波,检查屏蔽层接地 | 加LC滤波,屏蔽层改单端接地 |
| 运动物体拖影 | 时域降噪过强 | 降低时域降噪强度或提高运动检测灵敏度 | 调整降噪参数,运动区域切空域 |
| 夜间噪点明显 | 进光量不足或降噪不够 | 检查光圈是否全开,增益是否拉满 | 增大光圈,优化降噪参数,必要时补光 |
| 色彩偏暗偏灰 | 色彩校正矩阵不适配 | 用色卡对比夜间和白天色彩 | 单独标定夜间色彩校正矩阵 |
4.2 系统集成类问题排查
问题一:ADAS功能间歇性失效。我们遇到过跑着跑着前向碰撞预警突然不报了,重启又正常。排查发现是域控制器的温度保护机制触发,降频后算力不够,算法超时。解决办法是加散热片和风扇,把域控制器的工作温度控制在70度以下。这个坑很隐蔽,因为图像看起来完全正常,但算法已经在超时边缘。
问题二:两路摄像头图像不同步。广角和窄角摄像头的曝光时间不同,融合时运动物体会出现重影。我们后来用了硬件同步信号,让两个传感器同时曝光,曝光时间也设成一样。如果硬件不支持同步,软件上要做时间戳对齐,但效果会打折扣。
问题三:夜间补光灯引起反光。补光灯照到车牌或路牌上会产生强烈反光,导致局部过曝。我们调整了补光灯的安装位置和角度,让反光区域尽量落在画面边缘,同时在ISP里加了高光抑制。如果反光实在严重,可以考虑用偏振片,但会损失一部分进光量。
避坑技巧:所有线束接头都用热缩管包好,车辆振动会导致接头松动。我们有一次跑了几千公里后图像时有时无,查了半天是接头松了。后来所有接头都加了防松胶和扎带固定。
4.3 性能优化的几个实用技巧
技巧一:ROI编码传输。全彩夜视图像分辨率高,原始数据量大。我们把ADAS关心的区域(画面中下部)用高码率传输,天空和边缘区域用低码率,整体带宽降低了40%,算法效果几乎不受影响。
技巧二:分时复用ISP。如果算力平台紧张,可以让ISP分时处理两路摄像头,比如每路隔帧处理。但要注意ADAS的帧率要求,前向碰撞预警至少需要15fps,低于这个值响应会明显变慢。
技巧三:预计算查找表。ISP里的伽马校正、色彩校正、阴影校正都可以预先算成查找表,运行时直接查表,比实时计算快很多。我们把所有固定参数的处理都做成了查找表,ISP的算力占用从30%降到了12%。
技巧四:动态帧率调整。夜间低速行驶时,帧率可以降到15fps省算力;高速时升到30fps保证响应。这个切换逻辑要根据车速信号来做,切换时注意图像亮度的一致性,否则会有闪烁感。
5. 方案扩展与个人经验分享
这套方案跑通之后,我们又做了几个扩展尝试。一个是多光谱融合,在全彩夜视基础上加一路近红外,用近红外的穿透能力补全雾霾和烟尘场景的可见度。另一个是事件相机辅助,事件相机对运动物体响应极快,和全彩夜视互补,能进一步提升夜间行人检测的响应速度。这两个方向都还在验证阶段,但初步效果不错。
我个人在实际操作中的体会是:全彩夜视方案的成功,七分靠硬件选型和ISP调试,三分靠算法适配。很多人把精力全花在算法上,结果原始图像质量不行,算法再调也白搭。反过来,如果图像质量扎实,算法适配的工作量会小很多。所以如果你要上手这个方案,建议先把传感器和镜头选好、ISP调透,再动算法。
最后分享一个小技巧:夜间实车采集数据时,尽量覆盖不同天气(晴、雨、雾)、不同道路(高速、城区、乡村)、不同时段(黄昏、深夜、黎明)。我们后来发现,黄昏时分的图像最难处理,因为环境光变化快,白平衡和曝光都在动态调整,算法容易不稳定。针对这个时段单独调一组参数,效果会好很多。这个方案后续还可以往舱内驾驶员监控方向扩展,夜间全彩图像对疲劳检测和分心检测也有帮助,算是一鱼多吃。