本文爲筆者閱讀Kaiming He於2013年發表的guided image filtering時的筆記和實驗合集,作者在文中省略的一些步驟給予了補充,在此記錄下來,希望對後來者有益。
本文分爲如下兩部分:
1.論文閱讀及算法原理介紹
2.基於matlab的簡單實現
- 論文閱讀及算法原理介紹
先給出線性移-變濾波器的基本概念:給出輸入圖像p,指導圖像I,得到輸出圖像,輸入圖像p和指導圖像I可以是同一幅圖像。濾波之後的圖像可以用如下加權公式表示:
qi=j∑Wij(I)pj
其中i爲當前濾波點的索引,j爲濾波器模版覆蓋的所有像素點的索引,濾波器(卷積核)Wij是指導圖像I的函數,與輸入圖像p獨立。
可以用如下圖簡單解釋上述過程:
所謂線性移-變濾波器包含兩個性質:(1)線性性:濾波器通過線性加權進行濾波;(2)移-變:濾波其係數Wij隨着圖像中心的變化而變化,與之相對應的是移-不變濾波器,如傳統的高斯濾波器/邊緣檢測算子等濾波器,一旦濾波器定下來不隨着像素點的移動而改變。上述公式中的下標索引i爲紅色像素點所對應的空間位置(下標),下標索引j爲所有藍色和黃色像素點對應的空間位置。
一個簡單的線性移-變濾波器就是聯合雙邊濾波器,示意圖如下圖:
其核函數爲:
Wijbf(I)=Ki1exp(−σs2∥xi−xj∥2)exp(−σr2∥Ii−Ij∥2)
其中Ki爲歸一化係數,與傳統的雙邊濾波器不同的是,這裏在range方向上用指導圖像I來衡量相似度,如果range方向上相似度用原始圖像來作指導,那麼聯合濾波器就退化爲傳統的雙邊濾波器。
下面給出guided filter的建模及推導過程:guided filter是指導圖像和輸出圖像在一個局部區域內的線性模型,即假定輸出圖像q是指導圖像I在以k爲中心的窗口ωk線性變換:
qi=akIi+bk,∀i∈ωk
這裏(ak,bk)在窗口ωk中爲常數。對公式兩邊求導可知∇q=a∇I,因此如果指導圖像I中爲邊緣的地方,輸出圖像也有邊緣。
通常的加性去噪模型假設輸入圖像p爲輸出圖像q(恢復圖像)加上某些分量n(這裏的n可以理解成噪聲或者某些細小的結構或振盪,比如紋理),因此有如下模型:
pi=qi+ni
寫成輸出圖像的形式:
qi=pi−ni
guided filter建模的思想在於尋找這樣(ak,bk),使得qi=akIi+bk指導濾波之後的輸出圖像qi和輸入圖像儘可能相似(差異儘可能小),基於這樣的想法,很自然就有了將ωk窗口中濾波後的qi和濾波之前的pi的所有誤差(差異)都累加起來,使得誤差最小的(ak,bk)就是我們要找的guided filter,於是很自然就建立的下面的模型:
minE(ak,bk)=mini∈ωk∑(akIi+bk−pi)2
仔細觀察這個模型會發現一個問題,我們尋找輸出qi是爲了在結構上儘可能地和輸入圖像pi相似,但是如果通過求解這個最小化模型給出的結果使得qi和pi相等,即輸出圖像和輸入圖像一模一樣,那麼做這個濾波就失去了意義,在該式中,令bk=0,ak=pi/Ii即可得到描述的結果,此時minE(ak,bk)=0,此乃我們在機器學習/模式識別/人工智能中常說的“過擬合”。於是需要考慮的是改造上面的模型,給它引入一個懲罰項,讓輸出圖像qi儘可能的和輸入圖像pi儘可能相似,但又不能讓它們完全相等,於是給模型加上一個L2範數的正則項,並且給正則項加入一個ϵ來控制懲罰的強度,爲什麼L2範數的正則項可以達到“泛化”和防止“過擬合”的目的,後面會給出一個詳細的解釋。於是上面的模型修正爲:
minE(ak,bk)=mini∈ωk∑((akIi+bk−pi)2+ϵak2)
這樣纔得到了作者在文中給出的模型,這個模型的求解很簡單,不用去查所謂的迴歸分析等內容,這是一個無約束的二次最優話問題,顯然是一個凸優化問題,極值點乃最優點,簡單運用一下高等數學中的極值點的必要條件即可求解出(ak,bk),這裏送佛送到西,給出推導的詳細過程:
使得E(ak,bk)取得極小值的必要條件是:
∂ak∂E(ak,bk)=0∂bk∂E(ak,bk)=0
對E(ak,bk)的具體模型有:
KaTeX parse error: Expected 'EOF', got '&' at position 43: …{\partial a_k} &̲=\sum_{i\in\ome…
先對bk的偏導數進行化簡:
i∈ωk∑(akIi+bk−pi)=0i∈ωk∑bk=i∈ωk∑(pi−akIi)i∈ωk∑bk=i∈ωk∑pi−aki∈ωk∑(Ii)
記ωk中像素的個數有∣ω∣個,那麼
bk∣ω∣=i∈ωk∑pi−aki∈ωk∑Ii
兩邊同時除以∣ω∣
bk=∣ω∣∑i∈ωkpi−ak∑i∈ωkIi=pk−akμk
在對ak的偏導數進行化簡
i∈ωk∑Ii(akIi+bk−pi)+ϵak=0i∈ωk∑(akIi2+Iibk−Iipi+ϵak)=0
將上面求出的bk公式帶入該式,有
i∈ωk∑akIi2+Ii(pk−akμk)−Iipi+ϵak=0i∈ωk∑(Ii2−Iiμk+ϵ)ak+Iipi=0aki∈ωk∑(Ii2−Iiμk+ϵ)=i∈ωk∑(Iipi−Iipk)
ak=∑i∈ωk(Ii2−Iiμk)+∑i∈ωkϵ∑i∈ωk(Iipi−Iipk)=∑i∈ωk(Ii2−Iiμk)+∣ω∣ϵ∑i∈ωkIipi−pk∑i∈ωkIi=ω1∑i∈ωk(Ii2−Iiμk)+ϵ∣ω∣1∑i∈ωkIipi−∣ω∣pk∑i∈ωkIi=∣ω∣1∑i∈ωk(Ii2−Iiμk)+ϵ∣ω∣1∑i∈ωkIipi−pkμk=∣ω∣1∑i∈ωkIi2−μk∣ω∣∑i∈ωkIi+ϵ∣ω∣1∑i∈ωkIipi−pkμk=∣ω∣1∑i∈ωkIi2−μk∣ω∣∑i∈ωkIi+ϵ∣ω∣1∑i∈ωkIipi−pkμk=∣ωk∣1∑i∈ωkIi2−μkμk+ϵ∣ωk∣1∑i∈ωkIipi−pkμk=∣ω∣1∑i∈ωkIi2−μk2+ϵ∣ω∣1∑i∈ωIipi−pkμk
由方差定義,
E(X−X)2=EX2−2EXX+EX2=EX2−2XEX+EX2=EX2−2XEX+EX2=EX2−2XX+X2=EX2−X2
於是有,
ak=σk2+ϵ∣ω∣1∑i∈ωkIipi−pkμk
至此,算法的建模和求解的理論推導過程完畢。
guided filter的計算算法的僞代碼描述如下:
嚴格來說,至此算法部分已經結束,後面部分從理論和應用角度來理解guided filter在實際的濾波過程中和傳統濾波器的關係及其相對於傳統濾波器所體現出來的優點。
邊緣保持特性:guided filter在用作平滑濾波器具有邊緣保持特性,在此我麼以I=p的特殊情況爲例,從理論角度分析guided filter的邊緣保持性質。
將I=p代入(ak,bk)的求解公式中,有
ak=σk2+ϵσk2bk=(1−ak)μk
當ϵ=0時,有ak=1,bk=0,此時濾波後的圖像爲qi=akIi+bk=Ii=pi等價於完全沒有濾波。
當ϵ>0時,有如下兩種情況:
(1)指導圖像像素值在ωk的小窗口內有劇烈變化,即高方差區域,σk2遠大於ϵ
ak=1,bk=0
濾波後圖像爲:
qi=akIi+bk≈Ii≈pi
也就是說在變化明顯的區域,該區域濾波後幾乎保持不變,從而具有很好的邊緣保持特性。
(2)指導圖像像素在ωk的小窗口內變化不大,即平坦區域,σk2接近於0,σk2遠小於ϵ
ak≈0,bk≈μk
濾波後圖像爲:
qi=akIi+bk≈μk
也就是說在變化不怎麼明顯的平坦區域,該區域濾波後相當於對該區域做了均值濾波,從而對平坦區域就有很好的平滑作用。
將guided filter的參數和雙邊濾波器類比:r↔σs,ϵ↔σr2參數支箭有一個廣義上類似的作用。
在本部分的開頭碩大guided filter時一個線性移-變濾波器,這裏我們結合公式推導來給出guided filter的線性移-變濾波器形式,並給出其物理上的解釋。移變濾波器公式爲:
qi=j∑Wij(I)pj
兩邊同時對pj求偏導數,即可推出guided filter作爲線性移-變濾波器的具體公式:
Wij(I)=∂pj∂qi
將qi=akIi+bk=∣ω∣1∑k∣iinwkakIi+pk=∣ω∣1∑k∣iinwkak(Ii−μk)+pk以及ak的具體公式代入上式,有
Wij(I)=ω1k∑(∂pj∂ak(Ii−μk)+∂pj∂pk)
∂pj∂pk=∣ω∣1∂pj∂(p1+⋯+p∣ω∣)=∣ω∣1δk∈ωk
∂pj∂ak=σk2+ϵ1(∣ω∣1i∈ωk∑∂pj∂piIi−∂pj∂qkμk)=σk2+ϵ1(∣ω∣1Ij−∣ω∣1μk)δk∈wj
將二式代入移-變濾波器中,有
Wij(I)=∂pj∂qi=∣ω∣21i∈ωi,j∈ωj∑(1+σk2+ϵ(Ii−μk)(Ij−μk))
當Ii−μk和Ij−μk符號相同,即在以像素塊ωk的均值μk的度量下符號相同,即像素點相似,那麼對應的移-變濾波器係數大,從而加權的權重更大;反之,符號相反,差異很大,權重係數小。從而,從濾波器的角度也解釋了guided filter具有邊緣保持和平滑濾波特性。如果把圖像理解爲隨機場的話:
σk2+ϵ(Ii−μk)(Ij−μk)
可以理解爲調製後的相關函數,相關函數越逼近1,說明相關性越大,從而兩個像素對應的像素相似度越高,反之越逼近-1,說明相關性越小,圖像相似度越小。
Guided filter的梯度保持特性:
設輸入信號爲p,它的的base部分爲q,細節部分爲d=p−q,在I=p時,ak=σk2+ϵσk2<1
那麼
∂xd=∂xp−∂xq=(1−ak)∂xp
這說明細節的梯度方向和原始信號的梯度方向一致,不會出現梯度方向反轉。
上圖中bilateral filter的細節部分出現了明顯的梯度反轉,而guided filter則保持梯度方向不變。這反應在圖像上就是在邊緣部分,一個有或多或少的振鈴現象,另一個則能夠避免這樣的現象出現。
guide filter面對三位彩色圖像的情形也很容易推廣,在這裏就不再贅述了。
這裏補充一下爲什麼在建模的時候加入L2範數正則化:
很多做過病態反問題的人給出的回答時,正則化的引入可以帶來更穩定的數值解,而不至於在輸入引入很小的擾動時,數值解很大地偏離了理論解。
做模式識別的人給出的回答是正則化的引入可以防止過擬合,給訓練系統更好的泛化能力。在前面的建模部分,也分析了guided filter在指導圖像和輸入圖像一致時,L2範數正則化在一定程度上防止了過擬合情形的出現,下面給出L2範數正則化防止過擬合的理論依據。
假定最優化模型已經建立,最優化目標函數爲:J(ω;X,y),給目標函數加入L2範數正則項∣∣ω∣∣=2αωTω,新的目標函數爲:
Jnew(ω;X,y)=∇ωJ(ω;X,y)+αω
對其求梯度,有
∇ωJnew(ω;X,y)=∇ωJ(ω;X,y)+αω
對於ω⋆=argωminJ(ω;X,y)現在我們將多元函數J(ω;X,y)在ωstar做一個二階的泰勒近似,於是有:
J~(ω)=J(ω⋆)+21(ω−ω⋆)TH(ω−ω⋆)
這裏H爲J的Hessian矩陣,對其求偏導數,沒有梯度項時因爲極點值必要條件:梯度在極點爲零,有
∇ωJ~(ω)=H(ω−ω⋆)
在極點值處,顯然上式爲零,現在考慮加入L2範數正則項,
αω+H(ω−ω⋆)=0
(H+αI)ω=Hω⋆
ω=(H+αI)−1ω⋆
在α很接近0時,此時的ω和沒有正則項的極值點很接近,那麼α逐漸增大呢?
由於Hessian矩陣時一個實的對稱矩陣,因此可以對其做正交分解,即存在正交矩陣Q和對角矩陣Λ使得H=QΛQT,於是有
ω=(QΛQT+αI)−1QΛQTω⋆=[Q(Λ+αI)QT]−1QΛQTω⋆=Q(Λ+αI)−1QTQΛQTω⋆=Q(Λ+αI)−1ΛQTω⋆
(Λ+αI)−1Λ=⎝⎜⎜⎛λ1+αλ2+α⋱λn+α⎠⎟⎟⎞−1⎝⎜⎜⎛λ1λ2⋱λn⎠⎟⎟⎞=⎝⎜⎜⎛λ1+αλ1λ2+αλ2⋱λn+αλn⎠⎟⎟⎞
這說明α對特徵值起到了衰減調製作用,遠小於α的特徵值,在α的調製下幾乎不能對系統特徵起到作用,而想法,在α的調製下保留了那些相對於α同一數量級甚至更高數量級的特徵。這纔是L2正則化得以能夠進行繁華的理論原因。這裏的ω就是guided filter濾波器中的ak,α即爲guided filter中的ϵ。
到這裏權重調製的作用已經很清晰了,可能有的讀者線性代數功底不夠,更進一步完善一下細節。
記Q=[q1,q2,⋯,qn],分量爲列向量,那麼QT=[q1,q2,⋯,qn]T=,代入ω中,有
ω=Q(Λ+αI)QTω∗=(q1,q2,⋯,qn)⎝⎜⎜⎛λ1+αλ1λ2+αλ2⋱λn+αλn⎠⎟⎟⎞⎝⎜⎜⎜⎛q1Tq22⋮qn2⎠⎟⎟⎟⎞ω∗=(i=1∑nλi+αλiqiqiT)∗ω∗
到這裏就非常清晰了,如果α遠大於某些特徵值,那麼這個值對應的權重爲1+∞1≈0,對應的特徵在正則項的調製下可以忽略不計,反之則該特徵值對應的特徵很強,對應的權重也很大,是主要特徵。反映到guided filter中,就對應了ϵ對ak的調製作用,指導圖像的ωk圖像塊的方差就對應了這裏的特徵值λ,ϵ/σk2的相對大小,就決定了對應的權重調製到什麼程度。
2.基於matlab的簡單實現
該部分僅僅從guided filter的原理層面對其進行matlab簡單實現,筆者一直認爲matlab只是驗證算法正確性的工具,代碼儘可能貼近原理,算法性能優化及性能對比還是以c/cpp等工程應用編程語言爲準,其O(N)的快速算法這裏不涉及。matlab自帶的imfilter本身經過加速,用for循環進行計算反而會降低其速度。
爲了方便和原理對比,這裏再貼一下算法的僞代碼描述:
單通道灰度圖像實現
function q = guided_filter(I, p, r, epsilon)
% demo realization of guided filter
% just used to illustrate the principle of guided filter
w = fspecial('average', 2*r+1);
mean_I = imfilter(I, w);
mean_p = imfilter(p, w);
corr_I = imfilter(I.*I, w);
corr_Ip = imfilter(I.*p, w);
var_I = corr_I - mean_I .* mean_I;
cov_Ip = corr_Ip - mean_I .* mean_p;
a = cov_Ip ./ (var_I + epsilon);
b = mean_p - a .* mean_p;
mean_a = imfilter(a, w);
mean_b = imfilter(b, w);
q = mean_a .* I + mean_b;
end
參考文獻:
- KaiMing He, Jian Sun and Xiaoou Tang, Guided Image Filtering, IEEE Trans on PAMI, Vol, No.6, June 2013, P1397-1409
- Ian Goodfellow, Yoshua Bengio, Aaron Courville, Deep Learning, Chap7 Regularization for Deep Learning, P231-234.