噪声在理论上可以定义为“不可预测,只能用概率统计方法来认识的随机误差”,因此可以将图像噪声看作多维随机过程。噪声可以用其概率分布函数和概率分布密度函数来模拟,常见的噪声有椒盐噪声和高斯噪声。
给图像添加噪声,用到 skimage 中 util 模块的 random_noise 函数。
调用格式为:
skimage.util.random_noise(image,mode)
image:输入图像数据;
mode:添加噪声的类别,为 srt 类型,噪声类别有:gaussian(高斯加性噪声), salt(盐噪声),pepper(椒噪声),s&p(椒盐噪声),poisson(泊松噪声), speckle(乘性噪声)等。
例 1:读入图像,并添加噪声,显示原图像及加噪后的图像。程序代码如下:
from skimage import util,data,io
import matplotlib.pyplot as plt
img=data.camera()
noise_gs_img=util.random_noise(img,mode='gaussian') #高斯噪声
noise_salt_img=util.random_noise(img,mode='salt') #盐噪声
noise_pepper_img=util.random_noise(img,mode='pepper') #胡椒噪声
noise_sp_img=util.random_noise(img,mode='s&p') #椒盐噪声
noise_speckle_img=util.random_noise(img,mode='speckle') #乘性噪声
plt.figure('noise')
plt.subplot(2,3,1)
io.imshow(img)
plt.title('original')
plt.axis('off')
plt.subplot(2,3,2)
io.imshow(noise_gs_img)
plt.title('gaussian')
plt.axis('off')
plt.subplot(2,3,3)
io.imshow(noise_salt_img)
plt.title('salt')
plt.axis('off')
plt.subplot(2,3,4)
io.imshow(noise_pepper_img)
plt.title('pepper')
plt.axis('off')
plt.subplot(2,3,5)
io.imshow(noise_sp_img)
plt.title('s&p')
plt.axis('off')
plt.subplot(2,3,6)
io.imshow(noise_speckle_img)
plt.title('speckle')
plt.axis('off')
plt.show()
skimage 库中通过 filters 模块进行滤波操作。
中值滤波用到的函数为 median,函数调用格式:
filters.median(img,disk(3))
中值滤波器需要用 skimage.morphology 中的 disk 来设置滤波器的形状。
例 2:读入图像,并添加椒盐噪声,对含噪图像分别用 33 和 55 的窗口做中值滤波,显示实验结果。程序代码如下:
from skimage import data,filters,io,util
import matplotlib.pyplot as plt
from skimage.morphology import disk
img=data.camera()
noise_sp_img=util.random_noise(img,mode='s&p')
edges1=filters.median(noise_sp_img,disk(3))
edges2=filters.median(noise_sp_img,disk(5))
plt.figure('median',figsize=(8,8))
plt.subplot(221)
io.imshow(img)
plt.title('original')
plt.axis('off')
plt.subplot(222)
io.imshow(noise_sp_img)
plt.title('salt&peppernoise')
plt.axis('off')
plt.subplot(223)
io.imshow(edges1)
plt.title('3*3')
plt.axis('off')
plt.subplot(224)
io.imshow(edges2)
plt.title('5*5')
plt.axis('off')
plt.show()
高斯滤波用到的函数为 gaussian,函数调用格式:
skimage.filters.gaussian(image,sigma)
通过调节 sigma 的值来调整滤波效果
例 3:读入图像,并添加高斯噪声,对含噪图像做高斯滤波,sigma 分别取为 0.4 和 2,显示实验结果。程序代码如下:
from skimage import data,filters,io,util
import matplotlib.pyplot as plt
img=data.camera()
noise_img=util.random_noise(img,mode='gaussian')
edges1=filters.gaussian(noise_img,sigma=0.4) #sigma=0.4
edges2=filters.gaussian(noise_img,sigma=2) #sigma=2
plt.figure('gaussian',figsize=(8,8))
plt.subplot(221)
io.imshow(img)
plt.title('original')
plt.axis('off')
plt.subplot(222)
io.imshow(noise_sp_img)
plt.title('gaussiannoise')
plt.axis('off')
plt.subplot(223)
io.imshow(edges1)
plt.title('sigma=0.4')
plt.axis('off')
plt.subplot(224)
io.imshow(edges2)
plt.title('sigma=2')
plt.axis('off')
plt.show()
每日“大饼”:
任何的限制 都是从自己的内心开始的