双边滤波算法_双边滤波的原理

双边滤波算法_双边滤波的原理双边滤波算法

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

1、原理

高斯滤波是以距离为权重,设计滤波模板作为滤波系数,只考虑了像素间的空间位置上的关系,因此滤波的结果会丢失边缘的信息。

高斯滤波的缺陷如下图所示:平坦区域正常滤波,图像细节没有变化,而在突变的边缘上,因为只使用了距离来确定滤波权重,导致边缘被模糊。

双边滤波算法_双边滤波的原理

在高斯基础上,进一步优化,叠加了像素值的考虑,因此也就引出了双边滤波,一种非线性滤波,滤波效果对保留边缘更有效。

双边滤波算法_双边滤波的原理

为了理解双边滤波的距离和像素差两个影响因素,先说明下面两个概念帮助理解。

空间距离:当前点距离滤波模板中心点的欧式距离。

双边滤波算法_双边滤波的原理

灰度距离:当前点距离滤波模板中心点的灰度的差值的绝对值。

双边滤波算法_双边滤波的原理

双边滤波的核函数是空间域核与像素范围域核的综合结果:

1)在图像的平坦区域,像素值变化很小,那么像素差值接近于0,对应的像素范围域权重接近于1,此时空间域权重起主要作用,相当于进行高斯模糊;

2)在图像的边缘区域,像素值变化很大,那么像素差值大,对应的像素范围域权重变大,即使距离远空间域权重小,加上像素域权重总的系数也较大,从而保护了边缘的信息。

双边滤波的效果如下图,在突变的边缘上,使用了像素差权重,所以很好的保留了边缘。

双边滤波算法_双边滤波的原理

双边滤波的原理如下图所示。

双边滤波算法_双边滤波的原理

2、测试实验

OpenCV函数原型:

CV_EXPORTS_W void bilateralFilter( 
InputArray src, OutputArray dst, int d,
                  double sigmaColor, double sigmaSpace,
                  int borderType = BORDER_DEFAULT );

InputArray src: 输入图像,可以是Mat类型,图像必须是8位或浮点型单通道、三通道的图像。

OutputArray dst: 输出图像,和原图像有相同的尺寸和类型。

int d: 表示在过滤过程中每个像素邻域的直径范围。如果这个值是非正数,则函数会从第五个参数sigmaSpace计算该值。

double sigmaColor: 颜色空间过滤器的sigma值,这个参数的值越大,更大的值域空间影响结果。

double sigmaSpace: 坐标空间中滤波器的sigma值,如果该值较大,更大的定义域空间影响结果。

int borderType=BORDER_DEFAULT:边界模式,有默认值BORDER_DEFAULT.

测试代码:

static void OnBilateralFilter(int filterSz, void *)
{
    bilateralFilter(img, img3, filterSz, filterSz * 2, filterSz / 2);
    imshow("双边滤波", img3);
}

namedWindow("双边滤波", 1);
createTrackbar("内核值", "双边滤波", &gMedianBlurValue, 40, OnBilateralFilter);
OnBilateralFilter(gMedianBlurValue, 0);

3、测试结果

双边滤波算法_双边滤波的原理

4、参考文献

Bilateral Filtering for Gray and Color Images, C. Tomasi, R. Manduch

http://www.cs.jhu.edu/~misha/ReadingSeminar/Papers/Tomasi98.pdf

Smoothing Images

https://docs.opencv.org/2.4/doc/tutorials/imgproc/gausian_median_blur_bilateral_filter/gausian_median_blur_bilateral_filter.html

Bilateral Filters(双边滤波算法)原理及实现(一)

https://blog.csdn.net/u013066730/article/details/87859184

 

个人博客,转载请注明。

 https://www.cnblogs.com/pingwen/p/12539722.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/167793.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • nextSibling的兼容问题「建议收藏」

    nextSibling的兼容问题「建议收藏」这个有两个兼容性,innerText不是所有浏览器都兼容的,要用innerHTML 然后就是,对于节点关系,ie有事会将期间的空格当成一个文本节点,但火狐就不会,因此你的nextSibling很可能在ie下取到的是一个文本节点,换在火狐下就是另外一个。本文转自:http://ailantian.bokee.com/6418694.html原文如下:网

  • idea社区版支持jsp_idea没有servlet选项

    idea社区版支持jsp_idea没有servlet选项在几个javaIDE中,IntelliJIDEA应该是最养眼的了,不过免费的社区版不能配置web服务器,所以拿来开发servlet感觉困难重重。经过一番探索,终于闯出了一条便捷的路。快速编码,运行,调试都没问题,我所使用的版本是14.0.1。下面就来介绍一下。1、下载jetty。jetty是一个servlet容器,这一步是能够运行和调试的重点,因为不能配置web服务器,所以我们需要一个嵌入式的…

  • max3221工作原理_max3232ese芯片发烫

    max3221工作原理_max3232ese芯片发烫TTL电平逻辑1为+5V,逻辑0为0V。RS232电平逻辑1为+3V~+15V,逻辑0为-3V~-15V。也就是说我们所转换的数据电平+5V->(+3V~+15V),0V->(-3V~-15V)即可。我们的MAX232是5V供电的,+5V->(+3V~+15V)的转换是很容易满足的,0V->(-3V~-15V)就需要内部产生一个负压电源然后去转换输出。MAX232的一般

  • 串口调试助手fx2n_PLC串口调试助手详细讲解(结合实操)「建议收藏」

    串口调试助手fx2n_PLC串口调试助手详细讲解(结合实操)「建议收藏」下面技成培训网给大家分享一则案例文,学员常见问题!经常会有学员问,老师老师,我的PLC和变频器通讯不上了,不知道什么原因,您能帮我看看么。其实吧,这个一般远程是帮不上你什么的,还是要你自己去测试,找出问题,那么怎么测试呢,今天就给大家做一个详细的解说,我们通过一个实际对的案例,结合一个叫做串口调试助手的小工具,带大家了解,通讯出问题了,一般是怎么去查找问题的。案例是这样的:一台三菱的PLC,PLC…

  • 微信小程序-和后台交互

    微信小程序-和后台交互微信小程序-和后台交互

  • OpenProcessToken()运用心得

    OpenProcessToken()运用心得   使用OpenProcessToken()用于得到指定进程的访问令牌,而第三个参数定义设置不正确可能导致该函数调用失败,以下举例说明: HANDLEhProc;hProc=GetCurrentProcess(); //Method1-Error(998)HANDLE*hToken;OpenProcessToken(hProc,TOKEN_ADJUST_PRIV

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号