本文從數學上推導導向濾波的算法,其算法的具體實現在下一篇導向濾波算法的實現介紹。
設引導圖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在邊緣的同一側,(gi-μk)和(gj-μk)符號相同,而當它們在邊緣的兩側時則符號不同。所以Wij(G)當兩個像素點在邊緣的兩側時比在相同邊時要小得多。這就說明隔着邊緣的時候,pj對結果的貢獻很小,窗口像素不會平均到一起。而當j和i在邊緣的同側時,輸出像素qi是同側像素的加權平均值。加權系數由導向圖G決定。因此可以看到,導向濾波確實可以起到保留邊緣的作用。