2、多帧融合技术概述
好,咱们进入正题。多帧融合,说白了就是——拍多张,合成一张。
你可能会问:拍一张不就行了,干嘛费劲拍好几张?嗯,这里有个关键问题:夜景太暗了。单张照片要么噪点满天飞,要么糊成一片。多帧融合就是来解决这个矛盾的。
2.1 什么是多帧融合
多帧融合,也叫多帧合成或多帧叠加。它是指:在短时间内连续拍摄多张同一场景的照片,然后通过算法将它们合并成一张画质更好的照片。
我习惯把它比作「信息拼图」。每一帧都携带了场景的部分信息——有的帧细节清晰但噪点多,有的帧亮度均匀但边缘模糊。融合算法要做的,就是把每帧的「优点」挑出来,拼成一张完整的、高质量的图像。
核心思想:用时间换质量。多花几十毫秒的拍摄时间,换来信噪比提升 6-12dB、动态范围扩展 2-3EV。
举个例子。我在项目中调试过一款旗舰机的夜景模式,默认拍 6 帧。用户按下快门后,手机其实在 0.3 秒内连拍了 6 张。你看到的成片,是这 6 张融合后的结果。单看其中任何一帧,噪点都挺明显的,但融合后画面干净多了。
2.2 为什么需要多帧融合
原因其实就三个字:不够用。
单帧夜景的痛点,我列个表你就明白了:
| 问题 | 单帧表现 | 多帧融合如何解决 |
|---|---|---|
| 噪点多 | ISO 3200 以上,暗部全是彩色噪点 | 多帧平均,随机噪声被抑制,信噪比提升 √N 倍 |
| 动态范围窄 | 高光过曝、暗部死黑,细节全丢 | 不同曝光帧互补,亮暗细节都能保留 |
| 手持模糊 | 快门一慢,手一抖,画面就糊 | 短曝光多帧 + 对齐,等效长曝光但不糊 |
| 细节不足 | 暗部纹理被噪声淹没,完全看不清 | 多帧信息叠加,纹理信噪比提升,细节更清晰 |
我曾经踩过一个坑:某款机型在极暗光下(0.1 lux),单帧 ISO 飙到 6400,画面基本没法看。后来改用 8 帧融合,每帧 ISO 降到 800,融合后信噪比提升了将近 9dB。效果立竿见影。
小提示:多帧融合不是万能的。如果场景中有快速运动物体(比如行人、车灯),融合后可能出现鬼影。这时候就需要运动检测和去鬼影算法来兜底。后面章节我会详细讲。
2.3 多帧融合的基本流程
多帧融合的流程,我习惯分成 5 步。你想想看,就像做一道菜:先备料、再预处理、然后下锅、调味、最后装盘。每一步都有讲究。
- 多帧采集:连续拍摄 N 帧(通常 4-8 帧),每帧曝光参数可能不同(短曝光、中曝光、长曝光)。
- 帧对齐:由于手持抖动或场景运动,帧与帧之间存在偏移。需要做全局对齐(仿射变换)和局部对齐(光流)。
- 运动检测:找出帧间不一致的区域(运动物体、闪烁光源),生成运动掩膜,防止融合时出现鬼影。
- 融合合成:将对齐后的帧按权重叠加。权重取决于像素的亮度、梯度、噪声水平等。常见方法有:均值融合、金字塔融合、基于噪声模型的加权融合。
- 后处理:融合后的图像可能还有残留噪声或伪影,需要做去噪、锐化、色调映射等。
下面这张图,是我自己画的多帧融合流程框架,你看一眼就能记住整体脉络:
2.4 各步骤的要点与坑
流程看着简单,但每个步骤都有不少细节。我挑几个重点说说:
多帧采集
采集策略直接影响融合效果。我常用的策略有两种:
- 固定曝光:所有帧曝光参数相同,适合静态场景,融合后信噪比提升明显。
- 多曝光:短帧保高光、长帧提暗部,适合大光比场景(比如夜景灯光)。
注意:帧数不是越多越好。帧数多了,总拍摄时间变长,手持抖动和运动模糊的风险也增加。我一般控制在 4-8 帧,超过 10 帧收益递减明显。
帧对齐
对齐精度直接影响融合质量。我见过不少项目,融合效果差,查到最后发现是对齐没做好。
- 全局对齐:用仿射变换或单应性矩阵,补偿旋转和缩放。适合整体偏移。
- 局部对齐:用光流法,逐像素对齐。适合有局部运动的场景(比如树叶晃动)。
我个人习惯先做全局对齐,再做局部对齐。这样效率高,精度也够。
运动检测
运动检测的目的是生成「运动掩膜」——标记出哪些区域有运动。融合时,运动区域的权重降低,或者直接用某一帧替换,避免鬼影。
我曾经遇到一个场景:夜景中有人挥手,融合后手臂变成了半透明的「鬼影」。后来加了运动检测,把运动区域的融合权重降到 0,只用单帧,问题就解决了。
融合合成
融合不是简单的平均。我常用的方法是:
- 基于噪声模型的加权融合:根据每帧的噪声水平分配权重。噪声低的帧权重大,噪声高的帧权重小。
- 金字塔融合:在多个尺度上融合,低频用平均,高频用选择(选梯度最大的)。能保留更多细节。
经验之谈:融合权重不要用硬阈值,用软权重(0-1 连续值)。硬阈值容易在边界处产生接缝,软权重过渡自然。
后处理
融合后的图像,通常还有少量残留噪声。我习惯用非局部均值去噪(NLM)或 BM3D 做最后一步清理。然后做一次自适应锐化,让纹理更清晰。
2.5 小结
多帧融合的核心逻辑,其实就是「取长补短」。每一帧都有它的长处和短处,融合算法就是要把长处留下来、把短处去掉。
你记住这 5 步流程:采集 → 对齐 → 检测 → 融合 → 后处理。后面几章,我会把每一步拆开细讲,包括具体的算法原理和代码实现。