4. 噪声模型与特性分析

做HDR合成,最头疼的不是对齐,而是噪声。你想想看,多帧融合本来就是为了提信噪比,可要是连噪声的脾气都没摸透,融合完反而可能更糟。这一节,我们就来彻底拆解传感器噪声——它从哪来、长什么样、怎么随曝光变、又怎么在HDR里被放大。

4.1 传感器噪声的三大来源

传感器噪声,说白了就三类:光子散粒噪声、读出噪声、固定模式噪声。我习惯把它们分成“躲不开的”和“能校准的”。

噪声类型 物理来源 与信号的关系 能否校准
光子散粒噪声 光子到达的随机性 √信号 不能(物理极限)
读出噪声 模拟电路、ADC量化 常数(与信号无关) 部分可校准
固定模式噪声 像素工艺差异、暗电流 空间固定模式 可校准(DSNU/PRNU)

4.2 光子散粒噪声——躲不开的物理极限

光子到达传感器,本质是个泊松过程。你想想看,就算场景亮度完全恒定,每个像素收集到的光子数也会上下波动。这个波动,就是散粒噪声。

它的标准差等于信号电子数的平方根:

σ_shot = √(S)   (单位:e⁻)

其中 S 是信号电子数。

这意味着什么?信号越强,噪声值越大,但信噪比反而在提升:

SNR_shot = S / √S = √S

我在项目中遇到过一件事:用长曝光拍夜景,暗部全是颗粒感。当时团队有人怀疑是传感器坏了。其实不是,那就是散粒噪声——暗部信号只有几十个电子,√S 才个位数,信噪比自然低。

关键结论: 散粒噪声是HDR合成中暗帧噪声的主要来源。多帧融合能抑制它,但无法消除——因为它是时域随机的,帧间不相关。

4.3 读出噪声——电路里的“底噪”

读出噪声来自模拟电路和ADC量化过程。它跟信号大小没关系,是个固定底噪。我习惯叫它“传感器的本底噪声”。

典型值范围:

  • 消费级手机传感器:2~5 e⁻
  • 工业/安防传感器:1~3 e⁻
  • 科学级sCMOS:<1 e⁻

读出噪声在短曝光帧里特别要命。你想想看,短帧信号本来就弱,读出噪声再一叠加,信噪比直接崩了。这也是为什么HDR合成时,短曝光帧往往需要更强的去噪——不是因为它本身噪,而是读出噪声占比太高。

避坑提醒: 我曾经在项目中直接用短帧的原始数据做融合,结果高光区域边缘出现了一排排竖条纹。查了半天,是读出噪声里的列相关分量在作怪。后来加了列FPN校正才解决。

4.4 固定模式噪声——能校准的“指纹”

固定模式噪声(FPN)分两种:

  • DSNU(暗信号非均匀性): 无光照时,各像素暗电流不同导致的偏移差异。
  • PRNU(光响应非均匀性): 相同光照下,各像素增益不同导致的响应差异。

FPN的特点是空间固定、时域稳定。说白了,每个像素都有自己的“小脾气”——有的天生亮一点,有的暗一点。这个噪声在HDR里特别坑人,因为多帧融合时,如果FPN没校掉,它会像水印一样叠加到最终图像上。

校准方法其实不复杂:

// 暗场校正(DSNU)
I_corrected = I_raw - dark_frame

// 亮场校正(PRNU)
I_corrected = (I_raw - dark_frame) / flat_field

我建议在HDR流水线的最前端就做FPN校正。别等到融合完再校——那时候噪声已经被非线性映射扭曲了,校不准。

4.5 噪声与曝光时间的关系

曝光时间直接影响信号电子数,进而影响各类噪声的占比。我习惯用一张图来理解:

噪声分量 vs 曝光时间(固定光圈/ISO) 曝光时间(对数坐标) 噪声电子数 (e⁻) 短 长 读出噪声(常数) 散粒噪声 ∝ √(曝光) FPN ∝ 曝光(需校准) 短曝光:读出噪声主导 → 长曝光:散粒噪声主导 → 极长曝光:FPN开始显现

从图上能看出三个区间:

  • 短曝光区: 读出噪声占主导。信号弱,信噪比由读出噪声决定。
  • 中曝光区: 散粒噪声成为主角。信噪比随√信号提升。
  • 长曝光区: FPN开始抬头。如果不校准,空间噪声会肉眼可见。
实战技巧: 我一般用“读出噪声拐点”来选最短曝光帧。具体做法:拍一组暗帧,看哪个曝光时间下读出噪声不再下降,那就是传感器的极限。HDR的最短帧不要低于这个值。

4.6 噪声在HDR中的放大效应

这是本章最核心的部分。HDR合成时,噪声会被非线性映射放大。我见过太多人忽略这一点,结果合成完的图像噪点比单帧还多。

放大效应分三步:

  1. 线性域融合: 多帧加权平均,噪声按帧权重叠加。
  2. 非线性映射(tone mapping): 暗部被提亮,噪声同步放大。
  3. 空间域差异: 不同曝光帧的噪声特性不同,融合边界出现“噪声断层”。

举个例子:

假设短帧(1ms)读出噪声 5 e⁻,信号 100 e⁻ → SNR = 20
长帧(32ms)读出噪声 5 e⁻,信号 3200 e⁻ → SNR = 640

融合时,短帧权重 0.1,长帧权重 0.9
融合后噪声方差 = 0.1² × 5² + 0.9² × 5² ≈ 20.5 e⁻²
融合后信号 = 0.1×100 + 0.9×3200 = 2890 e⁻
融合后SNR ≈ 2890 / √20.5 ≈ 638

看起来不错?但tone mapping一上去,暗部提亮3倍,噪声也跟着放大3倍。

这就是为什么HDR合成后,暗部区域经常出现“彩色噪点”——那是短帧的读出噪声被tone mapping放大后,又经过色彩插值扩散的结果。

我曾经踩过的坑: 有一次做运动场景HDR,为了减少鬼影,我大幅降低了长帧的权重。结果合成图的高光区域干净了,但中间调全是颗粒。后来分析才发现,是短帧的读出噪声被tone mapping的局部对比度增强放大了。解决方案是:在tone mapping之前,对短帧做一次空间域去噪。

4.7 噪声特性总结表

噪声类型 时域特性 空域特性 HDR放大风险 应对策略
光子散粒噪声 帧间独立 均匀分布 中(随信号放大) 多帧融合、BM3D
读出噪声 帧间独立 可能有列模式 高(短帧被放大) 短帧预去噪、列校正
固定模式噪声 帧间固定 空间结构化 极高(融合后残留) 暗场/亮场校准