2. 光子散粒噪声(Shot Noise):泊松分布建模,信噪比与光子数的关系,高光照与低光照下的表现差异

散粒噪声,我习惯叫它“光子散粒噪声”。这是图像传感器里最根本、最躲不开的一种噪声。为什么?因为它来自光本身的量子特性。说白了,光是一份一份的光子,不是连续的水流。你想想看,光子到达像素的时间是随机的,就像雨滴落在屋顶上——有时候多几滴,有时候少几滴。

这种随机性,就是散粒噪声的根源。不管你用多好的传感器,它都在那里。我当年刚入行时,总想着能不能通过电路设计把它“滤掉”,后来才明白——这是物理极限,只能管理,不能消除。

2.1 泊松分布:散粒噪声的数学语言

散粒噪声服从泊松分布。为什么是泊松?因为光子到达事件满足三个条件:

  • 独立:每个光子到达与否,跟其他光子没关系
  • 稀有:在极短时间窗口内,到达的概率很小
  • 平稳:平均到达率是常数

这三个条件一凑,泊松分布就来了。数学上,一个像素在曝光时间内接收到 k 个光子的概率为:

P(k) = (λ^k * e^(-λ)) / k!

其中 λ 是平均光子数。泊松分布有个重要性质:均值等于方差。也就是说,如果平均收到 100 个光子,那么方差也是 100,标准差就是 √100 = 10。

核心结论:散粒噪声的标准差 = √(信号强度)。信号越强,噪声值越大,但信噪比反而越高。

我在项目中遇到过一位同事,他坚持用高斯分布近似散粒噪声。在强光下问题不大,但一到暗光场景,模型就完全不准了。嗯,这里要注意——泊松分布只在光子数较少时表现出明显的“离散性”,光子数多了才接近高斯。

2.2 信噪比与光子数的关系

信噪比(SNR)是衡量图像质量的核心指标。对于散粒噪声,SNR 的计算非常简单:

SNR = 信号 / 噪声标准差 = λ / √λ = √λ

你看,信噪比只跟光子数的平方根成正比。这意味着什么?

平均光子数 λ 散粒噪声标准差 √λ 信噪比 SNR (dB) 主观画质
10 3.16 10 dB 噪点明显,细节模糊
100 10 20 dB 可接受,轻度颗粒感
1,000 31.6 30 dB 干净,细节丰富
10,000 100 40 dB 极佳,接近无噪

从表格里能看出一个规律:光子数每增加 100 倍,SNR 只增加 10 dB。想提升画质,就得大幅增加进光量。这就是为什么手机在暗光下再怎么算法优化,也比不过大底相机的物理优势。

个人经验:我在调试一款 1.4μm 像素的传感器时,发现 SNR 在 25 dB 以下时,人眼就能明显感知到散粒噪声。所以我的调优目标通常是:保证主要场景 SNR ≥ 30 dB。

2.3 高光照 vs 低光照:表现差异

散粒噪声在不同光照下的表现,完全是两个世界。我分别说说。

高光照场景(λ > 1,000)

  • 噪声形态:近似高斯分布,看起来像细密的颗粒
  • 相对强度:噪声标准差 / 信号 = 1/√λ,很小(比如 λ=10,000 时只有 1%)
  • 主观感受:图像干净,散粒噪声几乎不可见
  • 主要矛盾:此时其他噪声(如读出噪声、固定模式噪声)可能更突出

低光照场景(λ < 100)

  • 噪声形态:明显的泊松分布,出现“斑点状”噪声
  • 相对强度:噪声标准差 / 信号 = 1/√λ,很大(λ=10 时高达 31.6%)
  • 主观感受:图像粗糙,暗部细节被噪声淹没
  • 主要矛盾:散粒噪声成为画质瓶颈

我曾经调试过一款安防摄像头,客户投诉夜间画面“全是雪花点”。我一看数据,暗部区域平均光子数只有 15 左右,SNR 不到 12 dB。这不是传感器坏了,是物理极限。后来我们通过延长曝光时间和像素合并(binning),把等效光子数提到了 60,SNR 到了 18 dB,客户才满意。

避坑指南:我曾经在低光照下盲目提高模拟增益,结果散粒噪声和读出噪声一起放大,画质反而更差。正确的做法是:先保证足够的曝光(延长积分时间或增大光圈),再考虑增益。

2.4 散粒噪声的视觉影响:一张 SVG 图说清楚

下面这张图展示了不同光子数下,散粒噪声对图像的影响。我把它画成了从“理想信号”到“实际观测”的流程。

散粒噪声影响示意图 散粒噪声:从光子到图像噪声 理想光子信号 λ 个光子(确定值) 泊松随机过程 方差 = λ,标准差 = √λ 实际观测值 λ ± √λ 范围内波动 高光照(λ = 10,000) 低光照(λ = 100) 噪声标准差 √10,000 = 100 √100 = 10 相对噪声 100 / 10,000 = 1% 10 / 100 = 10% 信噪比 40 dB 20 dB 主观画质 干净,细节丰富 粗糙,暗部细节丢失 主要矛盾 其他噪声(读出噪声等) 散粒噪声本身

2.5 实际调优中的应对策略

知道了散粒噪声的规律,调优就有方向了。我总结了几条实战经验:

  1. 优先保证曝光:延长积分时间、增大光圈、使用更大像素——这些物理手段直接提升 λ,是降噪的根本。
  2. 像素合并(Binning):在低光照下,把相邻 2×2 或 4×4 像素合并成一个超级像素。代价是分辨率下降,但 SNR 提升 √(合并数) 倍。
  3. 多帧叠加:拍摄多帧图像后平均,等效于增加曝光时间。适合静态场景。
  4. 避免过度增益:增益放大信号的同时也放大散粒噪声。我一般把模拟增益控制在 12 dB 以内,超过这个值就考虑其他手段。
  5. 算法降噪的边界:空域降噪(如双边滤波)可以平滑散粒噪声,但会损失细节。时域降噪(多帧)效果更好,但需要运动补偿。

一句话总结:散粒噪声是光子的“身份证”,你无法消除它,但可以通过增加光子数来“稀释”它。信噪比 = √λ,这个公式是所有图像质量调优的起点。