多帧降噪基础:噪声来源与信噪比提升
各位同学,今天我们来聊聊多帧降噪的根基——噪声到底从哪来,以及为什么多帧能搞定它。
我做计算摄影这些年,最深的体会就是:不懂噪声,就别谈降噪。你想想看,如果连敌人长什么样都不知道,怎么打?
噪声来源分析
传感器上的噪声,说白了就三大类。我一个个说。
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帧降噪后,画面确实干净了,但运动物体拖影严重。后来才明白,多帧降噪必须在「降噪效果」和「运动鲁棒性」之间做权衡。
下面这张图展示了多帧降噪的核心流程:
流程其实不复杂:先拍多帧,然后对齐(防止手抖或运动),最后融合。融合时,信号叠加,噪声抵消。
但这里有个关键点:对齐必须准。如果对齐不准,融合后边缘会模糊,那就得不偿失了。
我的建议:实际项目中,先做粗对齐(陀螺仪数据),再做精对齐(光流或块匹配)。别一上来就跑光流,计算量太大,手机扛不住。