在ISP算法处理前,噪声是影响raw图像质量的关键因素。不同的噪声类型具有不同的分布特性。本文将以某个像素位置 ( x , y ) (x, y) (x,y) 为例,分析 高斯噪声、泊松噪声、椒盐噪声 的生成方式,并给出具体的模拟公式。
1. 高斯噪声(Gaussian Noise)
定义 :高斯噪声是一种服从 正态分布(Gaussian Distribution) 的随机噪声,通常由传感器热噪声或光电探测器引起。
数学模型 :
假设某个像素的原始值为 I ( x , y ) I(x, y) I(x,y),高斯噪声的数学表达式为:
I ′ ( x , y ) = I ( x , y ) + N I'(x, y) = I(x, y) + N I′(x,y)=I(x,y)+N
其中,噪声 N N N 服从均值 μ \mu μ 和标准差 σ \sigma σ 的正态分布:
N ∼ N ( μ , σ 2 ) N \sim \mathcal{N}(\mu, \sigma^2) N∼N(μ,σ2)
模拟方法(Python 代码示例):
python
import numpy as np
def add_gaussian_noise(image, mean=0, sigma=25):
noise = np.random.normal(mean, sigma, image.shape) # 生成高斯噪声
noisy_image = image + noise
return np.clip(noisy_image, 0, 255) # 限制像素值范围
在实际应用中,高斯噪声通常会导致图像整体变得模糊,噪声值较大的地方可能会出现随机色斑。
2. 泊松噪声(Poisson Noise)
定义 :泊松噪声是一种符合 泊松分布(Poisson Distribution) 的离散噪声,常见于低光照成像或 X 射线成像,主要由 光子计数噪声 引起。
数学模型 :
泊松噪声的随机性与图像像素值相关,某个像素 I ( x , y ) I(x, y) I(x,y) 受到泊松噪声影响后的值为:
I ′ ( x , y ) = Poisson ( I ( x , y ) ) I'(x, y) = \text{Poisson}(I(x, y)) I′(x,y)=Poisson(I(x,y))
其中,泊松分布的概率质量函数(PMF)为:
P ( k ; λ ) = λ k e − λ k ! , k ≥ 0 P(k; \lambda) = \frac{\lambda^k e^{-\lambda}}{k!}, \quad k \geq 0 P(k;λ)=k!λke−λ,k≥0
其中:
- λ \lambda λ 为像素值(即该像素的期望值)。
- k k k 是泊松随机变量的可能取值。
模拟方法(Python 代码示例):
python
def add_poisson_noise(image):
noisy_image = np.random.poisson(image) # 直接对像素值进行泊松采样
return np.clip(noisy_image, 0, 255)
由于泊松噪声的方差等于均值( σ 2 = λ \sigma^2 = \lambda σ2=λ),所以明亮区域的噪声幅度比暗部更明显。
3. 椒盐噪声(Salt-and-Pepper Noise)
定义 :椒盐噪声是一种 脉冲噪声(Impulse Noise),表现为像素值突然变成极端值(0 或 255),通常是由于传输误码、传感器故障或数据丢失造成的。
数学模型 :
对于某个像素 I ( x , y ) I(x, y) I(x,y),以概率 p s p_s ps 变为 白色(255) ,以概率 p p p_p pp 变为 黑色(0) :
I ′ ( x , y ) = { 255 , 概率 p s 0 , 概率 p p I ( x , y ) , 概率 ( 1 − p s − p p ) I'(x, y) = \begin{cases} 255, & \text{概率 } p_s \\ 0, & \text{概率 } p_p \\ I(x, y), & \text{概率 } (1 - p_s - p_p) \end{cases} I′(x,y)=⎩ ⎨ ⎧255,0,I(x,y),概率 ps概率 pp概率 (1−ps−pp)
模拟方法(Python 代码示例):
python
def add_salt_pepper_noise(image, salt_prob=0.02, pepper_prob=0.02):
noisy_image = np.copy(image)
total_pixels = image.size
# 生成椒盐噪声的位置
num_salt = int(total_pixels * salt_prob)
num_pepper = int(total_pixels * pepper_prob)
# 设置盐噪声
salt_coords = [np.random.randint(0, i, num_salt) for i in image.shape]
noisy_image[salt_coords[0], salt_coords[1]] = 255
# 设置椒噪声
pepper_coords = [np.random.randint(0, i, num_pepper) for i in image.shape]
noisy_image[pepper_coords[0], pepper_coords[1]] = 0
return noisy_image
椒盐噪声的特点是 随机分布的黑白点,对边缘检测、目标识别等任务影响较大。
4. 噪声分布的对比分析
噪声类型 | 数学模型 | 特性 | 影响 |
---|---|---|---|
高斯噪声 | N ∼ N ( μ , σ 2 ) N \sim \mathcal{N}(\mu, \sigma^2) N∼N(μ,σ2) | 连续、正态分布 | 使图像变模糊,影响细节 |
泊松噪声 | I ′ ( x , y ) = Poisson ( I ( x , y ) ) I'(x,y) = \text{Poisson}(I(x,y)) I′(x,y)=Poisson(I(x,y)) | 离散、依赖像素值 | 亮部噪声较明显,低光照影响大 |
椒盐噪声 | P ( I ′ = 255 ) = p s , P ( I ′ = 0 ) = p p P(I' = 255) = p_s, P(I' = 0) = p_p P(I′=255)=ps,P(I′=0)=pp | 离散、极端像素值 | 产生黑白点,对边缘影响大 |
5. 结论
在实际应用中,选择噪声模型要基于具体场景:
- 高斯噪声 适用于传感器噪声、均匀随机噪声。
- 泊松噪声 适用于光子噪声、医学成像。
- 椒盐噪声 适用于信号丢失、传输错误的模拟。
对于去噪任务,可以使用不同方法:
- 均值滤波(适用于高斯噪声,但会模糊细节)。
- 中值滤波(对椒盐噪声效果好)。
- 深度学习方法(U-Net、DnCNN) 适用于各种复杂噪声。