2、图像噪声基础:噪声的定义、来源(传感器、ISO、暗光、压缩)、类型(高斯、泊松、椒盐、条纹)及数学模型
手机摄影去噪算法的第一步,不是急着调参数或套滤波,而是先回答一个根本问题:我们到底在对抗什么? 噪声不是单一现象,而是多种物理过程叠加后的混合信号。它藏在传感器读出电路里、藏在暗光长曝光的统计涨落里、藏在JPEG压缩的量化误差里,甚至藏在ISP(图像信号处理器)的坏点校正逻辑里。只有把噪声拆解成可量化的数学模型,才能为后续的降噪算法(如BM3D、NLM、深度学习CNN)提供正确的输入假设。本章将系统梳理噪声的定义、四大来源、四种典型类型及其数学表达,并给出一个可落地的噪声评估案例。
上图给出了本章的完整知识框架:噪声从四个源头产生,经过传感器和ISP链路后,最终以四种可辨识的数学形态叠加在图像上。下面逐一展开。
2.1 噪声的核心定义与观测模型
核心原理:在数字图像处理语境下,噪声被定义为“图像采集或传输过程中,由非理想物理过程引入的、与真实场景内容无关的随机信号分量”。它叠加在理想信号上,导致像素值偏离真实光强。数学上,我们通常用一个加性-乘性混合模型来描述含噪图像:
I(x,y) = S(x,y) · M(x,y) + A(x,y)
其中,S(x,y) 是理想无噪信号,M(x,y) 是乘性噪声分量(如增益波动、光照调制),A(x,y) 是加性噪声分量(如读出噪声、热噪声)。在手机摄影中,由于传感器尺寸小、像素密度高,M 和 A 往往同时存在,且与ISO、曝光时间、环境温度强相关。
判断方法:要区分噪声类型,最直接的手段是拍摄一张均匀灰卡(如18%中性灰),然后分析像素值的统计分布。若直方图呈对称钟形,以均值为中心,则大概率是高斯型加性噪声;若方差随亮度增加而增大,则存在泊松分量;若出现孤立的0或255像素点,则是椒盐噪声;若在固定列或行上出现亮暗条纹,则是条纹噪声(固定模式噪声FPN)。
2.2 噪声的四大来源深度拆解
来源一:传感器硬件(读出噪声与暗电流)。CMOS传感器在将光生电子转换为电压并量化的过程中,会产生读出噪声(Read Noise),主要来自像素复位时的热涨落(kTC噪声)、源极跟随器(SF)的1/f噪声以及ADC量化噪声。暗电流(Dark Current)则是即使无光照,硅基热激发产生的电子,其大小随温度指数上升(约每升高6°C翻倍)。暗电流在长曝光时表现为固定亮斑或渐变亮带。
来源二:ISO增益放大。ISO本质上是模拟或数字增益。当光线不足时,ISP会提高增益系数G,将微弱信号放大到可用的电平范围。但增益同时放大了噪声——信号和噪声都被乘以G,因此SNR并不会因提高ISO而改善。更糟的是,模拟增益电路本身会引入额外的热噪声,数字增益则可能放大ADC的量化误差。
来源三:暗光环境(光子散粒噪声)。光子的到达在时间和空间上服从泊松分布。在暗光下,单位时间到达像素的光子数λ很小,相对涨落(1/√λ)变得显著。例如,λ=100个光子时,噪声标准差为10,SNR=20dB;λ=10000时,标准差为100,SNR=40dB。这就是为什么夜景照片噪点特别明显——不是传感器变差了,而是光子统计涨落本身变大了。
来源四:压缩与传输。JPEG压缩采用8×8分块DCT变换和量化表,量化步长在低码率下较大,导致高频系数被粗暴归零,产生块效应和振铃噪声。此外,色度通道通常被4:2:0抽样,边缘处会出现彩色渗色。这类噪声与内容相关,且具有结构性,不能用简单的平滑滤波去除。
| 来源 | 物理机制 | 与信号相关性 | 典型表现 | 抑制手段 |
|---|---|---|---|---|
| 传感器读出 | kTC噪声、1/f噪声、ADC量化 | 信号无关(加性) | 暗部颗粒感 | 相关双采样(CDS)、多次采样平均 |
| ISO增益 | 模拟/数字放大器热噪声 | 信号相关(乘性) | 整体噪点放大 | 降低ISO、多帧HDR合成 |
| 暗光泊松 | 光子到达率低 | 信号相关(√S) | 亮度越高噪点越明显 | 延长曝光、多帧堆栈 |
| JPEG压缩 | 量化误差、块DCT | 内容相关(结构性) | 块边界、蚊式噪声 | 提高码率、去块滤波 |
2.3 四种噪声类型的数学模型与辨识特征
高斯噪声(Gaussian Noise)是最常见的加性噪声模型,其概率密度函数为:
p(n) = (1 / (σ√(2π))) · exp(-(n-μ)² / (2σ²))
在图像处理中,通常假设μ=0,σ为噪声标准差。高斯噪声来源于读出电路、热噪声和放大器的随机涨落。它的特点是:每个像素独立受扰,噪声幅度与信号强度无关。在均匀区域,直方图呈对称钟形。
泊松噪声(Poisson Noise),又称散粒噪声,其模型为:
z ~ Poisson(λ),其中 λ = S(x,y) · t · QE
λ是期望光子数,t是曝光时间,QE是量子效率。泊松分布的方差等于均值λ,因此噪声标准差为√λ。这意味着噪声幅度随信号强度增大而增大,但SNR = λ/√λ = √λ,也随信号增大而改善。在暗光下,λ小,SNR低,噪声明显。
椒盐噪声(Salt-and-Pepper Noise)是脉冲型噪声,表现为随机像素被置为最大值(盐,255)或最小值(椒,0)。其模型为:
I_noisy(x,y) = 255 以概率 p/2;0 以概率 p/2;I(x,y) 以概率 1-p
p为噪声密度。椒盐噪声通常由传感器坏点、ADC饱和或传输误码引起。中值滤波对其有奇效,因为中值能有效剔除极端值。
条纹噪声(Stripe Noise)属于固定模式噪声(FPN),表现为图像上周期性或固定位置的亮暗条纹。其数学模型为:
I_stripe(x,y) = I(x,y) + c(y) (列条纹)或 I(x,y) + r(x) (行条纹)
其中c(y)是列偏移量,通常由列放大器增益失配或ADC偏置差异导致。条纹噪声在均匀暗场下最容易观察,表现为垂直或水平亮线。去条纹常用列均值校正或频域滤波(在傅里叶变换中沿条纹方向置零)。
2.4 实战案例:暗光夜景照片的噪声分离与评估
场景背景:某旗舰手机在夜景模式下拍摄城市灯光场景,用户反馈照片放大后“噪点像雪花一样多”,且画面有轻微竖条纹。我们作为算法工程师,需要定位噪声来源并给出降噪方案。
初始现象与目标:照片ISO为3200,曝光时间1/10秒,RAW格式。目标是将SNR从当前的22dB提升至至少30dB,同时保留灯光边缘的锐利度。
关键输入数据:
- 均匀暗部区域(如天空)像素均值μ=48,标准差σ=12.5,计算SNR = 20·log10(48/12.5) ≈ 11.7dB(远低于目标)。
- 亮部区域(灯光)均值μ=180,标准差σ=18,SNR ≈ 20dB。
- 在暗部区域做列均值统计,发现第120列、第340列均值比相邻列高约8个灰度级,确认存在列条纹。
- 直方图显示暗部呈右偏分布,而非对称高斯,提示存在泊松分量。
分析判断过程:首先,暗部SNR仅11.7dB,远低于可接受水平。其次,列条纹的存在说明传感器列放大器存在失配。直方图右偏说明泊松噪声不可忽略。综合判断:噪声 = 高斯读出噪声(约σ=8)+ 泊松散粒噪声(σ≈√48≈7)+ 列条纹(幅度8)。
实际操作步骤:
- 条纹校正:拍摄一张同ISO、同曝光时间的纯黑帧(镜头盖盖住),计算每列均值作为偏移量,从原图中减去。此步骤将条纹噪声从8降至1.5。
- 泊松-高斯联合去噪:使用方差稳定变换(VST,如Anscombe变换)将泊松-高斯混合噪声转换为近似纯高斯噪声,然后应用BM3D算法。变换公式:
z' = 2·√(z + 3/8)。 - 多帧堆栈:连续拍摄4帧同一场景,进行像素级对齐后取平均。由于泊松噪声的随机性,4帧平均可将σ降低一半(√4=2倍)。
- 边缘保护:在BM3D后,使用双边滤波对灯光边缘进行微调,防止光晕。
结果对比:处理后暗部SNR从11.7dB提升至28.4dB,亮部SNR从20dB提升至35.1dB。列条纹完全消除。主观评价中,噪点颗粒感明显减弱,灯光边缘保持清晰。
风险与代价:多帧堆栈增加了拍摄时间,手持拍摄时可能引入运动模糊;VST变换在极暗区域(像素值<10)会放大噪声,需设置阈值保护。此外,条纹校正依赖黑帧的准确性,若传感器温度变化导致暗电流漂移,校正会失效。
复盘经验:噪声处理必须“先分离,后治理”。如果一开始就盲目使用高斯滤波,条纹噪声会被保留并扩散。正确的顺序是:先去除结构性噪声(条纹、坏点),再处理随机噪声(泊松+高斯),最后做细节恢复。