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分两种:
- 列FPN:整列像素有相同的偏移,表现为竖条纹
- 像素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处理就有了“眼睛”。具体怎么用?
- 多帧融合权重计算:根据每帧的噪声水平,给信噪比高的帧更大的权重
- 去噪强度自适应:暗部噪声大,去噪强一点;亮部噪声小,去噪弱一点
- 细节保护:在噪声水平低于人眼感知阈值的区域,完全不做去噪
举个例子,HDR合成时,短曝光帧的暗部噪声很大,长曝光帧的亮部可能饱和。噪声模型能告诉你:短曝光帧的暗部不可信,长曝光帧的亮部不可用。这样融合时就不会把噪声和饱和区域混进来。
关键洞察:去噪和细节的权衡,本质上是在噪声方差和信号方差之间找平衡。噪声模型给了你一把尺子,让你知道哪些地方该“用力”,哪些地方该“收手”。
3.6 噪声模型的可视化
下面这张图展示了泊松-高斯模型下,噪声标准差随信号强度的变化关系。你可以看到,暗部噪声主要由读出噪声主导,亮部噪声主要由散粒噪声主导。
从图上可以清楚看到:暗部区域(信号<2000e-),总噪声曲线跟读出噪声线几乎重合;亮部区域(信号>7000e-),总噪声曲线跟散粒噪声曲线平行。中间区域是两者共同作用。
这个特性对HDR处理意味着什么?
- 短曝光帧的暗部:读出噪声占主导,去噪时要用高斯滤波器
- 长曝光帧的亮部:散粒噪声占主导,去噪时要用泊松滤波器
- 中间区域:需要混合策略
实用技巧:我在实际项目中,会把噪声模型参数做成一个查找表(LUT),按增益和温度索引。运行时直接查表,不用实时计算,速度快很多。标定一次,用一年。
3.7 小结
噪声模型是HDR去噪的基石。没有它,去噪就是盲人摸象。有了它,你就能:
- 知道每个像素的噪声水平
- 自适应调整去噪强度
- 在融合时给不同帧分配合理权重
- 在细节保护和噪声抑制之间找到最佳平衡点