3. 低光照图像噪声分析:光子散粒噪声、读出噪声、固定模式噪声、量化噪声、噪声模型与分布

低光照下拍出来的图像,为什么总是「花」的?

说白了,就是噪声在捣乱。我做了这么多年图像调试,见过太多团队一上来就调降噪参数,结果越调越糊。其实,你得先搞清楚噪声从哪来、长什么样,才能对症下药。

今天咱们就把低光照下最常见的几种噪声,一个一个掰开来看。

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

这是物理定律决定的,躲不开。

光本身是由一个个光子组成的。传感器接收光子时,数量是随机的——就像下雨天你拿桶接水,每一滴落下的位置和时间都不确定。这种随机性,就是散粒噪声的根源。

核心公式:

σ_shot = √(N_photon)

其中 N_photon 是接收到的光子数。信号越强,噪声绝对值越大,但信噪比反而越高(因为信号增长更快)。

我在项目中遇到过一件事:有次调试一款安防摄像头,暗光下画面噪点特别多。团队里有人提议「把增益降下来」。我赶紧拦住——降增益确实能压住一部分噪声,但散粒噪声是信号本身的属性,你降增益,信号也降了,信噪比并不会改善。

我的习惯:评估散粒噪声时,不要只看噪声的绝对值,要看信噪比。信噪比低于 10dB 时,基本就不可用了。

3.2 读出噪声(Read Noise)

读出噪声是传感器把电荷转换成电压、再经过模数转换时引入的。它跟光信号无关——哪怕你把镜头盖死,全黑环境下,读出噪声依然存在。

你想想看,这其实是个「底噪」的概念。我刚开始做嵌入式图像系统时,总觉得读出噪声是传感器厂商的事,跟我没关系。直到有一次,我在低光照下测暗电流,发现读出噪声直接淹没了信号——嗯,从那以后我再也不敢忽视它了。

噪声类型 与信号关系 典型值(e-)
光子散粒噪声 √(信号) 随信号变化
读出噪声 与信号无关 2~10 e-

避坑指南:我曾经在选型时只看传感器的量子效率,忽略了读出噪声。结果低光照下,读出噪声比散粒噪声还大,画面全是「雪花」。后来我学乖了:低光照场景下,读出噪声才是真正的瓶颈。

3.3 固定模式噪声(Fixed Pattern Noise, FPN)

固定模式噪声,说白了就是传感器上每个像素的「个性」。

每个像素的感光面积、暗电流、放大倍数都有细微差异。这些差异在亮光下不明显,但在低光照下就会被放大——你会看到画面中有固定的竖条纹或网格状图案。

我记得有一次调试一款工业相机,客户投诉说「画面有条纹」。我一看就知道是 FPN。怎么解决?

  • 暗场校正:盖上镜头盖,拍一张全黑图像,记录每个像素的偏移量。
  • 亮场校正:用均匀光源拍一张灰板,记录每个像素的增益差异。
  • 实时校正:在 ISP 流水线中减去偏移量、乘以增益系数。

我的经验:FPN 校正最好在传感器原始数据上做,不要在 RGB 或 YUV 域做。因为颜色插值会打乱像素的空间关系,校正效果大打折扣。

3.4 量化噪声(Quantization Noise)

量化噪声是模数转换时产生的。模拟信号是连续的,但数字信号是离散的——你只能用一个整数去近似一个连续值,这个近似误差就是量化噪声。

举个例子:10-bit ADC 有 1024 个量化等级,12-bit 有 4096 个。量化等级越多,噪声越小。但低光照下,信号本身就很弱,可能只占几个量化等级——这时候量化噪声就变得非常明显。

量化噪声的均方根值:

σ_quant = LSB / √12

其中 LSB 是最低有效位对应的电压值。12-bit 比 10-bit 的 LSB 小 4 倍,量化噪声也小 4 倍。

我建议:如果条件允许,低光照场景尽量用 12-bit 或更高位深的传感器。10-bit 在暗光下,量化噪声会吃掉你最后一点细节。

3.5 噪声模型与分布

搞清楚了每种噪声,接下来就是怎么把它们「捏」在一起。

一个经典的噪声模型是这样的:

总噪声 = √(散粒噪声² + 读出噪声² + 固定模式噪声² + 量化噪声²)

注意,这里用的是平方和开根号——因为大部分噪声是相互独立的,它们的方差可以直接相加。

分布上呢?

  • 散粒噪声:服从泊松分布。信号强时近似高斯分布。
  • 读出噪声:主要是高斯分布。
  • 固定模式噪声:空间上固定,但像素间的差异可能服从某种分布(比如均匀分布或高斯分布)。
  • 量化噪声:近似均匀分布。

实际调试中,我一般把总噪声近似为高斯分布——虽然不完美,但够用。降噪算法大多也是基于高斯假设设计的。

注意:低光照下,散粒噪声的泊松特性会更明显。如果你用纯高斯模型去拟合,可能会低估噪声的「拖尾」效应——也就是那些特别亮的孤立噪点。我曾经因为这个踩过坑,后来改用泊松-高斯混合模型才搞定。

3.6 知识体系总览

下面这张图,是我自己总结的低光照噪声分析框架。你可以把它当作调试时的「地图」:

低光照图像噪声分析框架 噪声来源 光子散粒噪声 读出噪声 固定模式噪声 量化噪声 噪声模型 总噪声 = √(Σ 各噪声²) 噪声分布 泊松分布(散粒噪声) 高斯分布(读出噪声) 均匀分布(量化噪声) 调试策略 暗场校正 亮场校正 降噪算法 高位深ADC 各噪声相互独立,方差可叠加;分布决定降噪算法选择

这张图把整个噪声分析的流程串起来了。从识别噪声来源,到建立模型,再到选择分布,最后落到调试策略上。我个人习惯在调试前先画这么一张图——思路清晰了,代码才不会写偏。


好了,低光照噪声分析就聊到这儿。记住一句话:噪声不可怕,可怕的是你不知道它从哪来。搞清楚每种噪声的脾气,你才能跟它和平共处。