双边滤波加速「建议收藏」

双边滤波器是同时考虑空间域和值域信息的类似传统高斯平滑滤波器的图像滤波、去噪、保边滤波器。其模板系数是空间系数d与值域系数r的乘积。其思想是:空间系数是高斯滤波器系数,值域系数为考虑了邻域像素点与中心像素点的像素值的差值,当差值较大时,值域系数r较小,即,为一个递减函数(高斯函数正半部分),带来的结果是总的系数w=d*r变小,降低了与“我”差异较大的像素对我的影响。从而达到保边的效果,同时

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



双边滤波器是同时考虑空间域和值域信息的类似传统高斯平滑滤波器的图像滤波、去噪、保边滤波器。其模板系数是空间系数d与值域系数r的乘积。其思想是:空间系数是高斯滤波器系数,值域系数为考虑了邻域像素点与中心像素点的像素值的差值,当差值较大时,值域系数r较小,即,为一个递减函数(高斯函数正半部分),带来的结果是总的系数w=d*r变小,降低了与“我”差异较大的像素对我的影响。从而达到保边的效果,同时,有平滑的作用。

双边滤波加速:

(1)事先制作好模板系数表,这样,在遍历每一个像素时,系数本来的乘法,除法变为了更高效的查找(查找表),空域系数和值域都可以制作查找表。

(2)模仿高斯滤波的分离,将二维双边滤波分解为两个一维的双边滤波。先使用一维双边滤波模板对行进行滤波,然后对卷积结果进行列滤波,此步在计算值域系数的时候可以使用原图像数据进行计算(非使用行滤波所得的中间结果)。(大大减少了乘法的次数,当模板尺寸较大时,由于双边滤波模板系数并不是像高斯滤波模板那样是准确的可分离(值域系数不可分离),会出现结果中沿坐标系轴的滑动模糊现象)。

(3)完全使用C语言的指针操作,也可稍许提高代码运行速度。

双边滤波的类高斯分离加速分析:双边滤波严格是不可分离加速的,分离加速可得到近似结果(一般情况下,结果较好)。

1.高斯滤波可分离加速,因二维高斯函数可分离,即G(u,v)=g(u)*g(v),进而更直接可以得到,高斯模板矩阵G=G1*G2,模板矩阵可以分离为一个列向量G1和一个行向量G2的乘积(矩阵乘法)。且模板并不依赖于像素值,模板独立于像素值,对整幅图像是固定的。

2.对于双边滤波:w=d*r,值域系数r与像素值有关,模板矩阵w不可分解为一个列向量和一个行向量的乘积,模板矩阵w与像素值有关,不独立于整幅图像。

3.滤波可分离的条件:(1)模板独立固定,(2)模板矩阵可分解为一个列向量与行向量的乘积,满足(1)和(2)就可以进行类高斯滤波的分离加速操作。

双边滤波是否可以进行“FFT加速”:双边滤波不可进行基于FFT的加速

基于FFT的滤波加速方法:

1.对模板和图像分别进行补0(扩大到相同尺寸(M1+M2-1)*(N1+N2-1),图像和模板分别放在扩大矩阵的左上角)

2.模板与图像分别进行傅里叶变换DFT(FFT快速算法)

3.对DFT结果进行相乘(元素级相乘)

4.对频域相乘结果进行傅里叶反变换IDFT(IFFT)

5.对傅里叶反变换得到的时域结果进行截取,获得模板与图像的卷积结果

所以,因“基FFT滤波加速”是一次运算直接得到全图的滤波结果,要求滤波模板对全图是固定、独立的,而双边滤波的滤波模板对全图非独立、固定,所以,双边滤波无法进行“基FFT滤波加速”。

而所有的拉普拉斯模板,prewiit,sobel 等全图固定、独立式模板滤波都可以进行“基FFT滤波加速”。

注:因“基FFT滤波加速”要进行补0扩大,DFT,IDFT等操作,DFT和IDFT虽有快速算法,计算复杂度也还是较高,通常,模板尺寸(直径)小于50时,传统方法速度快于“基FFT”。

总结:对于小模板,使用传统法或者若可分离,考虑可分离法,较大的模板,则选择“基FFT滤波加速”法。

“基FFT滤波加速”原理:卷积定理,DFT( f(x)*h(x) ) = DFT( f(x) ) * DFT( h(x) ),两个信号卷积的傅里叶变换等于各自傅里叶变换的乘积(时域卷积等于频域乘积)


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

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

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

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

(0)


相关推荐

  • 什么是SQL_SQL SERVER

    什么是SQL_SQL SERVER参考:SQL中的declare用法sql中的变量定义declare变量是在批处理或过程的主体中用DECLARE语句声明的,并用SET或SELECT语句赋值。而SQL中是以GO语句来区分批处理的。所以在例子中一个简单的if语句中定义的变量,可以在if语句外面使用。…

  • 硬阈值(Hard Thresholding)函数解读[通俗易懂]

    硬阈值(Hard Thresholding)函数解读[通俗易懂]题目:硬阈值(HardThresholding)函数解读1、硬阈值(HardThresholding)函数的符号    硬阈值(HardThresholding)并没有软阈值(SoftThresholding)那么常见,这可能是因为硬阈值解决的问题是非凸的原因吧。硬阈值与软阈值由同一篇文献提出,硬阈值公式参见文献【1】的式(11):     第一次邂逅硬阈值

  • flash怎么强制gc_Adode Flash初级教程

    flash怎么强制gc_Adode Flash初级教程AdodeFlash初级教程(湖南信息职业技术学院xxgc.hniu.cn教务处,湖南长沙410200)第一章入门一、概述1、定义:矢量二维动画2、适用范围:1.针对与网页2.动漫3、特点:a矢量动画制作模式,文件容量小b支持多类型文件导入(图片、视频、音频)c支持流媒体技术d交互动画4、网页四剑客简介adobedreamweaver:是一个网页排版软件,不是设计软件,唯一体现设计软件的地方是c…

  • java的三种工厂模式「建议收藏」

    java的三种工厂模式「建议收藏」一,简单的工厂模式首先举一个例子:我们现在开了一家饭馆:然后呢我们的大厨可以做三种菜,还有一句潇洒的抱怨:   下面客人进场,开始点餐:我们观察上面的代码,虽然很好的完成了任务,但是,我们的三个实现类和和借口紧密的绑定到了一起,这意味着我们的代码耦合出现严重问题,不利于以后的维护,试想顾客点餐需要与后厨大厨直接接触,这肯定是一个不好的体验,那…

  • 2021 idea激活码最新(破解版激活)

    2021 idea激活码最新(破解版激活),https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • 服务器频繁FGC事件「建议收藏」

    服务器频繁FGC事件「建议收藏」持续更新中

发表回复

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

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