双边滤波是综合考虑空间信息和色彩信息的滤波方式,在滤波过程中能够有效地保护图像内的边缘信息,双边滤波在计算某一个像素点的新值时,不仅考虑距离信息(距离越远,权重越小),还考虑色彩信息(色彩差别越大,权重越小)
双边滤波器的函数为cv2. bilateralFilter(src, d, sigmaColor, sigmaSpace, dst=None, borderType=None)
分别使用均值滤波器、高斯滤波器、中值滤波器与双边滤波器做对比,得到如下的结果图,可以很明显地看出双值滤波器的处理结果相较于其他滤波器的结果更加真实,模糊度更低
代码如下:
def add_sp_noise(image, prob=0.05):
img_ = image.copy()
thr = 1-prob
h, w, _ = image.shape
for i in range(h):
for j in range(w):
rdn = np.random.rand()
if rdn < prob:
img_[i][j] = 0
elif rdn > thr:
img_[i][j] = 255
return img_
效果如下:
代码如下:
def add_gaussian_noise(image, mean=0, std=0.1):
img_ = image.copy()/255.0
noise = np.random.normal(mean, std, image.shape)
output = np.uint8(np.clip(img_ + noise, 0, 1) * 255)
return output
效果如下:
据图可知,双边滤波不能较好的消除椒盐噪声,对于高斯噪声表现较好,或许调整函数的参数到一定程度可能会带来较好的结果
处理椒盐噪声效果如下:
处理高斯噪声效果如下:
这里只对d, sigmaColor, sigmaSpace这三个参数进行测试
固定其他两个参数不变,当增大d时图像变得更加模糊,而减少d则使图像更加清晰,因为d越大考虑的像素点越多,就会造成图像更平滑均匀
增大参数d效果如下:
减小参数d效果如下:
固定其他两个参数不变,当增大sigmaColor时图像变得更加模糊,减少时图像更加清晰,因为该值越大周围有越多的像素点参与到运算中
增大参数sigmaColor效果如下:
减小参数sigmaColor效果如下:
固定其他两个参数不变,当增大和减小sigmaSpace的时候效果差别不明显,但是相较于原图还是存在平滑的效果
增加参数sigmaSpace效果如下:
减小参数sigmaSpace效果如下: