宽动态实现原理:多重曝光技术
宽动态(WDR)到底是怎么实现的?说白了,就是让摄像头在同一帧画面里,同时看清亮处和暗处。人眼能做到这一点,是因为瞳孔会自适应调节。但传感器是死的,它只能在一个固定的曝光时间下工作。
那怎么办?多重曝光。让传感器拍两张甚至多张不同亮度的照片,然后合成一张。这就是宽动态的核心思路。
长短帧融合:最朴素的思路
最早期的宽动态方案,就是拍两张图:
- 长帧(Long Frame):曝光时间长,暗部细节拉满,但亮部会过曝。
- 短帧(Short Frame):曝光时间短,亮部细节保留,但暗部一片黑。
然后把两张图里各自“看得清”的部分拼起来。暗部用长帧,亮部用短帧。听起来简单,对吧?
但实际做起来坑很多。我记得早期做一款IPC,长帧和短帧之间如果时间差太大,运动物体会出现鬼影——人走过去,长帧里一个影子,短帧里又一个影子,合成出来像分身术。嗯,这就是融合算法要解决的核心问题。
关键指标:长帧与短帧的曝光时间比,通常称为 DR Ratio(动态范围比)。常见比值有 4x、8x、16x、32x。比值越大,动态范围越宽,但鬼影和噪声也越难控制。
DOL 模式 vs SVS 模式
随着技术演进,多重曝光分成了两大流派。我直接给你对比表,一目了然:
| 对比项 | DOL 模式(Digital Overlap) | SVS 模式(Single Vline Sampling) |
|---|---|---|
| 曝光方式 | 连续曝光多帧,帧与帧之间有间隔 | 单行内完成长短曝光,行与行之间连续 |
| 帧率影响 | 帧率会下降(因为要拍多帧) | 帧率基本不变 |
| 运动鬼影 | 较明显(帧间时间差大) | 较轻(行内时间差极小) |
| 传感器要求 | 普通传感器即可 | 需要支持行内多次读出的 HDR 传感器 |
| 典型应用 | 安防监控、交通抓拍 | 运动场景、车载摄像头 |
我个人习惯在安防监控里优先选 DOL 模式。为什么?因为安防场景大部分是固定安装,运动物体不多,DOL 的帧率损失可以接受,而且传感器成本更低。但如果你做的是高速路口抓拍,那 SVS 模式更合适——车辆速度快,鬼影必须压到最低。
避坑指南:我曾经在一个项目中选了 DOL 模式,结果现场有大量快速晃动的树叶。长帧和短帧里的树叶位置不一样,合成后整棵树都在“抖动”。后来我把长短帧的曝光时间比从 16x 降到 8x,鬼影才压下去。所以,DR Ratio 不是越大越好,要结合场景运动量来权衡。
HDR 传感器工作原理
要实现 DOL 或 SVS,底层靠的是 HDR 传感器。这类传感器和普通 CMOS 最大的区别在于:它能在一帧时间内,完成多次不同时长的曝光,并分别读出。
具体来说,HDR 传感器内部有多个存储单元(比如每个像素旁边配一个“小桶”)。长帧曝光完,电荷先存进第一个桶;短帧曝光完,电荷存进第二个桶。然后两个桶的数据分别读出,送到 ISP 里做融合。
我画了一张流程图,帮你理解这个时序:
时序控制逻辑
时序控制是 ISP 调优里最容易出问题的地方。你想想看,传感器要在一帧时间内完成:长帧曝光 → 长帧读出 → 短帧曝光 → 短帧读出。这四个步骤的时间窗口必须精确对齐。
我总结了一个典型的 DOL 时序参数表,你在调优时可以直接参考:
| 参数 | 典型值 | 说明 |
|---|---|---|
| 帧率(FPS) | 25 / 30 | PAL 或 NTSC 标准 |
| 帧周期(VTS) | 1125 行(1080P) | 一帧总行数,包含消隐区 |
| 长帧曝光行数 | 800 行 | 对应 T_long,暗部细节 |
| 短帧曝光行数 | 50 行 | 对应 T_short,亮部细节 |
| DR Ratio | 16x | 长帧行数 / 短帧行数 |
| 读出时间 | ~30μs/行 | 取决于传感器接口速率 |
重要提醒:时序控制里最容易踩的坑是帧消隐区(VBlank)不够。如果长帧读出 + 短帧曝光 + 短帧读出的总时间超过了帧周期,就会导致帧率下降,甚至画面撕裂。我曾经调一个 4K 传感器,VBlank 只留了 20 行,结果死活跑不到 30fps。后来把 VBlank 加到 80 行,问题才解决。
另外,DOL 模式下还有一个关键参数叫帧间间隔(Inter-frame Gap)。长帧结束到短帧开始之间,如果间隔太长,运动物体的位置偏移会变大,鬼影更严重。我一般建议把间隔控制在 1-2 行以内,越短越好。