双边滤波器cv2.bilateralFilter
双边滤波是综合考虑空间信息和色彩信息的滤波方式,在滤波过程中能够有效地保护图像内的边缘信息,双边滤波在计算某一个像素点的新值时,不仅考虑距离信息(距离越远,权重越小),还考虑色彩信息(色彩差别越大,权重越小)
函数介绍
双边滤波器的函数为cv2. bilateralFilter(src, d, sigmaColor, sigmaSpace, dst=None, borderType=None)
- src参数:指代要处理的图像,可以是任意通道数的图像,在处理时能够对各通道独立处理
- d参数:这是空间距离参数,表示的是以当前像素点为中心点的直径,这个值一般为正值,当为非正值时会自动从参数 sigmaSpace 计算得到
- sigmaColor参数:该值是指在进行滤波处理时选取的颜色差值范围,周围像素点与当前像素点的像素值差值小于这个参数值时,才可参与到当前滤波
- sigmaSpace参数:坐标空间中的sigma值
- dst参数:函数返回值,默认为空
- borderType参数:描述了图像边缘像素点的外插方式,默认为空
一、对比双边滤波和其他滤波器的处理效果
分别使用均值滤波器、高斯滤波器、中值滤波器与双边滤波器做对比,得到如下的结果图,可以很明显地看出双值滤波器的处理结果相较于其他滤波器的结果更加真实,模糊度更低
1、均值滤波效果如下:
2、中值滤波效果如下:
3、高斯滤波效果如下:
4、双边滤波效果如下:
二、双边滤波处理椒盐噪声和高斯噪声
1、为图像添加椒盐噪声
代码如下:
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_
效果如下:
2、为图像添加高斯噪声
代码如下:
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
效果如下:
3、双边滤波处理效果
据图可知,双边滤波不能较好的消除椒盐噪声,对于高斯噪声表现较好,或许调整函数的参数到一定程度可能会带来较好的结果
处理椒盐噪声效果如下:
处理高斯噪声效果如下:
三、检测双边滤波函数各参数对处理结果的影响
这里只对d, sigmaColor, sigmaSpace这三个参数进行测试
1、对d参数进行调整
固定其他两个参数不变,当增大d时图像变得更加模糊,而减少d则使图像更加清晰,因为d越大考虑的像素点越多,就会造成图像更平滑均匀
增大参数d效果如下:
减小参数d效果如下:
2、对sigmaColor参数进行调整
固定其他两个参数不变,当增大sigmaColor时图像变得更加模糊,减少时图像更加清晰,因为该值越大周围有越多的像素点参与到运算中
增大参数sigmaColor效果如下:
减小参数sigmaColor效果如下:
3、对sigmaSpace参数进行调整
固定其他两个参数不变,当增大和减小sigmaSpace的时候效果差别不明显,但是相较于原图还是存在平滑的效果
增加参数sigmaSpace效果如下:
减小参数sigmaSpace效果如下:文章来源:https://www.toymoban.com/news/detail-447723.html
文章来源地址https://www.toymoban.com/news/detail-447723.html
到了这里,关于双边滤波器cv2.bilateralFilter的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!