使用 3 × 3 3\times3 3×3的均值滤波器来进行滤波!
均值滤波器使用网格内像素的平均值。
代码实现:
# -*- coding: utf-8 -*-
"""
Created on Sat Jul 12 15:43:28 2020
@author: 陨星落云
"""
import imageio
import numpy as np
import matplotlib.pylab as plt
def MeanFilter(img,K_size=3):
# 均值滤波
h,w,c = img.shape
# 零填充
pad = K_size//2
out = np.zeros((h + 2*pad,w + 2*pad,c),dtype=np.float)
out[pad:pad+h,pad:pad+w] = img.copy().astype(np.float)
# 卷积的过程
tmp = out.copy()
for y in range(h):
for x in range(w):
for ci in range(c):
out[pad+y,pad+x,ci] = np.mean(tmp[y:y+K_size,x:x+K_size,ci])
out = out[pad:pad+h,pad:pad+w].astype(np.uint8)
return out
if __name__ == "__main__":
# 读取图像
img = imageio.imread("lenaNoise.png")
# 均值滤波
imageio.imsave("MeanFilter.jpg",MeanFilter(img))
# 显示图像
plt.figure(figsize=(10,8))
plt.subplot(121)
plt.imshow(img)
plt.subplot(122)
plt.imshow(MeanFilter(img))
plt.show()
结果: