天天看點

《精通Matlab數字圖像處理與識别》一6.4 頻域濾波基礎

本節書摘來自異步社群《精通matlab數字圖像處理與識别》一書中的第6章,第6.4節,作者 張铮 , 倪紅霞 , 苑春苗 , 楊立紅,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

精通matlab數字圖像處理與識别

傅立葉變換可以将圖像從空域變換到頻域,而傅立葉反變換則可以将圖像的頻譜逆變換為空域圖像,即人可以直接識别的圖像。這樣一來,我們可以利用空域圖像與頻譜之間的對應關系,嘗試将空域卷積濾波變換為頻域濾波,而後再将頻域濾波處理後的圖像反變換回空間域,進而達到圖像增強的目的。這樣做的一個最主要的吸引力在于頻域濾波的直覺性特點,關于這一點稍後将進行詳細的闡述。

根據著名的卷積定理:兩個二維連續函數在空間域中的卷積可由其相應的兩個傅立葉變換乘積的反變換而得到;反之,在頻域中的卷積可由在空間域中乘積的傅立葉變換而得到,即

《精通Matlab數字圖像處理與識别》一6.4 頻域濾波基礎

其中,f(u, v)和h(u, v)分别表示f(x, y)和h(x, y)的傅立葉變換,而符号<==>表示傅立葉變換對,即左側的表達式可通過傅立葉正變換得到右側的表達式,而右側的表達式可通過傅立葉反變換得到左側的表達式。

式(6-47)構成了整個頻域濾波的基礎,卷積的概念我們曾在第5章空間域濾波中讨論過,而式中的乘積實際上就是兩個二維矩陣f(u, v)和h(u, v)對應元素之間的乘積。

根據式(6-47)進行頻域濾波通常應遵循以下步驟。

(1)計算原始圖像f(x, y)的dft,得到f(u, v)。

(2)将頻譜f(u, v)的零頻點移動到頻譜圖的中心位置。

(3)計算濾波器函數h(u, v)與f(u, v)的乘積g(u, v)。

(4)将頻譜g(u, v)的零頻點移回到頻譜圖的左上角位置。

(5)計算第(4)步計算結果的傅立葉反變換g(x, y)。

(6)取g(x, y)的實部作為最終濾波後的結果圖像。

由上面的叙述易知,濾波能否取得理想結果的關鍵取決于頻域濾波函數h(u, v)。我們常常稱之為濾波器,或濾波器傳遞函數,因為它在濾波中抑制或濾除了頻譜中某些頻率的分量,而保留其他的一些頻率不受影響。本書中我們隻關心其值為實數的濾波器,這樣濾波過程中h的每一個實數元素分别乘以f中對于位置的複數元素,進而使f中元素的實部和虛部等比例的變化,不會改變f的相位譜,這種濾波器也是以被稱為“零相移”濾波器。這樣,最終反變換回空域得到的濾波結果圖像g(x, y)理論上也應當為實函數。然而由于計算舍入誤差等原因,可能會帶有非常小的虛部,通常将虛部直接忽略。

為了更為直覺地了解頻域濾波與空域濾波之間的對應關系,讓我們先來看一個簡單的例子。6.2節中曾指出了原點處的傅立葉變換f(0, 0)實際上是圖像中全部像素的灰階之和。那麼如果我們要從原圖像f(x, y)得到一幅像素灰階和為0的空域圖像g(x, y),就可以先将f(x, y)變換到頻域f(u, v),而後令f(0, 0) = 0(在原點移動到中心的頻譜中為f(m/2, n/2)),再反變換回去。這個濾波過程相當于計算f(u, v)和如下的h(u, v)之間的乘積。

《精通Matlab數字圖像處理與識别》一6.4 頻域濾波基礎

上式中的h(u, v)對應于平移過的頻譜,其原點位于(m/2, n/2)。顯然,這裡h(u, v)的作用就是将點f(m/2, n/2)置零,而其他位置的f(u, v)保持不變。有興趣的讀者可以自己嘗試這個簡單的頻域濾波過程,反變換之後驗證g(x, y)的所有像素灰階之和是否為0。我們将在6.4.2小節詳細地探讨一些具有更高實用性的頻域濾波器。

為友善讀者在matlab中進行頻域濾波,我們編寫了imfreqfilt函數,其用法同空域濾波時使用的imfilter函數類似,調用時需要提供原始圖像和與原圖像等大的頻域濾波器作為參數,函數的輸出為經過濾波處理又反變換回空域之後的圖像。

注意

通常使用fftshift函數将頻譜原點移至圖像中心,是以需要構造對應的原點在中心的濾波器,并在濾波之後使用ifftshift函數将原點移回以進行反變換。

繼續閱讀