導向濾波的原理及實現

2021-08-20 16:39:00 字數 2411 閱讀 3805

一、雙邊濾波

雙邊濾波很有名,使用廣泛,簡單的說就是一種同時考慮了畫素空間差異與強度差異的濾波器,因此具有保持影象邊緣的特性。

先看看我們熟悉的高斯濾波器:

其中w是權重,i和j是畫素索引,k是歸一化常量。公式中可以看出,權重只和畫素之間的空間距離有關係,無論影象的內容是什麼,都有相同的濾波效果。

再來看看雙邊濾波器,它只是在原有高斯函式的基礎上加了一項,如下

其中 i 是畫素的強度值,所以在強度差距大的地方(邊緣),權重會減小,濾波效應也就變小。總體而言,在畫素強度變換不大的區域,雙邊濾波有類似於高斯濾波的效果,而在影象邊緣等強度梯度較大的地方,可以保持梯度。

二、引導濾波

引導濾波是近三年才出現的濾波技術,知道的人還不多。它與雙邊濾波最大的相似之處,就是同樣具有保持邊緣特性。在引導濾波的定義中,用到了區域性線性模型,至於該模型,可以暫時用下圖簡單的理解

該模型認為,某函式上一點與其鄰近部分的點成線性關係,乙個複雜的函式就可以用很多區域性的線性函式來表示,當需要求該函式上某一點的值時,只需計算所有包含該點的線性函式的值並做平均即可。這種模型,在表示非解析函式上,非常有用。

同理,我們可以認為影象是乙個二維函式,而且沒法寫出解析表示式,因此我們假設該函式的輸出與輸入在乙個二維視窗內滿足線性關係,如下

其中,q是輸出畫素的值,i是輸入影象的值,i和k是畫素索引,a和b是當視窗中心位於k時該線性函式的係數。其實,輸入影象不一定是待濾波的影象本身,也可以是其他影象即引導影象,這也是為何稱為引導濾波的原因。對上式兩邊取梯度,可以得到

即當輸入影象i有梯度時,輸出q也有類似的梯度,現在可以解釋為什麼引導濾波有邊緣保持特性了。

下一步是求出線性函式的係數,也就是線性回歸,即希望擬合函式的輸出值與真實值p之間的差距最小,也就是讓下式最小

這裡p只能是待濾波影象,並不像i那樣可以是其他影象。同時,a之前的係數(以後都寫為e)用於防止求得的a過大,也是調節濾波器濾波效果的重要引數。通過最小二乘法,我們可以得到

其中,在計算每個視窗的線性係數時,我們可以發現乙個畫素會被多個視窗包含,也就是說,每個畫素都由多個線性函式所描述。因此,如之前所說,要具體求某一點的輸出值時,只需將所有包含該點的線性函式值平均即可,如下

這裡,w_k是所有包含畫素i的視窗,k是其中心位置。

當把引導濾波用作邊緣保持濾波器時,往往有 i = p ,如果e=0,顯然a=1, b=0是e(a,b)為最小值的解,從上式可以看出,這時的濾波器沒有任何作用,將輸入原封不動的輸出。如果e>0,在畫素強度變化小的區域(或單色區域),有a近似於(或等於)0,而b近似於(或等於)

在濾波效果上,引導濾波和雙邊濾波差不多,在一些細節上,引導濾波較好。引導濾波最大的優勢在於,可以寫出時間複雜度與視窗大小無關的演算法(打算在之後的文章中討論),因此在使用大視窗處理時,其效率更高。

三、opencv實現

mat guidedfilter(mat &img, mat &dst, int r, double esp);

int main()

merge(dst, q);

waitkey();

return 0;

}mat guidedfilter(mat &img, mat &dst, int r, double esp)

結果如下:

聽說導向濾波還有去霧的作用,感興趣的大家可以看看。

卡爾曼濾波原理及實現

前一段時間,做專案研究了一下卡爾曼濾波,並且在專案當中實現了乙個物體跟蹤的功能,所以,藉著新鮮勁兒,本次部落格對卡爾曼濾波進行一次整理。假設我們手頭有一輛diy的移動小車。這輛車的外形是這樣的 這輛車可以在荒野移動,為了便於對它進行控制,需要知道它的位置以及移動速度。所以,建立乙個向量,用來儲存小車...

雙邊濾波器原理及實現

雙邊濾波 bilateral filter 是一種非線性的濾波方法,是結合影象的空間鄰近度和畫素值相似度的一種折衷處理,同時考慮空域資訊和灰度相似性,達到保邊去噪的目的。具有簡單 非迭代 區域性的特點。雙邊濾波器的好處是可以做邊緣儲存 edge preserving 一般過去用的維納濾波或者高斯濾波...

去霧中關於導向濾波的筆記

與雙邊濾波最大的相似之處,就是導向濾波同樣具有保持邊緣特性 關於區域性線性 可以參看下圖,該模型認為,某函式上一點與其鄰近部分的點成線性關係,乙個複雜的函式就可以用很多區域性的線性函式來表示,當需要求該函式上某一點的值時,只需計算所有包含該點的線性函式的值並做平均即可 接下來時導向濾波的原理推導 導...