Python图像处理六:图像空域平滑

一、图像加噪

噪声在理论上可以定义为“不可预测,只能用概率统计方法来认识的随机误差”,因此可以将图像噪声看作多维随机过程。噪声可以用其概率分布函数和概率分布密度函数来模拟,常见的噪声有椒盐噪声和高斯噪声。
给图像添加噪声,用到 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 模块进行滤波操作。

1、中值滤波

中值滤波用到的函数为 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()

输出:
accc

2、高斯滤波

高斯滤波用到的函数为 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()

输出:
accccf

每日“大饼”:
任何的限制 都是从自己的内心开始的

猜你喜欢

转载自blog.csdn.net/weixin_52051554/article/details/127842568