第2章:降噪算法基础理论——高斯噪声与泊松噪声模型
做ISP降噪这么多年,我最大的感触是:不懂噪声模型,调出来的降噪参数就是碰运气。你想想看,连对手长什么样都不知道,怎么打?
这一章,咱们就把噪声的底细摸清楚。我会从工程落地的角度讲,不扯太深的数学,但核心原理必须吃透。
2.1 噪声从哪来?——传感器物理模型
图像传感器上的噪声,说白了就两大类:
- 固定模式噪声(FPN):像素之间的暗电流差异,跟温度、曝光时间有关。高通平台上有专门的FPN校准流程,这里不展开。
- 随机噪声:这才是降噪算法要处理的核心。随机噪声又分两种——高斯噪声和泊松噪声。
我在项目中遇到过最头疼的情况:一个暗光场景,降噪参数怎么调都糊。后来一查,是泊松噪声模型没建对,光子散粒噪声被当成了高斯噪声处理。嗯,这个坑我踩过,你们别踩。
2.2 高斯噪声模型
高斯噪声,也叫加性高斯白噪声(AWGN)。它的特点是:
- 加性:噪声直接加到信号上,跟信号强度无关
- 高斯分布:概率密度函数是钟形曲线
- 白噪声:功率谱密度在整个频域内均匀分布
数学上长这样:
p(x) = (1 / (σ * √(2π))) * exp(-(x - μ)² / (2σ²))
其中μ是均值(通常为0),σ是标准差(决定噪声强度)。
2.3 泊松噪声模型
泊松噪声就有点不一样了。它跟信号强度相关——信号越强,噪声越大。这玩意儿也叫散粒噪声,是光子到达的随机性造成的。
关键特性:
- 信号相关:噪声方差 = 信号强度
- 低光时明显:暗光下信噪比低,泊松噪声特别扎眼
- 非高斯:低光下分布偏斜,高光下近似高斯
为什么会这样?你想想看,光子到达传感器就像下雨,雨滴落下的数量是随机的。光越强,雨滴越多,但随机波动也越大。
2.4 空域降噪算法
空域降噪,就是在像素域直接操作。我按复杂度从低到高讲。
2.4.1 均值滤波
原理很简单:用邻域像素的平均值代替中心像素。
// 3x3均值滤波核
[1/9, 1/9, 1/9]
[1/9, 1/9, 1/9]
[1/9, 1/9, 1/9]
优点:实现简单,计算快。
缺点:边缘糊得一塌糊涂。我在高通平台上几乎不用它做主力降噪,最多用来做预处理。
2.4.2 中值滤波
取邻域像素的中位数。对椒盐噪声效果极好,对高斯噪声一般。
// 3x3窗口排序后取中间值
输入: [12, 15, 18, 20, 255, 22, 14, 16, 19]
排序: [12, 14, 15, 16, 18, 19, 20, 22, 255]
输出: 18 // 中位数,去掉了椒盐噪声
2.4.3 高斯滤波
这是空域降噪的主力。它用高斯函数生成权重,离中心越近的像素权重越大。
// 5x5高斯核,σ=1.0
[0.003, 0.013, 0.022, 0.013, 0.003]
[0.013, 0.059, 0.097, 0.059, 0.013]
[0.022, 0.097, 0.159, 0.097, 0.022]
[0.013, 0.059, 0.097, 0.059, 0.013]
[0.003, 0.013, 0.022, 0.013, 0.003]
高斯滤波的关键参数是σ:
| σ值 | 效果 | 适用场景 |
|---|---|---|
| 0.5 - 1.0 | 轻微平滑,保留边缘 | 亮光场景,低ISO |
| 1.0 - 2.0 | 中等平滑 | 室内光线,中等ISO |
| 2.0 - 4.0 | 强平滑,细节损失大 | 暗光场景,高ISO |
2.5 频域降噪算法
频域降噪的思路不一样——把图像变换到频域,噪声和信号在频域里分得更开。
2.5.1 小波降噪
小波变换把图像分解成不同尺度的子带:
- LL子带:低频近似,包含主要结构
- LH/HL/HH子带:高频细节,包含边缘和噪声
降噪流程:
- 对图像做小波分解(通常3-5层)
- 对高频子带做阈值处理(软阈值或硬阈值)
- 重构图像
// 软阈值函数
def soft_threshold(x, T):
return sign(x) * max(|x| - T, 0)
// 硬阈值函数
def hard_threshold(x, T):
return x if |x| > T else 0
我建议用软阈值。硬阈值会产生振铃效应,在图像边缘附近特别明显。这个坑我踩过——有一次用硬阈值降噪,结果输出图像边缘有鬼影,被客户投诉了。
2.5.2 FFT降噪
FFT(快速傅里叶变换)把图像从空间域转到频率域。噪声在高频区域能量集中,用低通滤波器就能去掉。
常见滤波器:
| 滤波器类型 | 传递函数 | 特点 |
|---|---|---|
| 理想低通 | 截止频率内为1,外为0 | 振铃效应严重 |
| 巴特沃斯低通 | 1 / (1 + (D/D0)^(2n)) | 平滑过渡,振铃少 |
| 高斯低通 | exp(-D² / (2*D0²)) | 最平滑,无振铃 |
2.6 本章知识体系
下面这张图把本章的核心逻辑串起来了:
2.7 工程落地要点
最后,我总结几条实战经验:
- 亮光(ISO ≤ 400):高斯滤波 + 小波软阈值,σ=1.0-1.5
- 中等光线(ISO 400-1600):双边滤波 + 小波,σ=1.5-2.5
- 暗光(ISO ≥ 1600):泊松-高斯混合模型 + 非局部均值(NLM),σ=2.5-4.0
记住:没有万能的降噪算法。我见过太多人想用一个参数打天下,结果亮光糊、暗光噪。正确的做法是:根据ISO和场景亮度,动态切换降噪策略。高通平台的ISP pipeline支持多组参数切换,这个咱们后面章节会详细讲。