导向滤波原理(Guided Filter)

导向滤波是一种高效且能保持图像边缘细节的滤波方法。它利用指导图像计算输出图像,不仅具备线性时间复杂度的优势,还能有效避免边界附近效果不佳的问题。本文详细介绍了导向滤波的基本原理、计算过程及其实现技巧,并通过实例展示了其在图像处理领域的应用价值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

导向滤波原理(Guided Filter)

简介

导向滤波(Guided Fliter)显式地利用 guidance image 计算输出图像,其中 guidance image 可以是输入图像本身或者其他图像。导向滤波比起双边滤波来说在边界附近效果较好;另外,它还具有 O(N) 的线性时间的速度优势。

这里写图片描述

相关工作

  1. Explicit Weighted-Average Filters(显式加权平均滤波器)

双边滤波可以在平滑的过程中保持边缘,但是会出现不希望的 gradient reversal 的 artifact。原因在于如果一个 pixel 周围有较少的相似的 pixel,那么Gaussian weighed average 就会不稳定。 另外就是双边滤波的效率问题,brute-force 实现双边滤波需要 O(Nr^2) 的时间,后来又有文章提出了O(Nlogr) 和 O(N) 的实现方法。但是这些加速方法需要coarse sampling,从而在Nyquist condition被严重破坏的情况下,牺牲了质量。其他此类滤波器还有 Edge-Avoiding Wavelets,Domain Transform Filter。

  1. Implicit Weighted-Average Filters (隐式加权平均滤波器)

优化损失函数,求解线性系统的方法等价与隐式图像滤波。尽管 optimization-based 方法一般可以得到高质量的结果,但是求解线性系统较为费时间。已经有人证明这些隐式的滤波器和显式的是相关联的,显式的滤波器也可以写成求解矩阵问题的形式。

  1. Nonaverage Filters (非均值滤波器)

保边滤波可以不用平均的方法,如中值滤波,可以看成是一个局部的直方图滤波器。 其余还有 Total-Variation filters。非均值滤波器通常都是计算量较大的。

导向滤波(Guided Filter)

除了速度优势以外,导向滤波的一个很好的性能就是可以保持梯度,这是bilateral做不到的,因为会有梯度翻转现象。(Preserves edges, but not gradients)。

![这里写图片描述](https://img-blog.csdn.net/20171222142654517?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZWRvZ2F3YWNoaWE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
而导向滤波可以避免这一缺点。基本原理如下:
![这里写图片描述](https://img-blog.csdn.net/20171222142717433?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZWRvZ2F3YWNoaWE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![这里写图片描述](https://img-blog.csdn.net/20171222142729093?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZWRvZ2F3YWNoaWE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

其中,p为输入图像,I 为导向图,q 为输出图像。在这里我们认为输出图像可以看成导向图I 的一个局部线性变换,其中k是局部化的窗口的中点,因此属于窗口 ω k \omega_k ωk 的pixel,都可以用导向图对应的pixel通过(ak,bk)的系数进行变换计算出来。同时,我们认为输入图像 p 是由 q 加上我们不希望的噪声或纹理得到的,因此有p = q + n 。

接下来就是解出这样的系数,使得p和q的差别尽量小,而且还可以保持局部线性模型。这里利用了带有正则项的 linear ridge regression(岭回归)

![这里写图片描述](https://img-blog.csdn.net/20171222142842136?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZWRvZ2F3YWNoaWE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

求解以上方程得到a和b在局部的值,对于一个要求的pixel可能含在多个window中,因此平均后得到:

![这里写图片描述](https://img-blog.csdn.net/20171222142909980?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZWRvZ2F3YWNoaWE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![这里写图片描述](https://img-blog.csdn.net/20171222142940236?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZWRvZ2F3YWNoaWE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

最后得到的算法为:

![这里写图片描述](https://img-blog.csdn.net/20171222143002233?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZWRvZ2F3YWNoaWE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

其中的fmean是指具有窗口半径r的均值滤波。下面说明为何其可以实现平滑保边的效果。

![这里写图片描述](https://img-blog.csdn.net/20171222143117980?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZWRvZ2F3YWNoaWE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![这里写图片描述](https://img-blog.csdn.net/20171222143134435?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZWRvZ2F3YWNoaWE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

可以看出,如果 I 和 p 相同,那么每个窗口内的 ak 就是输入图像的方差比上方差加 ϵ \epsilon ϵ ,b 等于(1 - ak)乘以该窗口内的原图像的平均值。

  • 如果方差较小,即是一个平滑区域的话,那么方差较小约等于0,则ak约等于方差除以epsilon,因此 ak 约等于 0 。那么bk约等于1, 那么qi = mean§,这样相当于说这个pixel在该窗口内的输出值相当于在这个窗口进行了均值平滑,而考虑到pixel属于多个窗口,如果这是一个平滑区域,那么就相当与多个均值平滑滤波器的级联。
  • 如果方差大,即是边缘的话,ak 就约等于 1 (epsilon很小),因此,b 就约等于0。相当于输出等于输入只是乘以一个约等于1的系数,这样可以保证梯度的比例关系不变。

为了展示GF和BF的效果的相似性,将同一图像经过GF和BF滤波后,计算两个输出的“PSNR”,(It is often considered as visually insensitive when the PSNR >= 40 dB)

![这里写图片描述](https://img-blog.csdn.net/20171222143157002?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZWRvZ2F3YWNoaWE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

下面展示的是可以改善BF梯度翻转的缺陷。

![这里写图片描述](https://img-blog.csdn.net/20171222143212346?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZWRvZ2F3YWNoaWE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

除了平滑保边滤波以外,GF还可以作为结构转移滤波。(Interestingly, the guided filter is not simply a smoothing filter. Due to the local linear model of q = aI+b, the output q is locally a scaling (plus an offset) of the guidance I. This makes it possible to transfer structure from the guidance I to the output q, even if the filtering input p is smooth),因此可以用于feathering/matting 以及 dehazing 等一系列的应用。

文中还提到一个计算fmean时候的加速算法,由于计算每个像素点都要对周围2r+1个点进行求和(1D情况),但是相邻内两个需要计算的像素点实际上只有一个求和的加数有差别,即右边的pixel只是将左边的pixel已经求好的和减去求和时候的最左边一个数,再加上最右边的右边的数值。例如,如果 r=2 求 fmean(5) = f(3) + f(4) + f(5) + f(6) + f(7) ,而fmean(6) = f(4) + f(5) + f(6) + f(7) + f(8) ,因此 fmean(6) = fmean(5) - f(3) + f(8) 。这样计算当r比较大的时候可以显著减少运算量,避免了重复求和。算法如下:

![这里写图片描述](https://img-blog.csdn.net/20171222143303935?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZWRvZ2F3YWNoaWE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

ps : GF 还有更高的提速的算法,通过降采样求出a和b,在升采样回原尺寸,并用来对 I 线性变换。这样时间可以由 O(N) 降低到 O(N/s^2) ,其中s是采样率。

算法如下:

![这里写图片描述](https://img-blog.csdn.net/20171222143333030?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZWRvZ2F3YWNoaWE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

THE END

reference :

[1] K. He, J. Sun, and X. Tang. Guided image filtering. In ECCV, pages 1–14. 2010.

[2] K. He, J. Sun, and X. Tang. Guided image filtering. TPAMI, 35(6):1397–1409, 2013

[3] He K, Sun J. Fast Guided Filter[J]. Computer Science, 2015.

ECCV 2010 presentation slides

2017/12/22 Fri 14:34

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值