多帧降噪基础:噪声来源与信噪比提升

各位同学,今天我们来聊聊多帧降噪的根基——噪声到底从哪来,以及为什么多帧能搞定它。

我做计算摄影这些年,最深的体会就是:不懂噪声,就别谈降噪。你想想看,如果连敌人长什么样都不知道,怎么打?

噪声来源分析

传感器上的噪声,说白了就三大类。我一个个说。

1. 光子噪声(Shot Noise)

这是最根本的噪声,躲不掉的。光本身是由一个个光子组成的,到达传感器的数量服从泊松分布。什么意思呢?就是同一场景、同一曝光,每次到达的光子数都不一样。

我记得刚入行时,总觉得暗光下噪点多是因为传感器不行。后来才明白,光子噪声是物理极限,跟传感器质量无关。

关键公式:光子噪声的标准差 = √(信号强度)。信号越强,噪声值越大,但信噪比反而越高。

举个例子:

信号强度(光子数) 噪声标准差 信噪比(dB)
100 10 20
10,000 100 40
1,000,000 1,000 60

看到没?信号强了,信噪比自然就上去了。这就是为什么白天拍照噪点少,晚上噪点多——不是传感器变差了,是光子不够用。

2. 读出噪声(Read Noise)

这个就好玩了。光子被传感器捕获后,要转换成电压信号,再经过模数转换变成数字值。每一步都会引入噪声。

我遇到过最坑的一次,是某款传感器的读出噪声在增益提高时反而暴增。查了三天才发现是电源纹波的问题。嗯,这里要注意:读出噪声跟ISO设置强相关。

  • 低ISO(原生ISO):读出噪声最小,动态范围最大
  • 高ISO:读出噪声被放大,但光子噪声也被放大,整体信噪比变化复杂

我的习惯:能低ISO就低ISO。高ISO本质上是把信号和噪声一起放大,并不会提升信噪比,只是让你在暗光下能看清东西而已。

3. 热噪声(Thermal Noise / Dark Current)

温度每升高6-8°C,暗电流翻倍。这就是为什么手机拍长曝光,画面会越来越「热」。

我曾经在夏天户外做测试,手机背面烫得能煎鸡蛋。长曝光30秒,画面右下角全是红绿噪点——那就是热噪声的杰作。

三种噪声对比一下:

噪声类型 来源 与信号关系 能否消除
光子噪声 光的量子特性 √信号 物理极限,不可消除
读出噪声 电路转换 固定值(与信号无关) 可通过电路设计降低
热噪声 温度导致的暗电流 随时间累积 可降温或短曝光

多帧降噪的核心思想

好了,知道噪声长什么样了。那怎么对付它?

核心思想就一句话:拍多张,然后平均。

你可能会说:「就这么简单?」

嗯,原理确实简单,但实现起来坑很多。我先说原理。

假设你拍一张照片,信号是S,噪声是N。信噪比就是S/N。

现在你拍M张同样的照片,每张的信号都是S,但噪声是独立的(每次都不一样)。你把M张加起来:

  • 信号:S × M(线性叠加)
  • 噪声:√(N₁² + N₂² + ... + Nₘ²) ≈ √M × N(因为噪声是随机的,叠加后是平方和开根号)

所以信噪比变成了:

SNR_多帧 = (S × M) / (√M × N) = √M × (S/N) = √M × SNR_单帧

说白了,拍4帧,信噪比翻倍;拍16帧,信噪比翻4倍。

我做过一个项目,用32帧降噪,暗部细节提升肉眼可见。但代价是——你得保证这32帧之间没有运动。否则就糊了。

信噪比提升原理

刚才的公式大家记住了吧?我再展开说说实际中的表现。

假设单帧信噪比是20dB(这已经算不错的暗光表现了):

帧数M 信噪比提升(dB) 最终信噪比(dB)
1 0 20
4 6 26
8 9 29
16 12 32
32 15 35

看到规律了吗?帧数翻倍,信噪比提升3dB。但代价是存储和计算量也翻倍。

我曾经踩过的坑:以为帧数越多越好。结果32帧降噪后,画面确实干净了,但运动物体拖影严重。后来才明白,多帧降噪必须在「降噪效果」和「运动鲁棒性」之间做权衡。

下面这张图展示了多帧降噪的核心流程:

多帧降噪核心流程 帧 1 帧 2 帧 3 帧 M 运动对齐 光流 / 块匹配 时域融合 加权平均 中值 / 双边 输出 核心:M帧独立噪声叠加后,信噪比提升 √M 倍

流程其实不复杂:先拍多帧,然后对齐(防止手抖或运动),最后融合。融合时,信号叠加,噪声抵消。

但这里有个关键点:对齐必须准。如果对齐不准,融合后边缘会模糊,那就得不偿失了。

我的建议:实际项目中,先做粗对齐(陀螺仪数据),再做精对齐(光流或块匹配)。别一上来就跑光流,计算量太大,手机扛不住。