作业题目:
对lena图像加入椒盐噪声,强度为30%,分别采用均值滤波,中值滤波进行处理。并讨论不同尺度的模板对结果的影响。
作业代码及内容展示和分析:
##lena加入椒盐噪声效果图
1、噪声强度为5%
2、噪声强度为30%
代码展示:
import cv2 as cv
import random as rd
import matplotlib.pyplot as plt
lena = cv.imread‘lena.jpeg’,0)
def saltNoise_imageim,var): #生成椒盐噪声图函数
w,h = im.shape
saltNoiseNum = intw*h*var) #噪声总的点数
for i in rangesaltNoiseNum): #在图像找n个点加入噪声
x = rd.choicerangew))
y = rd.choicerangeh))
if im[x,y] < 127:
im[x,y] = 255
else:
im[x,y] = 0
return im
def filterImageim): #滤波函数
im = cv.cvtColorim,cv.COLOR_BGR2RGB)
ksize = [3,5,7]
im_filter = [[cv.blurim,i,i)), #均值滤波
cv.medianBlurim,i), #中值滤波
cv.GaussianBlurim,i,i),0,0)] #高斯滤波
for i in ksize]
plt.figure‘滤波结果’) #创建窗口
x = 0
for i in range3):
for j in range3):
x += 1
plt.subplot3,3,x) #生成9个子窗口
plt.imshowim_filter[j][i]),plt.axis‘off’) #显示图像
plt.tight_layout0,0.1,0)
plt.show)
new_lena = saltNoise_imagelena,0.3) #传入图片和噪声比例
filterImagenew_lena) #滤波
(1)采用卷积子大小为[3,5,7],噪声强度为5%,采用中值、均值、高斯滤波,其效果图如下:
(2)采用卷积子大小为[3,5,7],噪声强度为30%,采用中值、均值、高斯滤波,其效果图如下:
分析:
当对lena图像加入脉冲噪声时,不管强度是5%还是30%,所采用的中值和高斯滤波的效果都不理想,而采用中值滤波的效果却有明显的改善;且当卷积由3→5→7增大时,去除噪声干扰的效果越好,但是相对而说图像变得更加的模糊,丢失了更多的细节。由于对lena图像加入脉冲噪声导致原图的结构遭到了破坏,高斯和中值滤波都是线性滤波器,会带入很多的噪声进行计算,从而使得效果变得越加的不理想,而中值滤波是非线性滤波器,对噪声的依赖较低,所以它的滤波效果要明显的优于另外两种的滤波效果。