java 滤波算法_双边滤波算法

java 滤波算法_双边滤波算法1、原理高斯滤波是以距离为权重,设计滤波模板作为滤波系数,只考虑了像素间的空间位置上的关系,因此滤波的结果会丢失边缘的信息。高斯滤波的缺陷如下图所示:平坦区域正常滤波,图像细节没有变化,而在突变的边缘上,因为只使用了距离来确定滤波权重,导致边缘被模糊。在高斯基础上,进一步优化,叠加了像素值的考虑,因此也就引出了双边滤波,一种非线性滤波,滤波效果对保留边缘更有效。为了理解双边滤波的距离和像素差两个影…

大家好,又见面了,我是你们的朋友全栈君。

1、原理

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

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

23eec995a8bc6eafc7216faa59353254.png

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

09b01f21a38899a6c73b159be23a115a.png

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

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

e1f2d2a455a4c10058bb63dcc6b9e81a.png

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

173e704ce50da33ba6227cd93df9af4a.png

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

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

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

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

d5a671a2e9a95f9c4e97cd00fbc00742.png

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

dd905c3de30164e02d1c33dc7106ca7b.png

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、测试结果

c82d78fd241223f2c867d618c5e0847f.png

4、参考文献

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

Smoothing Images

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

b739ec46bb5c46d9c0aa4ce35ba1ea56.png

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[双边滤波算法]http://www.zyiz.net/tech/detail-120403.html

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/139458.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月29日 下午7:36
下一篇 2022年5月29日 下午7:36


相关推荐

  • thinkphp模版调用函数方法

    thinkphp模版调用函数方法

    2021年10月26日
    45
  • SysUtils.QuotedStr – 加单引号

    SysUtils.QuotedStr – 加单引号举例:varss,s:string;beginss:=’Delphi’;s:=QuotedStr(ss);ShowMessage(s);{‘Delphi’}end;SysUtils单元下的公用函数目录

    2022年10月18日
    2
  • system.Exception:端口已被占用1080「建议收藏」

    system.Exception:端口已被占用1080「建议收藏」找出是哪个程序占用了1080端口打开cmd.exe,输入命令:netstat-aon|findstr"1080"1最后一列就是PID了,我的是3104. 要想知道此PID对应什么程序,可以继续输入:tasklist|findstr"4568"1打开任务管理器,在进程里面找下wpscloudsvr.exe,或者在服务里面找PID为3104。…

    2025年9月30日
    3
  • ChatGPT代码错误怎么解决|AI调试技巧分享

    ChatGPT代码错误怎么解决|AI调试技巧分享

    2026年3月17日
    3
  • 如何添加CSS虚线以及DIV框

    如何添加CSS虚线以及DIV框css 虚线样式其实很简单 现在大家应该知道怎么在 css 里添加虚线了吧 控制 div 线框的是 border 我们可以具体设置四条边的线框是否显示 也可以去设置虚线框的颜色和粗细 线框的设置可以让 div 的块状更加明显 至于是用虚线还是实线 大家可以根据具体情况而定 不知道怎么在 css 里添加虚线的朋友 可以拿本文的代码去看看效果 自己再去修改修改 体会下变化 进而更审核的掌握 css 虚线样式 可以看到 css 虚线样式的重点是在 border 其中 1px 表示虚线的粗细 如果设置 5px 那么线条就会更加粗些

    2026年3月16日
    3
  • 修改计算机用户名 未识别网络,电脑出现未识别的网络,无Internet访问解决办法 这几步你要了解…[通俗易懂]

    修改计算机用户名 未识别网络,电脑出现未识别的网络,无Internet访问解决办法 这几步你要了解…[通俗易懂]网卡驱动问题01在桌面的计算机图标上右键单击一下,选择【设备管理器】,然后在设备管理器页面下方找到【网络适配器】。02打开网络适配器列表,找到当前的网卡驱动,用鼠标右键点击一下,在弹出的菜单中选择【禁用】,接着再点击【启用】。好了,以上就是大致内容了,(END)更改适配器设置01在电脑桌面上找到网络图标,右键点击一下,在菜单中选择【属性】,然后会进入到网络属性的主界面。02接着,在属性界面的左侧菜…

    2022年10月14日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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