多曝光融合原理:长短帧曝光机制、线性与非线性融合、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图像的完整链路:

多曝光融合流程图 多曝光融合硬件处理流程 传感器 RAW 输入 长短帧分离 & 对齐 短帧:亮部权重计算 长帧:暗部权重计算 多频带融合 (拉普拉斯金字塔 / 引导滤波) HDR 图像输出 关键:运动检测模块需要在融合前介入,标记运动区域,避免鬼影

这个流程里,我最想强调的就是“对齐”这一步。很多新手以为传感器输出直接就能合,其实不然。长短帧之间可能有微小的位移(尤其是手持设备),必须先做图像配准。我在FPGA里一般用基于特征点的快速匹配,或者直接用光流法做运动补偿。

2.5 避坑指南

最后,分享几个我踩过的坑:

  • 曝光时间切换时的闪烁:如果传感器在长短帧之间切换曝光时间,LED光源(尤其是工频50Hz/60Hz)会出现亮度跳变。解决办法是锁定曝光行数,或者做防频闪检测。
  • 运动鬼影:这是HDR最大的敌人。我曾经在一个项目中,因为没做运动检测,结果拍出来的行人像“灵魂出窍”一样。后来加了基于帧差的运动掩膜,才解决。
  • 融合后的颜色偏移:长短帧的增益不同,白平衡可能不一致。融合前一定要做色彩对齐,否则合出来的图偏色严重。
  • FPGA资源瓶颈:拉普拉斯金字塔需要多级缓存,BRAM消耗很大。我建议先做资源评估,再决定用几层金字塔。一般3~4层就够用了。

重要提醒:多曝光融合不是万能的。如果场景动态范围超过传感器的物理极限(比如120dB以上),再好的融合算法也救不了。这时候要考虑传感器本身的HDR模式,比如双增益转换或者多斜率曝光。

好了,这一章就到这里。多曝光融合是HDR的基石,理解透了,后面讲帧同步和硬件流水线设计就顺了。