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

双边滤波器是同时考虑空间域和值域信息的类似传统高斯平滑滤波器的图像滤波、去噪、保边滤波器。其模板系数是空间系数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)


相关推荐

  • linux安装busybox教程

    linux安装busybox教程获取软件包下载busybox安装包1.31.0当前最新稳定版本,并解压:wgethttps://qqq-1253133144.cos.ap-chengdu.myqcloud.com/bbb/busybox-1.31.0.tar.bz2tar-xjvfbusybox-1.31.0.tar.bz2编译环境配置l编译和安装busybox:cdbusybox-1.31.0/makedefconfig&&makeinstallbusyb.

  • SM8S33、TVS瞬态抑制二极管在汽车上的问题与应用

    SM8S33、TVS瞬态抑制二极管在汽车上的问题与应用随着经济的发展,现代汽车工业也在的高速发展,汽车的电子化、数字化、自动化、通讯化、自动驾驶等相关模块的成为汽车行主流方向;于此同时系统之间的EMC电磁兼容就显得尤为重要,我们专门为电气化的设计提供了高效的保护方案与应用!汽车电源系统的应用:1.首先了解一下基本情况:虽然高浪涌电压是汽车电路保护系统的应对对象,但是也要注意钳位的电压高度。电源系统,12V与24V的电池在指定的环境下最大输出电压的值。常见的稳压器和DC-DC转换器IC的最大输入电压的值。EMC电磁问题的解决,汽车电子系统是干扰源复杂

  • 【spring】事务管理的实现

    【spring】事务管理的实现【spring】事务管理的实现

  • redis五大类型用法

    redis五大类型用法

  • MQTT学习笔记(6)搭建本地MQTT服务器

    MQTT学习笔记(6)搭建本地MQTT服务器搭建EMQTT下载地址下载emqttd-windows10-v2.3.11.zip解压后cd到bin目录,执行emqttdconsole执行成功会弹出下面窗口,不成功就关掉cmd重新试下打开浏览器输入http://127.0.0.1:18083默认用户名admin默认密码public进入如下界面框起来的点进去看看就知道了。注意如果你用w…

  • Java中重载与重写的特点和区别[通俗易懂]

    Java中重载与重写的特点和区别[通俗易懂]一、重载(overload)重载:发生在Java的同一个类里面,通过定义相同的方法,定义不同的参数列表来区分开这些相同的方法,参数列表的不同可以是参数的类型、参数的个数和参数的顺序。当我们调用这些方法的时候通过传入参数的不同,在运行时Java虚拟机会自行调用不同的方法来进行处理。由于Java的修饰符都可以访问同一个类里面的方法,所以方法的重载与方法的修饰符无关;Java的返回值不能区别这些方法,因为返回值是在运行后才体现出来的,而两个参数列表相同仅仅是返回值相同的方法在Java编译时就会报错,虚拟机在运行

发表回复

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

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