第三章 多帧合成HDR:短帧与长帧的曝光策略、运动伪影处理、鬼影消除算法
3.1 曝光策略:短帧与长帧的博弈
多帧合成HDR,说白了就是拍两张或三张不同曝光的照片,然后合成一张。短帧保高光,长帧提暗部。这个道理大家都懂,但真正落地时,坑多得很。
我个人习惯,先把曝光比定下来。两帧合成的话,曝光差通常在12dB到24dB之间。三帧合成,中间帧做基准,上下各差12dB。举个例子,基准帧曝光时间10ms,短帧就2.5ms,长帧40ms。这样动态范围能扩到100dB以上。
但这里有个关键点——长帧的噪声。我在项目中遇到过,长帧曝光时间一长,暗部噪声像雪花一样。你想想看,暗部提亮后,噪声也跟着放大。所以长帧的增益不能太高,我一般控制在ISO 800以内,实在不行就靠多帧降噪来补。
短帧呢?短帧容易欠曝,尤其是高光区域。但短帧的SNR本来就差,合成时权重得压低。我常用的策略是:
- 短帧:只贡献高光区域,权重曲线从中间灰度开始下降
- 长帧:贡献中低亮度区域,权重曲线在暗部最高
- 中间帧:做融合过渡,避免合成边界出现断层
嗯,这里要注意,曝光策略不是死的。场景不同,策略就得调。比如夜景,长帧曝光时间可以拉到100ms以上,但得配合防抖。白天强逆光,短帧得再短一点,防止高光溢出。
核心原则:短帧保细节,长帧保信噪比。两者权重曲线在中间灰度区域平滑过渡,避免合成后出现亮度跳变。
3.2 运动伪影:多帧合成的头号敌人
多帧合成最怕什么?运动。你拍三张照片,中间有物体移动了,合成出来就是重影。我刚开始做HDR时,被这个坑惨了。
运动伪影分两种:
- 全局运动:相机抖动、平移。这个靠全局配准能解决大部分。
- 局部运动:行人、车辆、树叶晃动。这个才是真正的难题。
全局运动,我一般用特征点匹配加仿射变换。SIFT太慢,ORB精度不够,折中方案用AKAZE。匹配后计算单应性矩阵,把长帧和短帧对齐到中间帧的坐标系。这一步做完,大部分抖动就消除了。
但局部运动呢?你没法用全局变换去对齐一个移动的人。这时候就得靠运动检测。
我常用的方法是:
- 计算帧间差异图,用绝对值差或结构相似度
- 对差异图做阈值分割,标记出运动区域
- 运动区域内的像素,只从某一帧取,或者降低权重
举个例子,短帧和长帧中,同一个像素点亮度差超过30个灰度级,我就认为这里有运动。然后这个像素只从短帧取——因为短帧曝光时间短,运动模糊小。
注意:运动检测的阈值不能太死。太严了,噪声会被误判为运动,导致合成后暗部闪烁。太松了,运动伪影又消不掉。我一般设一个自适应阈值,根据局部噪声水平动态调整。
3.3 鬼影消除算法:从入门到实战
鬼影,就是运动物体在多帧合成后留下的半透明残影。说白了,是运动检测没做干净,或者融合策略太粗暴。
我接触过的鬼影消除算法,大致分三代:
| 代际 | 核心思路 | 优缺点 |
|---|---|---|
| 第一代 | 基于帧差法的运动区域检测 + 单帧替换 | 简单快速,但容易漏检或误检 |
| 第二代 | 基于光流或块匹配的运动补偿 | 精度高,但计算量大,实时性差 |
| 第三代 | 基于深度学习的分割 + 融合 | 效果最好,但需要大量训练数据 |
实际项目中,我用的最多的是第二代算法的变种——分层运动补偿。具体做法是:
- 把图像分成8x8或16x16的块
- 对每个块做运动估计,计算运动矢量
- 根据运动矢量的大小和方向,把块分成静态、慢速运动、快速运动三类
- 静态块正常融合,慢速运动块做加权平均,快速运动块只取短帧
这样处理,既保留了静态区域的HDR效果,又避免了快速运动物体的鬼影。慢速运动区域虽然有点模糊,但人眼对运动物体的细节不敏感,可以接受。
我曾经在一个安防项目中,遇到树叶晃动的场景。第一代算法把整棵树都当成运动区域,结果暗部细节全丢了。后来改用分层运动补偿,只把晃动的树叶边缘标记为运动,树干和背景正常融合,效果好了很多。
小技巧:运动检测时,可以结合边缘信息。运动物体的边缘通常比较锐利,而噪声的边缘是随机的。用Canny算子提取边缘后再做运动检测,能有效降低误检率。
3.4 实战中的避坑指南
做多帧合成HDR,有几个坑我踩过,分享给大家:
- 曝光时间差太大:长帧和短帧的曝光时间差超过4倍时,合成后容易出现亮度断层。我建议控制在2-3倍之间。
- 运动检测的时域一致性:单帧的运动检测结果不稳定,容易闪烁。我一般做3-5帧的时域滤波,让运动标记平滑变化。
- 合成后的色调映射:多帧合成后的线性数据,动态范围可能超过100dB,直接显示会丢失细节。必须配合色调映射(Tone Mapping)压缩到8bit或10bit。
- 长帧的暗部提亮:长帧暗部提亮后,噪声会被放大。我建议在合成前对长帧做一次空域降噪,或者用BM3D算法。
嗯,最后说一句。多帧合成HDR不是万能的。遇到高速运动物体,比如飞鸟、赛车,还是得靠单帧HDR或者传感器本身的HDR模式。多帧合成更适合静态或慢速运动场景,比如风景、建筑、室内。
我曾经在一个项目中,客户非要拿多帧合成拍跑步的人,结果鬼影怎么都消不掉。后来我建议他改用单帧HDR,虽然动态范围小了点,但至少没有鬼影。所以,选对工具比调好参数更重要。