2. RAW域噪声模型:光子散粒噪声、读出噪声、固定模式噪声、噪声建模与参数估计
各位同学,咱们今天来聊聊RAW域里的“脏东西”——噪声。做计算摄影,说白了就是跟噪声斗智斗勇。你想想看,传感器捕捉到的信号,本质上就是一堆光子撞来撞去的结果,这过程本身就带着随机性。
我个人习惯把噪声分成三类:光子散粒噪声、读出噪声、固定模式噪声。这三兄弟各有各的脾气,建模方式也完全不同。咱们一个一个来拆解。
2.1 光子散粒噪声:躲不开的量子宿命
先说说光子散粒噪声。这玩意儿是物理定律决定的,你没法彻底消除。光子的到达是随机的,服从泊松分布。也就是说,即使场景亮度完全均匀,每个像素接收到的光子数也会有波动。
我记得刚入行时,总觉得这噪声是传感器做得不好。后来才明白,这是光本身的量子特性。你想想看,如果一秒钟平均有100个光子打到像素上,那实际可能来95个,也可能来105个。这个波动就是散粒噪声。
它的数学模型很简单:
噪声方差 = 信号均值
标准差 = sqrt(信号均值)
这意味着信号越强,噪声值越大,但信噪比反而越高。为什么?因为信号增长是线性的,噪声只增长平方根。所以暗光下散粒噪声最要命。
关键点:散粒噪声是信号依赖的。你不能用一个固定值去描述它,必须跟像素值挂钩。
2.2 读出噪声:电路里的“底噪”
读出噪声就完全是电路层面的问题了。它来自像素复位、电荷转移、模数转换这些环节。跟信号强度没关系,是个固定底噪。
我在项目中遇到过最头疼的情况——某款传感器的读出噪声在低增益下表现很好,但一开高增益就炸了。后来排查发现是电源纹波耦合进了读出电路。嗯,硬件工程师的噩梦。
读出噪声通常用电子数(e⁻)表示,典型值在1-10 e⁻之间。高端工业相机能做到1 e⁻以下,手机传感器一般在3-5 e⁻左右。
| 噪声类型 | 来源 | 信号依赖 | 典型量级 |
|---|---|---|---|
| 光子散粒噪声 | 光子到达随机性 | 是(泊松分布) | sqrt(信号) |
| 读出噪声 | 电路读出过程 | 否 | 1-10 e⁻ |
| 固定模式噪声 | 像素/列工艺偏差 | 部分相关 | 0.1-1% 满阱 |
2.3 固定模式噪声:传感器的“指纹”
固定模式噪声(FPN)很有意思。它不随时间变化,但随空间位置变化。说白了,就是每个像素的灵敏度、暗电流、偏置都不一样。你拍一张均匀灰卡,放大看,会有固定的条纹或颗粒。
FPN分两种:行噪声和像素噪声。行噪声是整行像素共有的偏移,通常来自列放大器的不匹配。像素噪声则是每个像素独有的。
我曾经调试过一款传感器,暗场下有条纹特别明显。查了半天,发现是读出时序里复位信号没对齐。调整之后,FPN直接降了一个数量级。这种坑,光看datasheet是看不出来的。
避坑指南:FPN可以通过暗场标定来校正。但要注意,标定条件(温度、增益)必须跟实际拍摄一致。我曾经因为温度差了10度,标定完反而引入了新的噪声。
2.4 噪声建模:把三兄弟装进一个公式
好了,现在咱们要把这三个噪声统一建模。完整的RAW域噪声模型长这样:
总噪声方差 = 散粒噪声 + 读出噪声 + FPN
= k * S + σ_read² + σ_fpn²
其中S是信号强度,k是转换增益相关的系数。这个模型虽然简单,但足够覆盖大部分场景。
我建议在实际项目中,至少采集5-10组不同亮度的均匀画面,然后拟合这个模型。你会发现,不同增益下,三个噪声分量的占比完全不同。
举个例子:
- 低增益(ISO 100):读出噪声占主导,散粒噪声几乎可以忽略
- 中增益(ISO 400):散粒噪声和读出噪声相当
- 高增益(ISO 3200):散粒噪声主导,读出噪声被放大后也明显
2.5 参数估计:手把手教你算
参数估计这事儿,说难不难,说简单也不简单。核心思路就是利用不同亮度的均匀区域,通过方差分析反推噪声参数。
具体步骤:
- 拍摄暗场(盖上镜头盖),计算像素值方差,得到读出噪声+FPN的底噪
- 拍摄不同亮度的灰卡,计算每个亮度下的方差
- 用最小二乘法拟合方差-信号曲线
- 从曲线斜率提取散粒噪声系数,从截距提取读出噪声
注意:FPN和读出噪声在单帧里很难区分。要分离它们,需要拍摄多帧暗场,计算帧间方差(读出噪声)和帧内方差(FPN+读出噪声)。
下面这张图展示了完整的噪声建模与参数估计流程:
2.6 实战中的噪声处理策略
有了噪声模型,你能做什么?我列几个实际应用:
- 自适应降噪:根据信号强度动态调整降噪强度,暗区重降噪,亮区轻降噪
- 多帧合成权重:在HDR或降噪合成时,用噪声方差作为权重依据
- 传感器评估:对比不同传感器的噪声参数,选择最适合项目的方案
- 仿真测试:在算法开发阶段,用模型生成带噪RAW图,省去反复实拍
个人经验:我习惯在项目初期就做一次完整的噪声标定。把参数存成配置文件,后续所有算法模块都能调用。这比临时抱佛脚靠谱得多。
好了,RAW域的噪声模型就讲到这里。记住,噪声不是敌人,而是可以量化的物理过程。理解了它,你就能更好地控制它。