Guided Filtering相关记录
一、背景介绍
以前折腾保边滤波时候,刷了一些Guided Filtering相关资料。这里主要是对它们做个算法效果复现和资料简单整理。
二、Guided Filtering
1、基本原理
原版Guided Filtering的提出,主要是为了改善双边滤波做保边平滑滤波器时候的梯度翻转伪影和性能问题。相关算法原理和公式推导,已经有很多小伙伴讲过了,我这里就不做详细介绍了,感兴趣的小伙伴们可以参考:在实现何凯明导向滤波去雾算法,处理中能够出现图像精度损失问题,有什么解决方案?
导向滤波小结:从导向滤波(guided filter)到快速导向滤波(fast guide filter)的原理,应用及opencv实现代码
等相关资料。
2、算法实现
3、算法效果
左边为输入,右边为滤波后结果图像
4、复现代码
网上直接抄过来的复现代码:
https://github.com/yulinghan/ImageQualityEnhancement/blob/master/ltm/guidedfilter/guidedfilter.cppgithub.com/yulinghan/ImageQualityEnhancement/blob/master/ltm/guidedfilter/guidedfilter.cpp
三、Fast Guided Filtering
1、基本原理
这篇论文主要是对原始Guided Filtering的性能优化,基本思想来说是对输入图,引导图和对应的滤波半径,都进行相同倍数下采样,通过减少处理像素来降低算法计算量。
然后对生成的mean_a, mean_b再上采样到原图尺寸,进行后续滤波处理。
2、算法实现
3、算法效果
左边为输入,中间为原版滤波结果,右边为fast版本结果:
4、复现代码
也是网上直接抄过来的复现代码:
ImageQualityEnhancement/ltm/guidedfilter/fast_guidedfilter.cpp at master · yulinghan/ImageQualityEnhancement · GitHub
四、Weighted Guided Filter
1、基本原理
这篇论文的意义在于:对滤波边缘加上权重信息控制,进一步增加增强算法的保边平滑效果。
具体来说,是对Guided Filter中生成a的公式进行改进,原本的计算公式为:
可以看到不管输入图像上,像素是平坦区域还是纹理区域,画红框的正则平滑项都是一个固定值。本篇论文就是对这个做改进。
具体改进措施为,将原本的固定值正则项变为根据像素变化而跟随变化的值,简单来说就是像素越属于平坦区域,那么滤波强度越高,越属于纹理,则对应权重降低。
ε 是一个很小的常数,值被设定为(0.001xL)的平方。
2、算法实现
核心部分代码实现如下所示:
3、算法效果
左边为输入,中间为原版滤波结果,右边为Weighted Guided Filter版本结果
4、复现代码
一样是网上直接抄过来的复现代码:
ImageQualityEnhancement/ltm/guidedfilter/weight_guidedfilter.cpp at master · yulinghan/ImageQualityEnhancement · GitHub
五、Gradient Domain Guided Image Filtering
1、基本原理
本篇是在Weighted Guided Filter上面的进一步拓展,
简单来说,就是进一步将计算a的公式在保边效果上做进一步的改进升级为:
其中:
详细介绍的话,可以参考资料:
Gradient Domain Guided Image Filtering(梯度域导向滤波) - ayew - 博客园
2、算法实现
核心部分算法实现为:
3、算法效果
左边为输入,中间为原版滤波结果,右边为Gradient Domain Guided Image Filtering版本结果:
4、复现代码
简单的代码复现地址:
ImageQualityEnhancement/ltm/guidedfilter/gradient_guidedfilter.cpp at master · yulinghan/ImageQualityEnhancement · GitHub