是指服从高斯分布(正态分布)的一类噪声,通常是因为不良照明和高温引起的传感器噪声,如下图:
左上角第一个图是原图,其余图片分别是参数sigma
取不同值时的图片:
这是其噪声图片可视化:
也称为脉冲噪声,成因可能是影像讯号受到突如其来的强烈干扰而产生、类比数位转换器或位元传输错误等。例如失效的感应器导致像素值为最小值,饱和的感应器导致像素值为最大值。如下图所示:
左上角第一个图是原图,其余图片分别是参数噪声比例
取不同值时的图片:
这是其噪声图片可视化:
def saltpepper_noise(image, proportion):
'''
此函数用于给图片添加椒盐噪声
image : 原始图片
proportion : 噪声比例
'''
image_copy = image.copy()
# 求得其高宽
img_Y, img_X = image.shape
# 噪声点的 X 坐标
X = np.random.randint(img_X,size=(int(proportion*img_X*img_Y),))
# 噪声点的 Y 坐标
Y = np.random.randint(img_Y,size=(int(proportion*img_X*img_Y),))
# 噪声点的坐标赋值
image_copy[Y, X] = np.random.choice([0, 255], size=(int(proportion*img_X*img_Y),))
# 噪声容器
sp_noise_plate = np.ones_like(image_copy) * 127
# 将噪声给噪声容器
sp_noise_plate[Y, X] = image_copy[Y, X]
return image_copy, sp_noise_plate # 这里也会返回噪声,注意返回值
def gaussian_noise(img, mean, sigma):
'''
此函数用将产生的高斯噪声加到图片上
传入:
img : 原图
mean : 均值
sigma : 标准差
返回:
gaussian_out : 噪声处理后的图片
noise : 对应的噪声
'''
# 将图片灰度标准化
img = img / 255
# 产生高斯 noise
noise = np.random.normal(mean, sigma, img.shape)
# 将噪声和图片叠加
gaussian_out = img + noise
# 将超过 1 的置 1,低于 0 的置 0
gaussian_out = np.clip(gaussian_out, 0, 1)
# 将图片灰度范围的恢复为 0-255
gaussian_out = np.uint8(gaussian_out*255)
# 将噪声范围搞为 0-255
# noise = np.uint8(noise*255)
return gaussian_out, noise # 这里也会返回噪声,注意返回值
import cv2
import matplotlib.image as mping
import matplotlib.pyplot as plt
import numpy as np
# 读取图片
src = cv2.imread('Peppers.png', 0)
# 创建绘图 figure
fig_out = plt.figure(figsize=(4, 2), dpi=370) # figsize宽高比
fig_noise = plt.figure(figsize=(4, 2), dpi=370)
for i in range(0, 8):
# 将图片和不同的噪声叠加
gaussian_out, noise = gaussian_noise(src, 0, 0.03*i)
# 创建 AxesSubplot 对象
ax_out = fig_out.add_subplot(i+241)
ax_noise = fig_noise.add_subplot(i+241)
# 将丑兮兮的坐标抽去掉
ax_out.axis('off')
ax_noise.axis('off')
# 设置标题
ax_out.set_title('$\sigma$ = '+str(0.03*i), loc='left', fontsize=3, fontstyle='italic')
ax_noise.set_title('$\sigma$ = '+str(0.03*i), loc='left', fontsize=3, fontstyle='italic')
# 图片展示
ax_out.imshow(gaussian_out, cmap='gray')
ax_noise.imshow((noise+1)/2, cmap='gray')
# 保存图片
fig_out.savefig('1_Peppers_noise.png')
fig_noise.savefig('1_Guassion_noise.png')
# 图片显示
plt.show()
import cv2
import matplotlib.image as mping
import matplotlib.pyplot as plt
import numpy as np
# 读取图片
src = cv2.imread('Peppers.png', 0)
# 创建绘图 figure
fig_out = plt.figure(figsize=(4, 2), dpi=370) # figsize宽高比
fig_noise = plt.figure(figsize=(4, 2), dpi=370)
for i in range(0, 8):
# 将图片和不同的噪声叠加
sp_out, noise = saltpepper_noise(src, 0.03*i)
# 创建 AxesSubplot 对象
ax_out = fig_out.add_subplot(i+241)
ax_noise = fig_noise.add_subplot(i+241)
# 将丑兮兮的坐标抽去掉
ax_out.axis('off')
ax_noise.axis('off')
# 设置标题
ax_out.set_title('proportion = '+str(0.03*i), loc='left', fontsize=3, fontstyle='italic')
ax_noise.set_title('proportion = '+str(0.03*i), loc='left', fontsize=3, fontstyle='italic')
# 图片展示
ax_out.imshow(sp_out, cmap='gray')
ax_noise.imshow(noise, cmap='gray')
# 保存图片
fig_out.savefig('1_Peppers_spnoise.png')
fig_noise.savefig('1_sp_noise.png')
# 图片显示
plt.show()
这是你们要的Peppers.png