图像滤波---双边滤波和导向滤波的推导与实践
来源:互联网 发布:英译汉用哪个软件好 编辑:程序博客网 时间:2024/06/05 23:41
为了等快要遗忘时候再复习一遍!感谢大神总结:http://blog.csdn.net/pi9nc/article/details/26592377
上一篇文章已经说了引导滤波的基本理论,而且我们也知道引导滤波可以写出时间复杂度与窗口大小无关的算法,现在就来使用C++并借助OpenCV实现这一算法。
实现这种算法的关键思想是盒式滤波(box filter),而且必须是通过积分图来实现的盒式滤波,否则不可能与窗口大小无关,好在opencv的boxFilter函数满足这个要求。
再看看引导滤波的公式
先计算a_k的分子,Ip 在窗口w_k中的和,再除以窗口中像素的个数,刚好就是盒式滤波,因此我们可以将输入的引导图像 I 和滤波图像 p 相乘,并对相乘后的图像做box filtering,即得第一项的结果。后面的和分别为 I 和 p 在窗口w_k中均值,因此分别对 I 和 p 进行box filtering,再将box filtering之后的结果相乘即可。实际上,a_k的分子就是 Ip 在窗口w_k中的协方差。
接下来计算a_k的分母部分。是引导图 I 在窗口w_k中的方差,学过概率论与数理统计的朋友应该知道,方差和期望(均值)之间是有关系的,如下式
因此在计算 I 的方差时,我们可以先计算 I*I 的均值,再减去 I 均值的平方即的平方。在方法上,计算 I*I 的均值和计算 Ip 的均值是一样的。最后,对计算出来的方差图像,加上常量e(每个元素都加e),分母就计算完了,自然,a_k在所有窗口中的值也就得到了。b_k的计算太简单了,大家都懂的。
注意,我们的计算都是对整个图像的,以图像为单位进行计算,所以最后算出的也是两张图,a_k的图(左边)和b_k的图(右边),如下
在图中可以看到,在边缘部分或变化剧烈的部分,a的值接近于1(白色),b的值接近为0(黑色),而在变化平坦的区域,a的值接近0(黑色),b的值为平坦区域像素的均值。这与上一篇文章中所说的规律是一致的。
下面看第二个公式
输出值q又与两个均值有关,分别为a和b在窗口w_i中的均值(不是w_k),所以还是box filtering,我们将上一步得到两个图像都进行盒式滤波,得到两个新图:a_i和b_i,然后用a_i乘以引导图像 I ,再加上b_i,即得最终滤波之后的输出,如下(左边为原图,右边为滤波之后的图像,其中滤波窗口半径为8,e的值为500):
下面是整个算法的代码,仅供参考
- 图像滤波---双边滤波和导向滤波的推导与实践
- 图像滤波---双边滤波和引导滤波的基本原理
- 【拜小白opencv】34-图像平滑处理,6种滤波总结的综合示例【盒式滤波、均值滤波、高斯滤波、中值滤波、双边滤波、导向滤波】
- 双边滤波与导向滤波&何恺明去雾算法
- 双边滤波和引导滤波的原理
- 双边滤波与引导滤波
- 双边滤波与引导滤波
- 双边滤波与引导滤波
- 双边滤波与引导滤波
- 双边滤波与引导滤波
- 双边滤波与引导滤波
- 双边滤波与引导滤波
- 引导滤波和双边滤波
- 双边滤波和冲击滤波
- 图像导向滤波操作
- 图像基础17 图像滤波与除噪——高斯滤波、双边滤波
- 双边滤波的学习
- 双边滤波的终结
- hdu 1568求斐波那契数的前4位 && hdu3117矩阵快速幂
- 深度神经网络(DNN)是否模拟了人类大脑皮层结构?
- RAS 工具类
- Cyrillic script
- ubuntu上pycharm缺少libcupti.so
- 图像滤波---双边滤波和导向滤波的推导与实践
- R语言入门--R中的factor
- 收藏一些好用的网址,也欢迎大家一起提供,我还整理
- spark--transform算子--sample
- 设计模式(17)-中介者模式
- 说说JSON和JSONP,也许你会豁然开朗
- Base64 工具类
- Hadoop Eclipse插件的使用(笔记6)
- JS中URL参数的编解码