3. 噪声模型:光子散粒噪声、读出噪声、固定模式噪声(FPN)、噪声的泊松-高斯模型

做RAW域HDR处理,第一关就是跟噪声打交道。我刚开始接触这个领域时,总觉得去噪就是“磨皮”,把画面弄干净就行。后来被现实狠狠教育了一顿——噪声是有“性格”的,不同来源的噪声,行为完全不同。

你想想看,一张RAW图里的噪点,有些是随机的,有些是固定的,有些跟信号强度有关,有些跟温度有关。如果不把它们分开处理,去噪就会变成一场灾难。要么细节全没了,要么噪声纹丝不动。

这一章,我们就来拆解HDR成像中最常见的三种噪声,以及它们组合成的泊松-高斯模型。

3.1 光子散粒噪声:物理极限

光子散粒噪声,说白了就是光的量子特性带来的。光是由一个个光子组成的,到达传感器的数量不是完全均匀的。就像下雨天接雨水,每个雨滴落下的位置是随机的。

这个噪声有个关键特性:它跟信号强度是绑定的。信号越强,散粒噪声的值越大,但信噪比反而越高。为什么?

  • 散粒噪声的标准差 = √(信号电子数)
  • 信噪比 = 信号 / √(信号) = √(信号)

所以,暗光下散粒噪声最要命。信号只有100个电子时,噪声就有10个电子,信噪比只有10。信号到10000个电子时,噪声100个电子,信噪比到了100。

核心理解:散粒噪声是物理极限,你没法消除它,只能通过增加光子数(延长曝光、增大光圈)来提升信噪比。HDR多帧合成的本质,就是在不同曝光下收集更多光子。

我在项目中遇到过一个问题:用长曝光拍夜景,散粒噪声确实小了,但运动物体糊了。这就是HDR必须做多帧的原因——既要短曝光保细节,又要长曝光提信噪比。

3.2 读出噪声:电路的天花板

读出噪声是传感器读出电路引入的。它跟信号强度无关,是一个固定底噪。你拍全黑画面,看到的那些颗粒感,主要就是读出噪声。

读出噪声的来源很杂:

  • 像素内放大器的热噪声
  • 模数转换器的量化噪声
  • 列放大器之间的失配
  • 电源纹波耦合

现代CMOS传感器的读出噪声已经能做到1-3个电子,但老一点的传感器或者高帧率模式,读出噪声可能到10个电子以上。

传感器类型 典型读出噪声 (e-) 适用场景
高端科学CMOS 1.0 - 1.5 天文、显微
消费级手机CMOS 2.0 - 5.0 日常拍照
高速CMOS 8.0 - 15.0 高速摄影
老式CCD 10.0 - 20.0 工业检测

避坑指南:我曾经在调试一款手机HDR算法时,发现暗部去噪效果总是不理想。折腾了两周,最后发现是读出噪声模型参数设错了。传感器在不同增益下,读出噪声是不一样的。高增益模式下,读出噪声会被放大,这个一定要在标定阶段测清楚。

3.3 固定模式噪声(FPN):传感器的“指纹”

FPN跟前面两种噪声完全不同。它不是随机的,而是固定的。每个像素都有自己独特的偏置和增益偏差,拍出来的图像就像盖了个“指纹”。

FPN分两种:

  1. 列FPN:整列像素有相同的偏移,表现为竖条纹
  2. 像素FPN:每个像素独立偏移,表现为固定颗粒感

FPN的来源主要是制造工艺的偏差。两个相邻的像素,哪怕设计一模一样,实际的光电转换效率、暗电流、读出路径都会有微小差异。

好消息是,FPN是固定的,可以通过标定来校正。坏消息是,FPN会随温度、增益、曝光时间变化。你不可能只做一次标定就一劳永逸。

注意:FPN在HDR合成中特别容易出问题。多帧对齐后,如果FPN没有被正确校正,合成结果会出现固定的网格状伪影。我见过不少团队在这个坑里栽跟头。

3.4 泊松-高斯模型:统一框架

好了,三种噪声都认识了。但实际处理时,我们不可能分开处理每一种噪声。需要一个统一的数学模型。

泊松-高斯模型就是干这个的。它把噪声拆成两部分:

  • 泊松部分:对应光子散粒噪声,方差与信号成正比
  • 高斯部分:对应读出噪声 + FPN残差,方差恒定

数学表达式很简单:

观测值 = 真实信号 + 泊松噪声 + 高斯噪声

方差模型:
σ²(y) = y · K_shot + K_read²

其中:
y = 观测像素值(已去除黑电平)
K_shot = 散粒噪声增益系数
K_read = 读出噪声标准差(含FPN残差)

这个模型为什么好用?因为它把复杂的噪声行为浓缩成了两个参数。你只需要标定K_shot和K_read,就能预测任意信号强度下的噪声水平。

我个人习惯在标定时拍一组平场(均匀光照的灰卡),从暗到亮拍20-30张,然后逐像素统计均值和方差,最后拟合出这两个参数。

3.5 噪声模型在HDR中的应用

有了噪声模型,HDR处理就有了“眼睛”。具体怎么用?

  1. 多帧融合权重计算:根据每帧的噪声水平,给信噪比高的帧更大的权重
  2. 去噪强度自适应:暗部噪声大,去噪强一点;亮部噪声小,去噪弱一点
  3. 细节保护:在噪声水平低于人眼感知阈值的区域,完全不做去噪

举个例子,HDR合成时,短曝光帧的暗部噪声很大,长曝光帧的亮部可能饱和。噪声模型能告诉你:短曝光帧的暗部不可信,长曝光帧的亮部不可用。这样融合时就不会把噪声和饱和区域混进来。

关键洞察:去噪和细节的权衡,本质上是在噪声方差和信号方差之间找平衡。噪声模型给了你一把尺子,让你知道哪些地方该“用力”,哪些地方该“收手”。

3.6 噪声模型的可视化

下面这张图展示了泊松-高斯模型下,噪声标准差随信号强度的变化关系。你可以看到,暗部噪声主要由读出噪声主导,亮部噪声主要由散粒噪声主导。

泊松-高斯噪声模型:噪声标准差 vs 信号强度 信号强度 (电子数) 0 2500 5000 7500 10000 噪声标准差 (电子数) 0 25 50 75 100 读出噪声 (σ=10e-) 散粒噪声 (σ=√信号) 总噪声 (泊松+高斯) 暗部区域 读出噪声主导 亮部区域 散粒噪声主导 暗部噪声主要由读出噪声决定,亮部噪声主要由散粒噪声决定,中间区域两者共同作用

从图上可以清楚看到:暗部区域(信号<2000e-),总噪声曲线跟读出噪声线几乎重合;亮部区域(信号>7000e-),总噪声曲线跟散粒噪声曲线平行。中间区域是两者共同作用。

这个特性对HDR处理意味着什么?

  • 短曝光帧的暗部:读出噪声占主导,去噪时要用高斯滤波器
  • 长曝光帧的亮部:散粒噪声占主导,去噪时要用泊松滤波器
  • 中间区域:需要混合策略

实用技巧:我在实际项目中,会把噪声模型参数做成一个查找表(LUT),按增益和温度索引。运行时直接查表,不用实时计算,速度快很多。标定一次,用一年。

3.7 小结

噪声模型是HDR去噪的基石。没有它,去噪就是盲人摸象。有了它,你就能:

  • 知道每个像素的噪声水平
  • 自适应调整去噪强度
  • 在融合时给不同帧分配合理权重
  • 在细节保护和噪声抑制之间找到最佳平衡点