4、图像噪声评估:高斯噪声、泊松噪声、散粒噪声的测量方法

说到图像噪声,很多工程师第一反应就是「噪点多少」。但实际项目中,噪声的类型远比总量更重要。我见过不少团队,花大价钱换了传感器,结果图像还是脏——后来一查,根本不是传感器的问题,而是 ISP 的噪声模型没选对。

这一章,我们就来拆解三种最常见的噪声:高斯噪声、泊松噪声、散粒噪声。我会告诉你它们长什么样、怎么测、以及测量时容易踩哪些坑。

核心观点: 噪声评估不是看「噪点多少」,而是看「噪声类型是否匹配 ISP 模型」。模型错了,降噪越狠,细节丢得越惨。
图像噪声评估知识体系 噪声类型与测量 高斯噪声 测量方法 均匀灰卡 → 计算标准差 ISO 15739 标准法 泊松噪声 测量方法 多帧均值 → 方差分析 光子转移曲线 (PTC) 散粒噪声 测量方法 暗场 + 亮场差分 EMVA 1288 标准 评估目标:为 ISP 降噪模块提供准确的噪声模型参数

4.1 高斯噪声:最基础的「均匀颗粒」

高斯噪声是所有噪声模型里最老实的。它的特点是:每个像素的噪声独立,幅度服从正态分布。说白了,就是整张图上均匀撒了一层「胡椒面」,亮区和暗区噪点密度差不多。

测量方法:

  1. 拍摄一张均匀灰卡(18% 反射率),保证光照均匀。
  2. 在图像中心区域取一个 256×256 的 ROI。
  3. 计算该 ROI 的像素值标准差 σ。
  4. σ 值就是高斯噪声的强度指标。
我的习惯: 我会同时取 5 个不同位置的 ROI,取平均值。因为单块区域可能刚好有传感器坏点或灰尘,多取几块能避开这些干扰。

代码示例:

import cv2
import numpy as np

def measure_gaussian_noise(image_path):
    img = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
    # 取中心 256x256 区域
    h, w = img.shape
    roi = img[h//2-128:h//2+128, w//2-128:w//2+128]
    # 计算标准差
    std = np.std(roi)
    return std

# 使用
noise_level = measure_gaussian_noise('gray_card.png')
print(f'高斯噪声标准差: {noise_level:.2f}')
注意: 如果 ROI 内存在明显的亮度渐变(比如打光不均匀),标准差会偏大。这时候测出来的不是噪声,是「光照不均匀度」。我建议先做一次二阶曲面拟合,把背景趋势去掉再算标准差。

4.2 泊松噪声:与信号相关的「光子涨落」

泊松噪声的本质是光子到达的随机性。你想想看,光线越强,光子数越多,但光子到达的随机涨落也越大。所以泊松噪声的特点是:噪声方差 = 信号均值。亮区噪点明显比暗区多。

测量方法——光子转移曲线(PTC):

  1. 拍摄一系列不同亮度的均匀画面(从暗到亮,至少 10 级)。
  2. 对每张图,计算 ROI 的均值 μ 和方差 σ²。
  3. 以 μ 为横轴、σ² 为纵轴画曲线。
  4. 在光子噪声主导区,曲线斜率 ≈ 1(即 σ² ≈ μ)。
亮度等级 ROI 均值 μ ROI 方差 σ² σ² / μ
1(最暗) 32.5 35.2 1.08
2 64.1 68.7 1.07
3 128.3 131.5 1.02
4(最亮) 200.6 210.4 1.05

如果 σ²/μ 接近 1,说明泊松噪声占主导。如果远大于 1,说明有其他噪声源(比如读出噪声)混进来了。

实战经验: 我在调试一款低照度 IPC 时,发现暗区噪点比亮区还多——这明显不是泊松噪声。后来查出来是传感器读出电路的热噪声在作怪。所以 PTC 曲线不仅能测泊松噪声,还能帮你诊断噪声来源。

4.3 散粒噪声:传感器自身的「暗流涌动」

散粒噪声和泊松噪声容易搞混。简单区分:泊松噪声是「光子到了但随机」,散粒噪声是「没光子时传感器自己产生的随机电荷」。它主要来自暗电流和复位噪声。

测量方法——暗场 + 亮场差分法:

  1. 盖上镜头盖,拍摄一张暗场图像(全黑)。
  2. 用均匀光源拍摄一张亮场图像(中等亮度)。
  3. 计算暗场的方差 σ²_dark。
  4. 计算亮场的方差 σ²_bright。
  5. 散粒噪声贡献 = σ²_bright - σ²_dark。
避坑指南: 我曾经用手机摄像头做测试,暗场图像里总有几条亮线——那是 sensor 的列固定模式噪声(FPN)。如果不先做 FPN 校正,散粒噪声的测量值会偏大很多。所以我的流程是:先做 FPN 校正 → 再测暗场方差 → 最后差分。

EMVA 1288 标准中的关键参数:

  • 暗信号非均匀性 (DSNU): 暗场下像素响应的标准差。
  • 光响应非均匀性 (PRNU): 亮场下像素响应的标准差(扣除光子噪声后)。
  • 量子效率 (QE): 光子转换为电子的效率,影响散粒噪声的大小。

4.4 三种噪声的对比与实战选择

噪声类型 与信号的关系 主要来源 测量方法 ISP 处理策略
高斯噪声 独立于信号 读出电路、ADC 均匀灰卡标准差 高斯滤波、BM3D
泊松噪声 方差 = 均值 光子到达随机性 光子转移曲线 (PTC) 方差稳定变换 + 高斯降噪
散粒噪声 与暗电流相关 暗电流、复位噪声 暗场/亮场差分 暗帧减法、FPN 校正
一句话总结: 高斯噪声看「均匀性」,泊松噪声看「亮度相关性」,散粒噪声看「暗场底噪」。三种噪声往往同时存在,但 ISP 降噪模块通常只针对其中一两种建模。你的任务就是测出每种噪声的占比,然后告诉算法工程师:「喂,你的模型该调了。」

嗯,这一章的内容就到这里。噪声测量看起来简单,但实际项目中干扰因素很多——光照不均匀、传感器坏点、FPN、甚至镜头灰尘都会让测量结果失真。我的建议是:每次测量前,先做一次「空拍验证」,确保你的测量环境本身是干净的。