代码语言:javascript复制
import os
import numpy as np
import cv2
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
def put(path):
img=cv2.imread(path,1)
img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
rows,cols=img.shape[:2]
#添加噪声
img_noise=img.copy()
for i in range(5000):
x=np.random.randint(0,rows)
y=np.random.randint(0,cols)
img_noise[x,y]=img[x,y] np.random.randint(50,100)
#均值滤波
res1=cv2.blur(img_noise,(9,9))
#统计排序滤波器
#中值滤波
res2=cv2.medianBlur(img_noise,5)
plt.subplot(2,2,1),plt.axis('off'),plt.imshow(img,plt.cm.gray),plt.title('原始图像')
plt.subplot(2,2,2),plt.axis('off'),plt.imshow(img_noise,plt.cm.gray),plt.title('加入噪声后图像')
plt.subplot(2,2,3),plt.axis('off'),plt.imshow(res1,plt.cm.gray),plt.title('均值滤波器')
plt.subplot(2,2,4),plt.axis('off'),plt.imshow(res2,plt.cm.gray),plt.title('中值滤波器')
plt.savefig('C:/Users/xpp/Desktop/result.png')
plt.show()
put(r'C:/Users/xpp/Desktop/Lena.png')
算法:空域噪声滤波器是在待处理的图像中逐点地移动模板,滤波器在该点的响应通过事先定义的滤波器系数与滤波模板扫过区域的相应像素值的关系来计算。
空域噪声滤波器可以按照以下关系进行分类:
- 从数学形态上,空域噪声滤波器分为线性滤波器和非线性滤波器
- 从处理效果上,空域噪声滤波器分为平滑空间滤波器和锐化空间滤波器