无论是平均平滑还是高斯平滑,在处理图像噪声时,都或多或少会对图片产生一定的模糊,损失部分信息。较为理想的情况,是可以选择性地进行滤波,只在噪声区域进行平滑,而在无噪声区域不进行平滑,将模糊的影响降到最低,这就是自适应性滤波的思想。通常噪声的存在,可能会使得附近邻域内,极值的上下差距较大,或者是方差较大,我们可以设置一定的阈值来判断该点是否需要进行平滑。不过这个不是该章节的内容,这一章是要学习中值滤波,中值滤波本质上是一个统计排序滤波器,是以该点为中心的的邻域内的所有像素的统计排序中值作为该点的响应;而平滑就是加权平均数作为响应,概念上有一定差别。
不同的滤波器在处理不同类型的噪声是效果不同,对于线性平滑滤波,在处理像素邻域内的噪声点时,噪声或多或少都会影响该点的像素值计算(以高斯平滑为例,距离近则影响大,距离远则影响小,与距离的平方呈反比);但是中值滤波通常可以将噪声点直接忽略掉。同时,中值滤波在降噪的同时引起的模糊效应较低。中值滤波的一种典型应用,就是用来消除椒盐(salt & pepper)噪声。于是我们先编写一个函数来为我们的灰度图像添加椒盐噪声。
from PIL import Image
import numpy as np
def AddNoise(src, dst, probility = 0.05, method = "salt_pepper"):
imarray = np.array(Image.open(src))
height, width = imarray.shape
for i in range(height):
for j