作业题目:
对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_image(im,var): #生成椒盐噪声图函数
w,h = im.shape
saltNoiseNum = int(w*h*var) #噪声总的点数
for i in range(saltNoiseNum): #在图像找n个点加入噪声
x = rd.choice(range(w))
y = rd.choice(range(h))
if im[x,y] < 127:
im[x,y] = 255
else:
im[x,y] = 0
return im
def filterImage(im): #滤波函数
im = cv.cvtColor(im,cv.COLOR_BGR2RGB)
ksize = [3,5,7]
im_filter = [[cv.blur(im,(i,i)), #均值滤波
cv.medianBlur(im,i), #中值滤波
cv.GaussianBlur(im,(i,i),0,0)] #高斯滤波
for i in ksize]
plt.figure(‘滤波结果’) #创建窗口
x = 0
for i in range(3):
for j in range(3):
x += 1
plt.subplot(3,3,x) #生成9个子窗口
plt.imshow(im_filter[j][i]),plt.axis(‘off’) #显示图像
plt.tight_layout(0,0.1,0)
plt.show()
new_lena = saltNoise_image(lena,0.3) #传入图片和噪声比例
filterImage(new_lena) #滤波
(1)采用卷积子大小为[3,5,7],噪声强度为5%,采用中值、均值、高斯滤波,其效果图如下:
(2)采用卷积子大小为[3,5,7],噪声强度为30%,采用中值、均值、高斯滤波,其效果图如下:
分析:
当对lena图像加入脉冲噪声时,不管强度是5%还是30%,所采用的中值和高斯滤波的效果都不理想,而采用中值滤波的效果却有明显的改善;且当卷积由3→5→7增大时,去除噪声干扰的效果越好,但是相对而说图像变得更加的模糊,丢失了更多的细节。由于对lena图像加入脉冲噪声导致原图的结构遭到了破坏,高斯和中值滤波都是线性滤波器,会带入很多的噪声进行计算,从而使得效果变得越加的不理想,而中值滤波是非线性滤波器,对噪声的依赖较低,所以它的滤波效果要明显的优于另外两种的滤波效果。