当前位置:网站首页>双边滤波加速「建议收藏」
双边滤波加速「建议收藏」
2022-07-31 15:06:00 【全栈程序员站长】
大家好,又见面了,我是你们的朋友全栈君。
双边滤波器是同时考虑空间域和值域信息的类似传统高斯平滑滤波器的图像滤波、去噪、保边滤波器。其模板系数是空间系数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) ),两个信号卷积的傅里叶变换等于各自傅里叶变换的乘积(时域卷积等于频域乘积)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/128340.html原文链接:https://javaforall.cn
边栏推荐
猜你喜欢
Synchronized and volatile interview brief summary
深入浅出边缘云 | 4. 生命周期管理
Introductory UnityShader learning (2) - the rendering pipeline
网银被盗?这篇文章告诉你如何安全使用网银
Public Key Retrieval is not allowed error solution when DBeaver connects to MySQL 8.x
工程力学复习资料
[CUDA study notes] First acquaintance with CUDA
The meaning of node_exporter performance monitoring information collection in Prometheus
Female service community product design
Excel快速对齐表格的中姓名(两个字姓名和三个字姓名对齐)
随机推荐
微服务架构选型
【CUDA学习笔记】初识CUDA
OpenShift 4 - 定制 RHACS 安全策略,阻断生产集群使用高风险 Registry
Nuget package and upload tutorial
工程力学复习资料
Network cable RJ45 interface pins [easy to understand]
Ubantu专题5:设置静态ip地址
易驱线主控芯片对比(电动三轮电机90O瓦世纪通达)
Essential Learning for Getting Started with Unity Shader - Transparency Effect
力扣:738.单调递增的数字
sentinel与nacos持久化
Message queue data storage MySQL table design
R language ggplot2 visualization: use the ggboxplot function of the ggpubr package to visualize the box plot, use the font function to customize the font size, color, style (bold, italic) of the legen
Unity Shader入门精要学习——透明效果
定时器的类型
Destruction order of thread_local variables
为什么黑客领域几乎一片男生?
分成两栏后文字顺序混乱的问题解决【写期刊论文时】
思路迪医药冲刺港股:5个月亏2.9亿 泰格医药与先声药业是股东
学习笔记12--路径-速度分解法之局部路径搜索