窗函數在圖像處理中的應用

窗函數在圖像處理中的應用


      上次我初略的講了一下什麼是窗函數,以及窗函數在DSP應用中的例子。之所以要引用窗函數,主要是爲了防止突然的截斷導致的頻譜泄露。頻譜的泄露在DIP的頻域中也是非常常見的,我這裏舉三個例子來說明。如果還不瞭解窗函數的同學請看我寫的這篇文章:https://blog.csdn.net/daduzimama/article/details/80050523


例1, 頻譜混亂的三角函數圖像

下圖是一個45度傾斜的單一頻率的餘弦函數圖像,請注意圖中的邊界都不是均勻過渡到外界的,全是不連續的跳變。


      下面我們來看看這幅圖的頻譜會是什麼樣呢?(下圖)哇,怎麼會這麼亂呢。。。完全無法通過這個頻譜圖去理解一個具有單一頻率的原始信號。


頻譜混亂的原因

究其原因有兩個:

      第一個重要的原因我在上一篇講過了,就是一個域(不論是時域還是頻域)的不連續導致了另一個域的振盪,拖尾,泄漏。所以下圖中的頻譜就會看起來非常的混亂。


     第二個原因就是DFT的週期性。當我們在使用MATLAB中的函數FFT或FFT2的時候,我們一定要意識到,我們所做的計算本質上離散傅里葉級數(爲什麼是級數而不是變換,我會再寫一篇文章說明)Discrete Fourier transform(DFT)。要知道,DFT的計算隱含着默認的週期性,這一週期性不論是在時域還是在頻域都是無窮的,都是無限循環的,從二維信號上講,即沿着X方向循環複製,也在Y方向循環複製。下圖中用紅色方框框出的只是其中的一個週期



      請注意上圖中左圖中(空間域)餘弦信號圖和他相鄰的圖像在紅色邊緣處的各種不連續(discontinuity)。這種不連續直接導致了右圖中(頻率域)及其混亂,複雜的頻譜。所以,在處理任何圖像時,千萬不要忽視了圖像的邊緣。比如說,FFT之前的0填充,這也是一種會經常用到的避免頻譜泄漏的有效方式。


漢寧窗

     現在我們對原始圖像進行加窗,這裏我們選擇的是漢寧窗(hanning window)。下圖爲漢寧窗的時間域函數圖像及其頻譜特徵。

窗函數的參數介紹以及窗函數的選擇我自己涉及的不多,但是我推薦有興趣的讀者看看知乎上的這篇文章:

https://zhuanlan.zhihu.com/p/24318554

總的來說,窗函數都比較光滑,就好像一個高斯滑動均值濾波器磨平了原始信號中邊緣的不連續


上圖來自維基百科。


請注意上圖中我用紅框框出的幾個重要參數,這是衡量窗函數的三個重要指標。


對圖像加窗

加窗後的頻譜圖遠比加窗前的更集中,更清晰




例2, 著名的Cameraman.tiff

     剛纔的那個例子中,空間域的不連續是非常明顯,顯而易見的(TIPS:一個域的不連續導致了另外一個域的頻振盪和拖尾,不只是從空間域/時間域到頻域是這樣,VICE VERSA。)。下面我們在用圖像處理中的經典圖像,攝影師,來看另外一種情況。在這個例子中,邊界上的跳變遠沒有上一個例子那麼明顯,但也會引起頻譜的泄露,污染了(smear)真實的頻譜信息,而這種情況最爲常見,最容易被忽視

下圖爲cameraman的原圖和頻譜圖,注意頻譜圖中我用箭頭標出的一條白色的中軸線,也是頻譜的泄漏造成的。



產生這根白線的原因主要是,原始圖像在DFT週期複製的時候,頭頂的藍天部分較亮,而腳下草坪部分較暗。由於圖像橫向邊緣的灰度值突變(見下圖),在頻譜圖中的Y方向產生了頻譜的泄露。當然了,圖像的縱向邊緣也能看到一些灰度的不平滑過渡,勢必也會引起圖像頻譜在X方向的改變,但在此例中並不明顯。


下面看看加窗後的圖像和加窗後頻譜的改變。



頻譜圖中間的那條白線,沒了!

例3, 上三角矩陣和下三角矩陣

      理論上講上三角矩陣和下三角矩陣的頻譜都應該都只有一條斜線,不管是左斜還有右斜,但是往往大家看到的上/下三角矩陣的頻譜圖當中還有一個十字架。這都是因爲沒有加窗出現了DFT週期性的邊界不連續。


注意圖中的十字架,這是本不該出現在頻譜圖中的成分。


下圖是加窗後的真實頻譜,見下圖。


總結,這篇文章用三個簡單的例子,粗略的解釋了窗函數在DIP中的應用。實際圖像處理的工作中,但凡是用到了頻譜操作,很多時候正確的使用窗函數往往是大有裨益的,不要忘了他!


謝謝收看!

再見!


《聖經》約翰福音14章21節   ------------   有了我的命令又遵守的,這人就是愛我的。愛我的必蒙我父愛他, 我也要愛他,並且要向他顯現。


*配圖與本文無關*

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章