2. 噪声源分析:HDR图像中的噪声类型与模型建立
做HDR图像处理,第一件事不是调算法,而是搞清楚——噪声到底从哪来的。
我早年接手过一个项目,客户抱怨暗部全是彩色噪点,怎么降噪都去不干净。我花了三天排查,最后发现是传感器读出电路的设计问题。嗯,从那以后我养成了一个习惯:拿到一张HDR图,先问三个问题——什么传感器、什么ISO、什么曝光策略。
这一节,我们就来拆解HDR图像里的三种核心噪声。你只有知道它们长什么样、怎么产生的,才能对症下药。
2.1 光子噪声(Photon Shot Noise)
光子噪声,说白了是光的量子特性带来的。光不是连续的,是一颗一颗光子砸到传感器上。每颗光子到达的时间和位置都是随机的。
你想想看,如果某个像素在1/30秒内平均应该收到1000个光子,那实际收到的可能是980,也可能是1020。这个波动,就是光子噪声。
关键公式(泊松分布):
光子噪声的方差 = 信号强度(光子数)
信噪比 SNR = 信号 / √信号
信号越强,SNR越高;暗部信号弱,SNR自然低。
我在项目中遇到过最典型的场景:长曝光HDR的暗部区域。明明曝光时间已经拉长了,暗部还是颗粒感明显。为什么?因为暗部光子数本来就少,泊松噪声的相对占比就大。
实战要点:
- 光子噪声是信号依赖型噪声——亮区噪声值大,但相对值小;暗区噪声值小,但相对值大
- HDR的多帧合成中,不同曝光帧的光子噪声分布不同,不能简单平均
- 暗部细节还原时,光子噪声是主要限制因素之一
2.2 读出噪声(Readout Noise)
读出噪声,是传感器把电荷转换成电压、再转换成数字信号的过程中引入的。它跟信号强度无关,是电路本身的底噪。
我记得有一次调试一款工业相机,暗电流补偿做得很好,但暗部还是有一层固定的“底噪纹理”。后来发现是读出电路的参考电压不稳定导致的。
| 噪声类型 | 来源 | 特性 | 对HDR的影响 |
|---|---|---|---|
| 复位噪声 | 像素复位时电容上的热噪声 | 低频、固定模式 | 暗部出现固定条纹 |
| 1/f噪声 | 晶体管沟道中的载波捕获/释放 | 低频、随时间漂移 | 长曝光时暗部不均匀 |
| ADC量化噪声 | 模数转换的量化误差 | 均匀分布、信号无关 | 限制暗部动态范围 |
避坑指南:
我曾经在HDR多帧合成时,直接把三帧图像做加权平均。结果暗部出现了明显的带状噪声。后来才发现,不同曝光帧的读出噪声分布不一样——短曝光帧的读出噪声被放大后,在暗部形成了伪影。
正确做法:先做读出噪声的暗场校正,再做合成。
2.3 量化噪声(Quantization Noise)
量化噪声,是ADC把模拟信号转成数字信号时,因为精度有限而产生的舍入误差。说白了,就是“数字世界永远无法完美表示模拟世界”。
举个例子:一个12位ADC,动态范围是0-4095。如果某个像素的真实电压对应4095.6,那ADC只能输出4095,那0.6的误差就是量化噪声。
在HDR场景中,量化噪声的影响尤其明显。为什么?因为HDR需要同时保留亮部和暗部细节。如果ADC的位数不够,暗部的量化步长相对信号来说就太大了。
量化噪声的数学描述:
量化步长 Δ = Vmax / 2N
量化噪声功率 = Δ² / 12
其中 N 是ADC位数,Vmax 是满量程电压
每增加1位ADC,量化噪声功率降低约6dB
我个人习惯在HDR项目中,至少使用14位以上的ADC。如果只能用12位,那就必须配合多帧合成或空间抖动来“伪提升”位深。
2.4 噪声模型建立
把上面三种噪声整合起来,就得到了HDR图像的完整噪声模型。我一般用这个公式来描述:
总噪声方差 = 光子噪声方差 + 读出噪声方差 + 量化噪声方差
σ²_total = σ²_shot + σ²_read + σ²_quant
其中:
σ²_shot = α · S (S为信号强度,α为量子效率相关常数)
σ²_read = β (β为读出噪声方差,与信号无关)
σ²_quant = Δ² / 12 (Δ为量化步长)
这个模型看起来简单,但实际应用时要注意几个坑:
- 光子噪声的α系数在不同ISO下会变化——高ISO时增益放大,光子噪声也被放大
- 读出噪声的β不是完全恒定的——温度升高时β会增大
- 量化噪声在暗部区域占比更大——因为信号S很小,Δ/12的相对影响就大了
实战中的模型简化:
我一般把噪声模型简化为:
σ²_total = a · S + b
其中a包含了光子噪声和增益的影响,b包含了读出噪声和量化噪声。
这个简化模型在大多数HDR去噪算法中已经够用了。你只需要通过标定得到a和b的值。
2.5 噪声模型的可视化
下面这张图展示了HDR图像中三种噪声的关系,以及它们在不同信号强度下的占比变化。
2.6 噪声模型的工程应用
有了噪声模型,我们能做什么?我列几个实际场景:
- 去噪算法的参数自适应——根据信号强度S动态调整去噪强度。暗部用强去噪,亮部用弱去噪。
- 多帧合成的权重设计——不同曝光帧的噪声方差不同,合成权重应该反比于噪声方差。
- 暗部细节还原的置信度——根据噪声模型计算每个像素的SNR,低于阈值的区域不做过度增强。
一个实用的噪声标定流程:
- 拍摄一组均匀光照的灰阶卡(从暗到亮覆盖整个动态范围)
- 对每个灰阶区域计算像素值的均值和方差
- 用最小二乘法拟合 σ² = a·S + b
- 得到a和b后,就可以对任意HDR图像做噪声估计了