宽动态实现原理:多重曝光技术

宽动态(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 里做融合。

我画了一张流程图,帮你理解这个时序:

HDR 传感器多重曝光时序流程 长帧曝光(T_long) 短帧曝光(T_short) 时间 → 长帧读出(Readout L) 短帧读出(Readout S) ISP 融合引擎(WDR Merge) HDR 帧输出 说明:长帧与短帧的曝光时间差决定了动态范围宽度,但也会影响运动鬼影的严重程度

时序控制逻辑

时序控制是 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 行以内,越短越好。