2. 多帧降噪原理:时域滤波的核心思想——信号相关,噪声无关
多帧降噪,说白了就是「拍很多张,然后叠在一起」。但为什么叠在一起就能变干净?这里面的核心逻辑,就是我要跟你聊的——信号相关,噪声无关。
我第一次接触这个思路,是在做手机夜景算法的时候。当时客户反馈暗光下照片噪点太多,单帧降噪已经压不住了。我试了各种空域滤波,效果都不理想。后来翻到一篇老,里面一句话点醒了我:「多帧平均,信噪比提升与帧数的平方根成正比。」嗯,从那以后,我就彻底入了多帧降噪的坑。
2.1 为什么噪声是「无关」的?
先想一个问题:你拍一张夜景,画面里有一盏路灯。这盏灯的位置是固定的,亮度也是固定的。但背景里的噪点呢?
- 信号(路灯):每一帧都在同一个位置,亮度几乎不变。
- 噪声(随机颗粒):每一帧的位置和强度都在随机变化。
这就是「信号相关,噪声无关」的物理基础。信号是确定性的,噪声是随机性的。你多拍几帧,信号会「叠加」起来,而噪声会「互相抵消」一部分。
核心公式(直观理解版)
假设每帧的信号强度为 S,噪声标准差为 σ。对 N 帧做平均后:
- 信号强度:S(不变)
- 噪声标准差:σ / √N
- 信噪比提升:√N 倍
拍 4 帧,信噪比翻倍;拍 9 帧,信噪比变 3 倍。这就是多帧降噪的数学底气。
2.2 时域滤波 vs 空域滤波
你可能会问:那我直接用空域滤波(比如高斯模糊)不行吗?行,但代价很大。
| 对比维度 | 空域滤波(单帧) | 时域滤波(多帧) |
|---|---|---|
| 信息来源 | 单张图像内的像素邻域 | 多张图像之间的像素对应 |
| 噪声抑制能力 | 有限,容易过平滑 | 强,可随帧数线性提升 |
| 细节保留 | 边缘模糊,纹理丢失 | 可保留高频细节 |
| 计算开销 | 低,单帧处理 | 高,需多帧对齐+融合 |
| 适用场景 | 轻度噪声、实时预览 | 夜景、长曝光、专业模式 |
我个人习惯是:能用多帧解决的问题,尽量不用空域硬扛。空域滤波就像用砂纸打磨——磨掉噪点的同时,也磨掉了纹理。而多帧降噪像叠照片——每张照片的细节都在,只是把随机颗粒「平均」掉了。
2.3 多帧降噪的完整流程
光知道原理还不够,落地才是硬道理。多帧降噪不是简单地把几帧像素加起来,它有一套标准流程。我把它拆成四个步骤:
- 采集:连续拍摄 N 帧(通常 4~8 帧,夜景模式可能到 12 帧以上)。
- 对齐:因为手持拍摄会有微小抖动,需要把每帧对齐到参考帧上。
- 融合:在对齐后的像素位置上,做加权平均或更复杂的融合策略。
- 后处理:对融合结果做轻微的锐化或色调映射,补偿融合带来的轻微模糊。
我曾经踩过一个坑:对齐没做好,直接做平均。结果画面里出现了重影,路灯变成了两个。嗯,那次之后我学乖了——对齐是多帧降噪的命门。
2.4 融合策略:不只是平均
最简单的融合就是算术平均。但实际工程中,我们很少直接用平均。为什么?因为不是所有像素都「值得」被平均。
举个例子:你拍夜景时,画面里有人走过。这个人只在其中一帧出现,其他帧没有。如果你直接平均,这个人会变成一个半透明的鬼影。这就是我前面说的重影问题。
所以,工业级的融合策略通常包含:
- 加权平均:根据像素的噪声水平或运动程度分配权重。运动大的区域权重低,甚至直接丢弃。
- 中值融合:对每个像素位置取 N 帧的中值。对椒盐噪声和异常值非常鲁棒。
- 双边时域滤波:结合像素值和位置差异,只融合「相似」的像素。细节保留最好,但计算量最大。
我的经验
在手机端做多帧降噪时,我一般用「加权平均 + 运动掩膜」的组合。先算一个运动概率图,运动大的区域权重降到接近 0,静止区域权重拉满。这样既保留了细节,又避免了重影。算力有限时,这是个性价比很高的方案。
2.5 帧数怎么选?
理论上帧数越多越好。但实际中,帧数受限于:
- 手持稳定性:帧数越多,总曝光时间越长,手抖导致的模糊越严重。
- 场景变化:夜景里可能有车灯、行人、树叶晃动。帧数越多,运动区域越大,对齐越困难。
- 存储和算力:8 帧 1200 万像素的 RAW 图,内存占用轻松超过 500MB。手机端扛不住。
| 场景 | 推荐帧数 | 理由 |
|---|---|---|
| 手持夜景(轻度抖动) | 4~6 帧 | 信噪比提升 2~2.5 倍,手持可接受 |
| 三脚架夜景 | 8~16 帧 | 无抖动限制,可最大化信噪比 |
| 运动场景(如街拍) | 3~4 帧 | 帧数过多会导致运动区域严重重影 |
| 天文摄影(星空) | 16~32 帧 | 信号极弱,需要大量叠加 |
注意
帧数不是越多越好。超过 8 帧后,信噪比提升的边际收益递减(√N 曲线变平),但对齐失败的风险线性增加。我一般建议:手持场景不超过 8 帧,三脚架场景不超过 16 帧。超过这个阈值,不如去优化单帧的曝光参数。
2.6 小结:记住这三句话
多帧降噪的原理,其实不复杂。你只要记住:
- 信号是相关的:每帧的景物内容一致,叠加后信号增强。
- 噪声是无关的:每帧的随机噪声独立,叠加后相互抵消。
- 对齐是前提:没有精确对齐,多帧降噪就是空谈。
我在做第一个多帧降噪项目时,花了整整两周调对齐算法。当时觉得进度太慢,后来才发现——对齐做得好,融合随便搞。这个教训,希望你别再踩一遍。