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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 敏捷软件开发中的配置管理

    敏捷软件开发中的配置管理敏捷软件开发方法目的是适应需求的快速响应 能够快速的发布和快速的交付使用 在敏捷中的如何实现配置管理 如何通过配置管理来管理敏捷开发过程中的需求 代码 版本等 这是应该是一个专向的课题 敏捷中的配置管理有如下几个方面需要考虑 1 适应敏捷需求的变化 快速的纳入需求版本管理 2 适应频繁的代码构造和频繁的发布 3 能够提供准确的发布版本的内容 4 如何和持续集成结合 做好持续集成的最后的结果输出 提高持续的交付能力

    2025年8月29日
    3
  • ConcurrentHashMap 1.7和1.8区别

    ConcurrentHashMap 1.7和1.8区别ConcurrentHashMap与HashMap和Hashtable最大的不同在于:put和get两次Hash到达指定的HashEntry,第一次hash到达Segment,第二次到达Segment里面的Entry,然后在遍历entry链表(1)从1.7到1.8版本,由于HashEntry从链表变成了红黑树所以concurrentHashMap的时间复杂度从O(n)到O…

    2022年6月24日
    29
  • c++ SIMD AVX2比较 例子

    c++ SIMD AVX2比较 例子示例代码含义:记目标字符串中有多少个目标字符。linux代码(例子)如下:#include<iostream>#include<x86intrin.h>#include<fstream>#include<chrono>usingnamespacestd;structStringView{constchar*p;constsize_tlen;};StringViewFileSize(const

    2022年5月20日
    45
  • iframe 透明兼容,设置iframe透明背景的方法

    iframe 透明兼容,设置iframe透明背景的方法从IE5.5+就支持iframe框架的背景透明。通过使用allowtransparency和background-color来设置iframe框架的透明效果,代码如下:1<iframesr

    2022年7月2日
    27
  • 对象转json字符串字段丢失_excel某个对象程序库丢失

    对象转json字符串字段丢失_excel某个对象程序库丢失 在fastjson下将对象转json时会丢失部分属性的情况,出现这种情况的问题原因是由于属性命名不符合规范导致,比如:uId,一个字母后面紧跟着一个大写字母,导致反射get/set方法时会出现连续两个大写字母(getUId/setUId)。解决该问题的方法时在属性上加上注解:@JSONField(name="uId"),就可以解决该问题。或者是属性名serviceDeadline在get/…

    2026年1月15日
    6
  • hive、hadoop面试题

    hive、hadoop面试题有如下hive记录表records,记录车辆的过车信息:createtablerecords(idstring,//记录编号indatestring,//过车记录时间plate_nostring,//车辆号牌device_idint,//经过的设备编号)partitionedby(monthstring,daystring)rowformatdelimitedfieldsterminatedby’\t’storedasORC;1…

    2022年6月17日
    34

发表回复

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

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