多曝光融合原理:长短帧曝光机制、线性与非线性融合、HDR合成算法概述
好,咱们进入第二章。上一章我们聊了为什么需要宽动态,这一章就直击核心——多曝光融合到底是怎么把高动态场景“装”进一张图里的。
我刚开始做ISP的时候,总觉得HDR不就是拍两张照片叠一起嘛。后来真上手才发现,这里面的坑,一个比一个深。曝光时间怎么配?融合权重怎么算?运动物体怎么处理?嗯,咱们一个一个来拆。
2.1 长短帧曝光机制
说白了,多曝光融合的思路很简单:
- 短帧:曝光时间短,捕捉亮部细节,避免过曝。
- 长帧:曝光时间长,捕捉暗部细节,避免欠曝。
然后把这俩(或者更多帧)合在一起,各取所长。
核心问题:曝光时间配比怎么定?
我在一个车载项目里遇到过,白天进出隧道,场景亮度差超过100dB。当时用了3帧曝光:
| 帧类型 | 曝光时间 | 目标区域 |
|---|---|---|
| 短帧 | 1/4000 s | 天空、车灯、高光反射 |
| 中帧 | 1/500 s | 建筑物、路面中间调 |
| 长帧 | 1/30 s | 隧道内部、阴影、车牌暗部 |
这个配比不是拍脑袋定的。我一般会先看传感器的动态范围和场景的直方图分布,再反推曝光时间。你想想看,如果长帧曝光时间太长,运动模糊就来了;太短,暗部又拉不起来。
经验值:两帧曝光时,曝光时间比通常在 1:16 ~ 1:64 之间。三帧时,每帧之间差 4~8 倍比较稳妥。
2.2 线性融合 vs 非线性融合
帧拍完了,怎么合?这里分两大流派。
2.2.1 线性融合
线性融合就是按权重直接加权平均。公式长这样:
I_out = w_short * I_short + w_long * I_long
权重通常根据像素亮度来定:
- 亮部:短帧权重大
- 暗部:长帧权重大
- 中间:两边平滑过渡
我曾经在一个监控项目里试过纯线性融合。优点是简单、计算量小、FPGA实现容易。但缺点也很明显——过渡区容易出现“鬼影”,而且整体对比度偏平。
注意:线性融合对运动物体极不友好。如果场景里有行人或车辆移动,长短帧拍到的位置不一样,融合后就会出现半透明重影。这就是所谓的“鬼影”问题。
2.2.2 非线性融合
非线性融合就聪明多了。它不是简单加权,而是根据局部纹理、边缘、运动状态来动态调整融合策略。
常见方法包括:
- 拉普拉斯金字塔融合:把图像分解成不同频带,每个频带单独融合。低频用长帧,高频用短帧,保留细节。
- 基于引导滤波的融合:用引导滤波做权重平滑,边缘保持得好。
- 基于运动检测的融合:先检测运动区域,运动区域只用单帧,静止区域才做融合。
我个人的习惯是,在FPGA资源允许的情况下,优先用拉普拉斯金字塔。虽然消耗的BRAM和DSP多一些,但效果确实好。尤其是拍那种有树叶晃动、水面波纹的场景,非线性融合能明显减少鬼影。
2.3 HDR合成算法概述
聊完融合方式,咱们看看业界主流的HDR合成算法。我按实现复杂度排了个序:
| 算法 | 复杂度 | 效果 | FPGA友好度 |
|---|---|---|---|
| 简单加权平均 | 低 | 一般 | ★★★★★ |
| 基于直方图的权重分配 | 中 | 较好 | ★★★★ |
| 拉普拉斯金字塔融合 | 高 | 优秀 | ★★★ |
| 基于深度学习的融合 | 极高 | 最佳 | ★ |
为什么会这样?我解释一下:
- 简单加权平均:适合静态场景、低端IPC。我早期做USB摄像头时就用这个,够用。
- 基于直方图的权重分配:先统计每帧的直方图,根据亮度分布动态调权重。比固定权重灵活,但遇到大面积运动还是不行。
- 拉普拉斯金字塔:多频带融合,细节保留最好。我在一个高端安防项目里用过,效果惊艳,但FPGA资源吃紧。
- 深度学习:目前效果最好,但基本告别纯FPGA实现。一般是ARM+NPU或者GPU来做。
我的建议:如果是做车载或安防的实时ISP,优先考虑拉普拉斯金字塔 + 运动检测的组合。效果和资源之间比较平衡。
2.4 多曝光融合的完整流程
下面这张图是我自己总结的,基本覆盖了从传感器输出到最终HDR图像的完整链路:
这个流程里,我最想强调的就是“对齐”这一步。很多新手以为传感器输出直接就能合,其实不然。长短帧之间可能有微小的位移(尤其是手持设备),必须先做图像配准。我在FPGA里一般用基于特征点的快速匹配,或者直接用光流法做运动补偿。
2.5 避坑指南
最后,分享几个我踩过的坑:
- 曝光时间切换时的闪烁:如果传感器在长短帧之间切换曝光时间,LED光源(尤其是工频50Hz/60Hz)会出现亮度跳变。解决办法是锁定曝光行数,或者做防频闪检测。
- 运动鬼影:这是HDR最大的敌人。我曾经在一个项目中,因为没做运动检测,结果拍出来的行人像“灵魂出窍”一样。后来加了基于帧差的运动掩膜,才解决。
- 融合后的颜色偏移:长短帧的增益不同,白平衡可能不一致。融合前一定要做色彩对齐,否则合出来的图偏色严重。
- FPGA资源瓶颈:拉普拉斯金字塔需要多级缓存,BRAM消耗很大。我建议先做资源评估,再决定用几层金字塔。一般3~4层就够用了。
重要提醒:多曝光融合不是万能的。如果场景动态范围超过传感器的物理极限(比如120dB以上),再好的融合算法也救不了。这时候要考虑传感器本身的HDR模式,比如双增益转换或者多斜率曝光。
好了,这一章就到这里。多曝光融合是HDR的基石,理解透了,后面讲帧同步和硬件流水线设计就顺了。