3. 噪声模型与特性
做图像降噪这么多年,我最大的体会是:不懂噪声,就别谈降噪。你想想看,连对手长什么样都不知道,怎么打赢它?
这一章,我们就来把ISP里最常见的几种噪声扒个底朝天。我会结合自己踩过的坑,告诉你它们在YUV域到底怎么表现。
3.1 高斯噪声:最基础的假设
高斯噪声,说白了就是每个像素上叠加一个独立同分布的高斯随机量。数学上很简单:
n ~ N(0, σ²)
但实际传感器里,纯高斯噪声几乎不存在。它更多是我们建模时的一个简化假设。
关键特性:
- 幅度分布:钟形曲线,对称
- 功率谱:平坦(白噪声)
- 与信号强度:无关
我在项目中遇到过一件事:有个算法团队用纯高斯模型训练了一个降噪网络,结果在真实传感器数据上完全崩了。为什么?因为真实噪声根本不是高斯分布。
3.2 泊松噪声与散粒噪声:光子计数的本质
光打到传感器上,本质是光子计数过程。这个过程的随机性,就是泊松噪声。
泊松分布有个重要性质:均值等于方差。也就是说,信号越强,噪声也越大。
var(n) = μ (μ为光子数均值)
在ISP里,我们通常把泊松噪声近似为信号相关的加性噪声。这个近似在低光下会出问题——我吃过这个亏。
我的经验:在暗光场景(ISO 3200以上),泊松噪声的非高斯性非常明显。这时候再用高斯假设去建模,降噪结果会有明显的纹理残留。
3.3 读出噪声:电路层面的“杂质”
读出噪声是传感器读出电路引入的。它跟信号强度无关,但跟读出速度、温度、增益都有关系。
| 噪声类型 | 来源 | 与信号关系 | 典型值 |
|---|---|---|---|
| 复位噪声 | 像素复位开关 | 无关 | 50-100 e⁻ |
| 1/f噪声 | 晶体管沟道 | 低频相关 | 随频率下降 |
| ADC量化噪声 | 模数转换 | 均匀分布 | ±0.5 LSB |
我曾经调试过一个项目,暗部噪声总是降不下去。查了三天,发现是读出电路的温度补偿没做好。温度每升高10°C,读出噪声翻倍——这个教训太深刻了。
3.4 噪声在YUV域的表现差异
好了,前面都是铺垫。现在说重点:噪声进了YUV域,会变成什么样?
从RAW域到YUV域,经过了去马赛克、白平衡、颜色校正、Gamma等一系列操作。噪声在这个过程中被非线性地扭曲了。
3.4.1 Y通道:亮度噪声
Y通道的噪声,主要来自RAW域的绿色通道(因为绿色像素占一半)。经过去马赛克后,Y噪声呈现空间相关性——相邻像素的噪声不再独立。
- 低频区域:噪声表现为颗粒感
- 高频边缘:噪声被边缘增强放大
- 暗部:Gamma拉伸后噪声被放大
注意:Y通道的噪声在暗部会被Gamma曲线放大2-3倍。如果你在Y域直接做降噪,一定要考虑这个非线性效应。
3.4.2 UV通道:色度噪声
UV通道的噪声,表现跟Y完全不同。因为色度通道经过了颜色校正矩阵(CCM),噪声会在色度空间里被拉伸和旋转。
我举个例子:
// 简化CCM矩阵
[U'] [1.2 -0.3] [U]
[V'] = [-0.4 1.1] [V]
// 噪声协方差变换
Σ' = CCM · Σ · CCM^T
结果就是:原本各向同性的噪声,在UV域变成了椭圆分布。这就是为什么有些降噪算法在UV域做各向同性滤波效果很差——方向搞错了。
3.5 噪声模型总结:一张图看懂
下面这张图,是我自己总结的噪声在ISP Pipeline中的演变路径:
3.6 实战中的噪声建模建议
说了这么多理论,最后给点实在的。我在实际项目中,一般这样建模:
- RAW域:用泊松-高斯混合模型(P-G模型)
- YUV域:用信号相关的各向异性高斯模型
- UV通道:额外考虑CCM带来的协方差变换
避坑指南:我曾经在YUV域直接套用RAW域的噪声模型,结果降噪后出现严重的颜色伪影。后来才意识到,UV通道的噪声协方差已经被CCM旋转了45度。所以,一定要在YUV域重新标定噪声参数,别偷懒。