资源经验分享在OpenCV里实现联合双边滤波

在OpenCV里实现联合双边滤波

2019-09-25 | |  107 |   0

原标题:在OpenCV里实现联合双边滤波

原文来自:CSDN      原文链接:https://blog.csdn.net/caimouse/article/details/101209665


在前面学习了双边滤波,虽然实现保边平滑的效果,但是平滑效果有时候不如高斯平滑。那么有没有改进的方法呢?这里来回忆一下,前面双边滤波里,使用原图像的灰度相似度作为相似算法,是否可以从这里下手呢?其实是可以的。可以先对原图像进行高斯平滑,然后把这幅图像的灰度值作为计算相似度,替代双边滤波里的原图像相似度计算。把这种方法叫做联合双边滤波,双边滤波的公式如下:

w1.jpg

根据联合双边滤波可以把公式改为这样:

w2.jpg

这里可以看到灰度值计算方式发生了改变,它是从高斯平滑之后的图片里取值,是引入另外一幅图像,不是原始图像。在python里,要使用这个功能,需要安装opencv-contrib-python,如果原来已经安装opencv-python,要先删除再安装它,进行如下操作:

pip uninstall opencv-python (如果已经安装opencv-python包,先卸载)

pip install opencv-contrib-python

当安装成功之后,就可使用下面的例子来测试联合双边滤波:

#python 3.7.4,opencv4.1

#蔡军生 https://blog.csdn.net/caimouse/article/details/51749579

#

import cv2

import numpy as np

 

#图片的路径

imgname = "imgjbf.png"

 

#读取图片

image = cv2.imread(imgname, cv2.IMREAD_COLOR)

 

#图片的高度和宽度

h,w = image.shape[:2]

print('imagesize={}-{}'.format(w,h))

 

#显示原图

cv2.imshow("Image",image)

 

#平滑

joint  = cv2.GaussianBlur(image,(33,33),3,3)

out = cv2.ximgproc.jointBilateralFilter(joint,image,-1,10,9)

#out = out.astype(np.uint8)

cv2.imshow("joint",joint)

cv2.imshow("out",out)

 

 

cv2.waitKey(0)

cv2.destroyAllWindows()


w3.png

输入原图

w4.png

联合双边滤波后图片

w5.png

高斯平滑后的图片

调用函数的定义:

w6.png

joint: 进行联合滤波的导向图像,可以为单通道或多通道,保持边缘的滤波算法时常采用src

src: 输入图像对象矩阵,可以为单通道或多通道

d:用来计算卷积核的领域直径,如果d<0,从sigmaSpace计算d

sigmaColor:颜色空间滤波器标准偏差值,决定多少差值之内的像素会被计算(构建灰度值模板)

sigmaSpace:坐标空间中滤波器标准偏差值。如果d>0,设置不起作用,否则根据它来计算d值(构建距离权重模板)

https://blog.csdn.net/caimouse/article/details/51749579

免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com

上一篇:在modelarts上部署backend为TensorFlow的keras模型

下一篇:传统图像特征提取方法列表

用户评价
全部评价

热门资源

  • Python 爬虫(二)...

    所谓爬虫就是模拟客户端发送网络请求,获取网络响...

  • TensorFlow从1到2...

    原文第四篇中,我们介绍了官方的入门案例MNIST,功...

  • TensorFlow从1到2...

    “回归”这个词,既是Regression算法的名称,也代表...

  • 机器学习中的熵、...

    熵 (entropy) 这一词最初来源于热力学。1948年,克...

  • TensorFlow2.0(10...

    前面的博客中我们说过,在加载数据和预处理数据时...