本
算法参考自论文"Paris S, Durand F. A fast approximation of the
bilateral filter using a signal processing approach[M]//Computer Vision–ECCV 2006. Springer Berlin Heidelberg, 2006: 568-580."下面的代码也是作者团队编写的。
图像滤波是在尽可能保留图像细节特征的条件下对目标图像的噪声进行抑制,是常用的图像预处理操作。
联合双边滤波(Joint bilateral filter)是在双边滤波基础上对相似性权重模板进行优化,对于纹理图像的处理效果较好。
注意:本例程需要 opencv-contrib-python 包的支持。
双边滤波是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折衷处理,同时考虑空间与信息和灰度相似性,达到保边去噪的目的,具有简单、非迭代、局部处理的特点。之所以能够达到保边去噪的滤波效果是因为滤波器由两个函数构成:一个函数是由几何空间距离决定滤波器系数,另一个是由像素差值决定滤波器系数。
双边滤波器中,输出像素的值依赖于邻域像素的值的加权组合,其公式如下:
权重系数w(i,j
# 调用
联合双边滤波函数
# 第一个参数是输入图像,第二个参数是滤波器的直径,第三个参数是颜色空间标准差,
# 第四个参数是空间空间标准差,第五个参数是边界类型(可选,默认为cv2.BORDER_DEFAULT)
dst = cv2.
bilateralFilter(img, 9, 75, 75)
# 显示处理后的图片
cv2.imshow('
bilateral filter', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
在这个例子中,我们读取了一张图片,然后调用了 `cv2.
bilateralFilter()` 函数来对图像进行
联合双边滤波。我们传递给这个函数的参数包括输入图像、滤波器的直径、颜色空间标准差、空间空间标准差和边界类型。最后,我们使用 `cv2.imshow()` 函数来显示处理后的图片,然后使用 `cv2.waitKey()` 函数等待用户按下任意键,最后使用 `cv2.destroyAllWindows()` 函数销毁所有的窗口。