4. 长帧与短帧配置
宽动态(WDR)的核心,说白了就是让暗处看得清、亮处不过曝。这背后全靠长帧和短帧的配合。长帧负责把暗部细节捞起来,短帧负责把高光区域压住。两者合成一帧,才能得到我们想要的宽动态图像。
我刚开始调宽动态的时候,总觉得曝光时间越长越好,结果暗部是亮了,但运动物体拖影严重,客户直接投诉。后来才明白——长帧和短帧的配置,不是拍脑袋定的,得按场景来算。
曝光时间设定原则
长帧和短帧的曝光时间,不是随便给的。它们之间有一个核心约束:短帧曝光时间 × 增益比 ≤ 长帧曝光时间。这个不等式一旦被打破,合成后的图像就会出现亮度断层。
我个人习惯先定长帧,再算短帧。长帧的曝光时间,通常取当前场景下不产生明显运动模糊的最大值。比如室内监控,人走动速度不快,长帧可以放到 8ms~12ms;如果是路口抓拍,长帧超过 4ms 就会糊。
短帧的曝光时间,则取决于场景的动态范围。动态范围越大,短帧需要越短。我遇到过最极端的场景——一个地下车库出口,外面是大太阳,里面漆黑一片。那时候短帧我压到了 0.1ms,长帧放到 16ms,才勉强把车牌和内部细节都保住。
增益匹配策略
曝光时间定了,增益怎么配?这里有个坑——很多人以为长帧和短帧用同样的增益就行。其实不对。
长帧曝光时间长,暗部信号已经积累得比较充分,增益可以低一些,甚至用 0dB。短帧曝光时间短,亮部信号虽然强,但为了和长帧的亮度水平匹配,往往需要额外加增益。
我常用的匹配策略是这样的:
- 长帧增益:尽量低,0dB~6dB 之间。如果暗部噪声明显,可以适当提高,但不要超过 12dB,否则噪声会被放大到不可接受。
- 短帧增益:根据长帧曝光时间与短帧曝光时间的比值来算。比如长帧 8ms、短帧 1ms,比值是 8 倍,那么短帧增益需要比长帧高约 18dB(20×log10(8) ≈ 18dB)。
- 最终微调:算出来的增益值只是起点。实际还要看合成后的图像亮度是否均匀。我一般会在合成后取暗部和亮部的平均亮度,如果差距超过 10%,就微调短帧增益。
帧率与宽动态的权衡
帧率和宽动态,天生是一对矛盾。宽动态需要长帧和短帧两帧合成一帧,这本身就比普通模式多占一帧的时间。如果你还要保持高帧率,那就得压缩每帧的曝光时间。
举个例子:你要跑 30fps,每帧可用时间只有 33ms。宽动态模式下,长帧+短帧的总曝光时间不能超过这个值。如果你长帧放 20ms、短帧放 10ms,那还剩 3ms 给读出和合成,勉强够用。但如果你要跑 60fps,每帧只剩 16ms,长帧和短帧都得压缩,宽动态效果就会大打折扣。
我一般这样权衡:
- 室内场景:运动少,帧率可以降到 15fps~20fps,把更多时间留给长帧,宽动态效果最好。
- 室外场景:运动多,帧率至少 25fps,长帧不能超过 12ms,短帧控制在 2ms 以内。
- 交通抓拍:帧率 30fps 是底线,但长帧只能给 4ms~6ms,短帧 0.5ms~1ms,宽动态主要靠传感器本身的 HDR 能力。
典型场景参数模板
下面是我整理的一些典型场景参数模板。这些值不是死的,但可以作为调优的起点。你拿到一个新场景,先套用模板,再根据实际效果微调,能省不少时间。
| 场景类型 | 长帧曝光 | 短帧曝光 | 长帧增益 | 短帧增益 | 目标帧率 |
|---|---|---|---|---|---|
| 室内办公室 | 10ms~16ms | 1ms~2ms | 0dB~3dB | 12dB~18dB | 15fps~20fps |
| 地下车库出入口 | 12ms~20ms | 0.1ms~0.5ms | 3dB~6dB | 18dB~24dB | 15fps |
| 室外道路监控 | 4ms~8ms | 0.5ms~1ms | 0dB~3dB | 12dB~16dB | 25fps~30fps |
| 交通抓拍 | 2ms~4ms | 0.2ms~0.5ms | 0dB | 12dB~20dB | 30fps |
| 商场入口 | 8ms~12ms | 1ms~2ms | 3dB~6dB | 12dB~18dB | 20fps~25fps |
你可能会问:这些参数怎么来的?其实都是算出来的。以地下车库出入口为例,动态范围通常超过 100dB,长帧和短帧的曝光时间比值需要达到 100 倍以上。长帧 16ms、短帧 0.16ms,比值正好 100 倍。增益方面,短帧需要比长帧高 40dB(20×log10(100) = 40dB),但实际传感器增益上限通常只有 24dB,所以剩下的 16dB 要靠数字增益补。嗯,这里要注意——数字增益会放大噪声,所以能不用尽量不用。
这张图是我自己画的长帧短帧配置流程。你从场景分析开始,先确定动态范围需求,然后分别定长帧和短帧的曝光时间,接着算增益匹配,最后根据帧率要求做权衡。每一步都有明确的输入和输出,不会跑偏。
最后说一句:参数模板只是起点。每个场景的光线条件、运动特性、传感器型号都不一样。我建议你拿到一个新项目,先按模板跑一遍,然后用示波器看合成后的亮度直方图——如果暗部和亮部之间有明显断层,说明长帧和短帧的亮度没对齐,需要微调增益或曝光时间。嗯,调多了就有感觉了。