技術簡介
導向圖濾波 是一種圖像濾波技術 ,通過一張引導圖G(導向圖),對目標圖像P(輸入圖像)進行濾波處理,使得最後的輸出圖像大體上與目標圖像P相似,但是紋理部分與引導圖G相似。其典型套用有兩個:保邊圖像平滑,摳圖。
計算公式
記引導圖(導向圖)為G,輸入圖像為P,輸出圖像為Q,導向圖濾波的目標就是使得原始的輸入和輸出儘可能相同,同時紋理部分與引導圖G相似。
對於目標1:輸入圖像P和輸出圖像Q儘可能相似,可以用公式描述為:
對於目標2:輸出圖像Q的紋理和引導圖G儘可能相似,用公式描述為:
上式中如果Q為單通道圖像,G為多通道,那么a為一個向量;如果Q和G通道數相同,那么a為標量或者對角矩陣。顯然,a的值越小,最後的輸出圖像也就越平滑。
對於目標2,可以對等式兩邊取定積分,從而得到:
下面就導向圖G和輸入圖P分兩種情況進行討論。
1. G為3通道,P為單通道
由於上式只是一個局部線性模型,因此兩個係數其實是一個與位置有關的變數。為了確定其值,考慮一個小視窗 ,使得視窗內的像素同時滿足上面兩個條件,可以將上式帶入第一個式子中得到目標函式(為了防止 a過大,添加了一個懲罰項):
對兩個參數求偏導數得到:
由此可以解得:
上式取平均值操作都是在對應的視窗 中進行的。
2. G和P通道數相同
對於G和P通道數相同的情形,只需要考慮二者均為單通道的情況即可,多通道的情況可以分別進行單通道處理。具體過程與上面的類似,這裡直接給出最後的結果:
套用
1. 保邊圖像平滑
當引導圖G與輸入圖P為同一個圖像的時候,導向圖濾波的效果與雙邊濾波的效果類似,但是不同於雙邊濾波的是,導向圖濾波可以很容易設計一個與濾波半徑無關的最佳化算法 。其中視窗半徑為平滑半徑,參數 為平滑項參數,其值越大平滑的越明顯。
2. 摳圖
當輸入圖P為一個初始的mask圖像時,導向圖濾波的效果類似於摳圖算法,其中視窗半徑為摳圖的半徑,參數 為平滑項。
代碼實現
不難看出,導向圖濾波的主要步驟就兩個,計算每個公式中的各種平均值,然後根據平均值計算出 和 ,最後根據 得到輸出圖像。
計算平均值可以通過積分圖高效的實現,matlab代碼如下:
矩形濾波代碼(計算視窗平均值)