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图像中三种噪声的关系,以及它们在不同信号强度下的占比变化。

HDR图像噪声模型结构图 HDR图像噪声 光子噪声 读出噪声 量化噪声 光子噪声特性 • 信号依赖型 • 服从泊松分布 • 暗部影响最大 读出噪声特性 • 信号无关型 • 包含复位/1/f噪声 • 温度敏感 量化噪声特性 • ADC精度限制 • 均匀分布 • 暗部占比更大 总噪声模型:σ²_total = a·S + b a:光子噪声系数(含增益) | b:读出+量化噪声

2.6 噪声模型的工程应用

有了噪声模型,我们能做什么?我列几个实际场景:

  1. 去噪算法的参数自适应——根据信号强度S动态调整去噪强度。暗部用强去噪,亮部用弱去噪。
  2. 多帧合成的权重设计——不同曝光帧的噪声方差不同,合成权重应该反比于噪声方差。
  3. 暗部细节还原的置信度——根据噪声模型计算每个像素的SNR,低于阈值的区域不做过度增强。

一个实用的噪声标定流程:

  1. 拍摄一组均匀光照的灰阶卡(从暗到亮覆盖整个动态范围)
  2. 对每个灰阶区域计算像素值的均值和方差
  3. 用最小二乘法拟合 σ² = a·S + b
  4. 得到a和b后,就可以对任意HDR图像做噪声估计了