双边滤波是图像滤波中经常使用的一种技术,在opencv-python中,函数cv2.bilateralFilter()可以实现此功能。双边滤波相比于平均、高斯、中值等基于图像模糊原理的滤波技术,最大的优势是可以保全图像中的边缘信息,能在保持边界清晰的情况下有效的去除噪音,如官方教程中所给的示例图像:
左侧图像能清晰看到纹理和边缘,经过双边滤波之后,纹理被明显模糊掉,但是边缘仍然较清晰保持,可见双边滤波函数的作用比较明显。我们再尝试对一张图片进行处理,原图如下图所示:
cv2.imread()读入之后转换为灰度图,如下图所示,我们重点关注车道线信息:
下面我们对齐进行高斯滤波,卷积核大小为5✖️5,代码如下所示:
kernel = np.ones((5,5),np.float32)/25
src = cv2.imread('road.jpg', 0)
dst = cv2.filter2D(src, -1, kernel)
滤波后的图像效果为:
可见图片边缘和车道线轮廓均被模糊化,轮廓信息被破坏掉了。我们再看一下双边滤波的效果,如下图所示:
我们可以看到,关键边缘信息并没有被模糊化,可见双边滤波的效果。为什么会有这种效果呢?可以参考官方说明和论文,链接。
opencv-python快速入门视频教程