一些重要噪声的概率密度函数

img

高斯噪声

p(z)=12πσe-(z-z¯)2/2σ2

其中 z 表示灰度值, z¯ 表示 z 的均值, σ 表示 z 的标准差. 当 z 服从高斯分布时, 其值有 68% 落在范围 [(z¯-σ),(z¯+σ)] 内, 有 95% 落在范围 [(z¯-2θ),(z¯+2θ)] 内,

瑞利噪声

p(z)={2b(z-a)e-(z-a)2/bifza0ifz<a

概率密度的均值和方差为

z¯=a+πb/4

σ2=b(4-π)4

伽马(爱尔兰)噪声

p(z)={abzb-1(b-1)!e-azifza0ifz<a

概率密度的均值和方差为

z¯=ba

σ2=ba2

指数噪声

p(z)={ae-azifza0ifz<a

概率密度的均值和方差为

z¯=1a

σ2=1a2

均匀噪声

p(z)={1b-aifazb0ifelse

概率密度的均值和方差为

z¯=a+b2

σ2=(b-a)212

脉冲(椒盐)噪声

p(z)={Paifz=aPbifz=b1-Pa-Pbifelse

如果 b > a, 则灰度级 b 在图像中将显示一个亮点, 反之, 灰度级 a 在图像中将显示一个暗点. 若 PaPb 为 0, 则脉冲噪声称为单极脉冲. 如果 PaPb 两者均不为 0, 尤其是它们近似相等时, 称双极脉冲, 也称为椒盐脉冲(因为图像酷似被随机撒了胡椒颗粒和盐粉颗粒).

使用 numpy.random 生成指定类型的噪声

import matplotlib.pyplot as plt
import numpy as np

# 高斯噪声: 均值为 0, 标准差为 64
x1 = np.random.normal(loc=0, scale=64, size=(256, 256))

# 瑞利噪声: (2 / b) ** 0.5 为 1
x2 = np.random.rayleigh(scale=64, size=(256, 256))

# 伽马噪声: (b-1) / a 为 2, 放大 32 倍
x3 = np.random.gamma(shape=2, scale=32, size=(256, 256))

# 指数噪声: a = 1/32
x4 = np.random.exponential(scale=32, size=(256, 256))

# 均匀噪声
x5 = np.random.uniform(low=0, high=1.0, size=(256, 256))

# 脉冲噪声
x6 = np.random.random_integers(low=0.1, high=2.0, size=(256, 256))

for i, x in enumerate([x1, x2, x3, x4, x5, x6]):
    ax = plt.subplot(23 * 10 + i + 1)
    ax.hist(x.reshape(x.size), 64, normed=True)
    ax.set_yticks([])
    ax.set_xticks([])
plt.show()

输出结果:

img

使用噪声退化原图

代码大致与数字图像处理-加性高斯白噪声与去噪一致.