第3章:噪声模型与分类——光子散粒噪声、读出噪声、固定模式噪声(FPN)、热噪声

做图像传感器ISP的,天天跟噪声打交道。说白了,噪声就是图像里那些不该出现的随机波动。你想想看,一个完美的传感器,在完全均匀的光照下,输出的像素值应该一模一样对吧?但现实中没有这种事。

我刚开始接触这行时,总觉得噪声就是“噪点”,后来踩了不少坑才明白——不同来源的噪声,特性完全不同,处理手段也天差地别。今天咱们就把四种最核心的噪声掰开揉碎了讲清楚。

4.1 光子散粒噪声(Photon Shot Noise)

这是最“物理”的一种噪声。光本身是由一个个光子组成的,光子到达传感器的过程服从泊松分布。什么意思呢?就是即使光源稳定,单位时间内到达像素的光子数也在随机波动。

这个波动的标准差等于光子数的平方根。假设平均有N个光子到达,那么实际值会在N ± √N之间跳动。信噪比就是N/√N = √N。所以——信号越强,信噪比越高。

核心公式: 散粒噪声标准差 σ_shot = √(N),其中N为平均光子数。

我在项目中遇到过一个问题:暗光场景下,散粒噪声会非常明显。因为光子数少,√N相对于N的比例就大。比如N=100时,噪声占比10%;N=10000时,噪声占比只有1%。

散粒噪声有个特点——它是时域的,也是空域的。同一像素在不同帧之间会波动,同一帧的不同像素之间也会波动。而且它跟信号相关,信号越强噪声越大。

实战提示: 散粒噪声无法通过暗帧校准去除,因为它跟信号绑定。去噪算法中,通常用BM3D或非局部均值这类方法处理,效果比简单高斯滤波好得多。

4.2 读出噪声(Read Noise)

读出噪声是传感器将电荷转换为电压、再转换为数字信号的过程中引入的。它跟信号大小无关,是一个固定底噪。你想想看,即使完全遮光(零信号),读出电路也会输出一个非零的随机值。

读出噪声的典型来源包括:

  • 像素源跟随器噪声——晶体管的热噪声和1/f噪声
  • 列放大器噪声——模拟增益级引入的噪声
  • ADC量化噪声——模数转换时的量化误差

读出噪声的单位通常是电子数(e-)。现代CMOS传感器的读出噪声可以做到1-3 e-,而CCD可以做到更低,但速度慢。

噪声类型 与信号相关性 频率特性 校准方式
散粒噪声 √N,正相关 白噪声 无法校准
读出噪声 与信号无关 白噪声+1/f 暗帧校准
FPN 固定偏移/增益 空间低频 双采样/校准
热噪声 与温度相关 白噪声 制冷/校准

我曾经调试过一个项目,暗光下图像有严重的横条纹。查了半天,发现是列放大器电源纹波耦合进了读出噪声。后来在PCB布局上做了隔离,问题就解决了。嗯,硬件上的坑往往比算法上的更难找。

4.3 固定模式噪声(FPN)

FPN是传感器阵列中每个像素的固定偏移和增益差异造成的。说白了,就是每个像素的“个性”不一样。即使均匀光照,不同像素的输出值也不同。

FPN分为两种:

  1. 暗信号非均匀性(DSNU)——零光照下像素输出的差异
  2. 光响应非均匀性(PRNU)——相同光照下像素增益的差异

FPN的特点是空间固定——同一像素在不同帧之间的输出是稳定的,但不同像素之间差异明显。所以它可以通过校准来消除。

注意: FPN校准需要定期更新。传感器老化、温度变化都会导致FPN漂移。我见过一个产品,出厂时校准得好好的,用了半年后FPN又冒出来了。后来加了在线校准机制才解决。

常用的FPN校准方法:

  • 相关双采样(CDS)——读出时先采样复位电平,再采样信号电平,相减消除偏移
  • 暗帧校准——拍摄一张全黑图像,作为偏移模板
  • 平场校准——拍摄一张均匀光照图像,计算增益校正系数

4.4 热噪声(Thermal Noise / Dark Current Noise)

热噪声来自半导体中载流子的热运动。温度越高,载流子越活跃,产生的暗电流就越大。暗电流本身是随机的,服从泊松分布,所以它本质上也是一种散粒噪声——只是信号源是热激发电子,而不是光子。

热噪声跟曝光时间成正比。曝光时间越长,暗电流积累越多,噪声越明显。这也是为什么长曝光摄影需要制冷的原因。

我记得有一次做安防摄像头项目,客户反映夜间图像噪点严重。我们一开始以为是增益太高,后来发现是传感器温度升到了60°C。加了散热片后,温度降到40°C,暗电流噪声减少了大约一个数量级。

经验数据: 温度每升高6-8°C,暗电流翻倍。所以散热设计对图像质量的影响,有时候比算法还大。

4.5 噪声模型总览

在实际的ISP硬件通路中,这些噪声是叠加在一起的。一个完整的噪声模型可以写成:

I_out = G * (I_signal + N_shot + N_dark + N_read) + N_FPN_offset + N_FPN_gain * I_signal

其中:

  • G 是系统增益
  • N_shot 是散粒噪声(信号相关)
  • N_dark 是暗电流噪声(温度相关)
  • N_read 是读出噪声(固定底噪)
  • N_FPN_offset 是DSNU
  • N_FPN_gain 是PRNU

下面这张图展示了噪声在传感器读出通路中的分布:

传感器噪声模型与分布 光子输入 光电转换 + 散粒噪声 暗电流积累 + 热噪声 读出电路 + 读出噪声 + FPN FPN (DSNU+PRNU) 数字输出 噪声叠加说明: 1. 散粒噪声在光电转换时产生,与信号强度相关 2. 热噪声在暗电流积累阶段叠加,与曝光时间和温度相关 3. 读出噪声和FPN在读出阶段加入,FPN可通过校准去除 4. 最终输出是多种噪声的叠加,去噪算法需要区分处理

4.6 硬件通路中的噪声处理策略

了解了噪声模型,咱们才能对症下药。在ISP硬件通路中,不同噪声的处理时机和方式不同:

  1. FPN校准——放在最前面,通常在RAW域做。用暗帧和平场帧生成校准系数,逐像素修正。
  2. 散粒噪声和读出噪声——放在去噪模块处理。散粒噪声用空间域滤波,读出噪声可以用时域滤波。
  3. 热噪声——如果温度可控,优先通过散热解决。算法上可以用长曝光暗帧校准。
避坑指南: 我曾经在一个项目里把FPN校准放在了去噪之后,结果去噪算法把FPN当成了图像细节保留下来,校准反而失效了。顺序很重要——先校准固定噪声,再处理随机噪声。