本文从数学上推导导向滤波的算法,其算法的具体实现在下一篇导向滤波算法的实现介绍。

设引导图G,输入图像P,输出图像Q。导向滤波的目标是使得输入P和输出Q尽可能相同,同时纹理部分和引导图G相似。

为了满足第一个目标,使输入P和输出Q尽可能相似,我们要求最小化平方差

为了满足第二个目标,使输出图像Q的纹理和引导图G的纹理相似,我们要

积分得到

考虑一个小窗口Wk,在Wk内认为a,b保持不变,设为ak,bk。Wk内的像素满足

  (1)

把(1)代入第一个目标,使窗口内的像素同时满足上面两个条件。

  (2)

其中ε是一个惩罚大的ak的正则化参数。使(2)最小,满足

其中|W|是窗口Wk的像素总数。解得

  (3)

  (4)

如果设/pk是输入图P在窗口Wk的平均值,μk和σk2是引导图G在窗口Wk的平均值和方差。我们发现

  (5)

  (6)

其中是引导图G和输入图P在Wk的协方差。

计算出ak,bk后,就可以根据(1)来计算窗口Wk的输出像素。对于一个像素i,输出值qi和所有覆盖像素i的窗口Wk有关。所以当Wk不同,qi的值也不相同。一个简单的策略是平均所有可能的qi值。计算了所有覆盖i的窗口Wk的ak,bk,所有覆盖像素i的窗口Wk的个数为|W|,那么

  (7)

  (8)

其中

-----------------------------------------

特别的,当引导图G和输入图像P相同的时候,导向滤波出现边缘保持平滑特性,分析如下。当G=P时,很明显,由式(5)(6)得到。当ε=0时,ak=1,bk=0,即输出和输入图像相同。如果ε>0,考虑两种情况。

第一种,高方差。如果图像P在窗口Wk中有很多变化,那么σk2>>ε,有ak≈1,bk≈0

第二种,平坦块。那么σk2<<ε,有ak≈0,bk≈μk。如果整个输入图像都如窗口Wk似的很平坦的,当ak,bk被平均后得到/ak≈0,/bk≈μk,qi≈μk

这样,当一个像素在高方差的窗口中时,它的输出值是不变的。在平坦区域中,它的输出值变成周围窗口像素的平均值。具体的,高方差和平坦的标准是由参数ε控制的。如果窗口的方差比此参数小的多则被平滑,那么方差大得多的则被保留。而窗口的大小决定了是参考周围多大范围的像素来计算方差和均值。

------------------------------------------

至此,已经可以根据(5)~(8)式计算导向滤波的参数,从而计算输出图像Q。导向滤波的的算法实现在下一篇文章介绍。下面把导向滤波用通用滤波器核来表达进行进一步分析。

导向滤波在像素点i的滤波结果可以表达为一个加权平均

  (9)

其中i,j都是像素下标。滤波器核Wij是引导图G的函数并且与P独立。下面计算滤波器核。把(6)带入(8)消去b得到:

  (10)

求偏导

  (11)

其中

  (12)

当j处于窗口Wk时,否则为0

  (13)

把(12)(13)带入(11)得到

  (14)

考虑含有边缘阶跃信号的图像,如果i,j在边缘的同一侧,(gik)和(gjk)符号相同,而当它们在边缘的两侧时则符号不同。所以Wij(G)当两个像素点在边缘的两侧时比在相同边时要小得多。这就说明隔着边缘的时候,pj对结果的贡献很小,窗口像素不会平均到一起。而当j和i在边缘的同侧时,输出像素qi是同侧像素的加权平均值。加权系数由导向图G决定。因此可以看到,导向滤波确实可以起到保留边缘的作用。