本文从数学上推导导向滤波的算法,其算法的具体实如今下一篇导向滤波算法的实现介绍。html
设引导图G,输入图像P,输出图像Q。导向滤波的目标是使得输入P和输出Q尽可能相同,同时纹理部分和引导图G类似。算法
为了知足第一个目标,使输入P和输出Q尽量类似,咱们要求最小化平方差函数
为了知足第二个目标,使输出图像Q的纹理和引导图G的纹理类似,咱们要spa
积分获得3d
考虑一个小窗口Wk,在Wk内认为a,b保持不变,设为ak,bk。Wk内的像素知足code
(1)htm
把(1)代入第一个目标,使窗口内的像素同时知足上面两个条件。blog
(2)get
其中ε是一个惩罚大的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在边缘的同一侧,(gi-μk)和(gj-μk)符号相同,而当它们在边缘的两侧时则符号不一样。因此Wij(G)当两个像素点在边缘的两侧时比在相同边时要小得多。这就说明隔着边缘的时候,pj对结果的贡献很小,窗口像素不会平均到一块儿。而当j和i在边缘的同侧时,输出像素qi是同侧像素的加权平均值。加权系数由导向图G决定。所以能够看到,导向滤波确实能够起到保留边缘的做用。