1. 程式人生 > >數字影象處理,讀懂頻域處理的“傅立葉變換”

數字影象處理,讀懂頻域處理的“傅立葉變換”

轉載自:https://blog.csdn.net/ebowtang/article/details/39004979

以下部分文字資料整合於網路,本文僅供自己學習用!

這是一幅很絕的一維傅立葉變換動態圖



一,讀懂傅立葉變換

一個訊號能表示成傅立葉級數的形式是有條件的,首先它必須是週期訊號,第二必須是滿足狄裡赫利條件的週期訊號。

1,關於兩大域:時域與頻域

(1),頻域(frequency domain)是指在對函式或訊號進行分析時,

分析其和頻率有關部份,而不是和時間有關的部份,和時域一詞相對。

(2),時域是描述數學函式或物理訊號對時間的關係。

例如一個訊號的時域波形可以表達訊號隨著時間的變化。
若考慮離散時間,時域中的函式或訊號,在各個離散時間點的數值均為已知。
若考慮連續時間,則函式或訊號在任意時間的數值均為已知。在研究時域的訊號時,常會用示波器將訊號轉換為其時域的波形。

(3),兩者相互間的變換
時域(訊號對時間的函式)和頻域(訊號對頻率的函式)的變換在數學上是通過積分變換實現。
對週期訊號可以直接使用傅立葉變換,對非週期訊號則要進行週期擴充套件,使用拉普拉斯變換。



2,傅立葉變換

(1),什麼是傅立葉變換?
也稱作傅立葉變換,表示能將滿足一定條件的某個函式表示成三角函式(正弦和/或餘弦函式)或者它們的積分的線性組合。在不同的研究領域,傅立葉變換具有多種不同的變體形式,如連續傅立葉變換和離散傅立葉變換。最初傅立葉分析是作為熱過程的解析分析的工具被提出的。傅立葉變換是一種分析訊號的方法,它可分析訊號的成分,也可用這些成分合成訊號。許多波形可作為訊號的成分,比如正弦波、方波、鋸齒波等,傅立葉變換用正弦波作為訊號的成分。
傅立葉變換的實質是將一個訊號分離為無窮多多正弦/復指數訊號的加成,也就是說,把訊號變成正弦訊號相加的形式——既然是無窮多個訊號相加,那對於非週期訊號來說,每個訊號的加權應該都是零——但有密度上的差別,你可以對比概率論中的概率密度來思考一下——落到每一個點的概率都是無限小,但這些無限小是有差別的所以,傅立葉變換之後,橫座標即為分離出的正弦訊號的頻率,縱座標對應的是加權密度
(2),傅立葉變換有什麼用呢?
舉例說明:傅立葉變換可以將一個時域訊號轉換成在不同頻率下對應的振幅及相位,其頻譜就是時域訊號在頻域下的表現,而反傅立葉變換可以將頻譜再轉換回時域的訊號。最簡單最直接的應用就是時頻域轉換,比如在行動通訊的LTE系統中,要把接收的訊號從時域變成頻域,就需要使用FFT。又例如對一個採集到的聲音做傅立葉變化就能分出好幾個頻率的訊號。比如南非世界盃時,南非人吹的嗚嗚主拉的聲音太吵了,那麼對現場的音訊做傅立葉變化(當然是對聲音的資料做),會得到一個展開式,然後找出嗚嗚主拉的特徵頻率,去掉展開式中的那個頻率的sin函式,再還原資料,就得到了沒有嗚嗚主拉的嗡嗡聲的現場聲音。而對圖片的資料做傅立葉,然後增大高頻訊號的係數就可以提高影象的對比度。同樣,相機自動對焦就是通過找影象的高頻分量最大的時候,就是對好了。



3,快速傅立葉變換

(1),什麼是快速傅立葉變換?
計算離散傅立葉變換的一種快速演算法,簡稱FFT。快速傅立葉變換是1965年由J.W.庫利和T.W.圖基提出的。採用這種演算法能使計算機計算離散傅立葉變換所需要的乘法次數大為減少,特別是被變換的抽樣點數N越多,FFT演算法計算量的節省就越顯著。


(2),快速傅立葉變換有什麼用?
函式或訊號可以透過一對數學的運運算元在時域及頻域之間轉換。和傅立葉變換作用一樣!


(3),為什麼要提出快速傅立葉變換?
人們想讓計算機能處理訊號 但由於訊號都是連續的、無限的,計算機不能處理,於是就有了傅立葉級數、傅立葉變換,將訊號由時域變到頻域,把一個訊號變為有很多個不同頻率不同幅度的正弦訊號組成,這樣計算機就能處理了,但又由於傅立葉變換中要用到卷積計算,計算量很大,計算機也算不過來,於是就有了快速傅立葉變換,大大降低了運算量,使得讓計算機處理訊號成為可能。快速傅立葉變換是傅立葉變換的快速演算法而已,主要是能減少運算量和儲存開銷,對於硬體實現特別有利。

4,影象中傅立葉變換的物理意義

(1),影象的頻率是表徵影象中灰度變化劇烈程度的指標,是灰度在平面空間上的梯度。如:大面積的沙漠在影象中是一片灰度變化緩慢的區域,對應的頻率值很低;而對於地表屬性變換劇烈的邊緣區域在影象中是一片灰度變化劇烈的區域,對應的頻率值較高。傅立葉變換在實際中有非常明顯的物理意義,設f是一個能量有限的模擬訊號,則其傅立葉變換就表示f的譜。從純粹的數學意義上看,傅立葉變換是將一個函式轉換為一系列周期函式來處理的。從物理效果看,傅立葉變換是將影象從空間域轉換到頻率域,其逆變換是將影象從頻率域轉換到空間域。換句話說,傅立葉變換的物理意義是將影象的灰度分佈函式變換為影象的頻率分佈函式,傅立葉逆變換是將影象的頻率分佈函式變換為灰度分佈函式


(2),傅立葉變換以前,影象(未壓縮的點陣圖)是由對在連續空間(現實空間)上的取樣得到一系列點的集合,我們習慣用一個二維矩陣表示空間上各點,則影象可由z=f(x,y)來表示。由於空間是三維的,影象是二維的,因此空間中物體在另一個維度上的關係就由梯度來表示,這樣我們可以通過觀察影象得知物體在三維空間中的對應關係。為什麼要提梯度?因為實際上對影象進行二維傅立葉變換得到頻譜圖,就是影象梯度的分佈圖,當然頻譜圖上的各點與影象上各點並不存在一一對應的關係,即使在不移頻的情況下也是沒有。傅立葉頻譜圖上我們看到的明暗不一的亮點,實際上影象上某一點與鄰域點差異的強弱,即梯度的大小,也即該點的頻率的大小(可以這麼理解,影象中的低頻部分指低梯度的點,高頻部分相反)。一般來講,梯度大則該點的亮度強,否則該點亮度弱。這樣通過觀察傅立葉變換後的頻譜圖,也叫功率圖,我們首先就可以看出,影象的能量分佈,如果頻譜圖中暗的點數更多,那麼實際影象是比較柔和的(因為各點與鄰域差異都不大,梯度相對較小),反之,如果頻譜圖中亮的點數多,那麼實際影象一定是尖銳的,邊界分明且邊界兩邊畫素差異較大的。對頻譜移頻到原點以後,可以看出影象的頻率分佈是以原點為圓心,對稱分佈的。將頻譜移頻到圓心除了可以清晰地看出影象頻率分佈以外,還有一個好處,它可以分離出有周期性規律的干擾訊號,比如正弦干擾,一副帶有正弦干擾,移頻到原點的頻譜圖上可以看出除了中心以外還存在以某一點為中心,對稱分佈的亮點集合,這個集合就是干擾噪音產生的,這時可以很直觀的通過在該位置放置帶阻濾波器消除干擾


二,理性認識傅立葉變換

1,二維傅立葉fft2對簡單矩陣的操作

(可以把s想象成一幅影象,傅立葉變換過程如下)


  
  1. s=magic( 2);%magic矩陣有一個神奇的特點:每行或者每列加起來都相等
  2. f=fft2(s);
  3. a= abs(f)
  4. a =
  5. 10 0
  6. 2 4
  7. >> f
  8. f =
  9. 10 0
  10. -2 -4
  11. >> s
  12. s =
  13. 1 3
  14. 4 2
  15. % 3* 3的矩陣的操作結果
  16. s=magic( 3);
  17. f=fft2(s);
  18. a= abs(f)
  19. a =
  20. 45.0000 0 0
  21. 0.0000 15.5885 5.1962
  22. 0.0000 5.1962 15.5885
  23. >> f
  24. f =
  25. 45.0000 0 0
  26. 0 + 0.0000i 13.5000 + 7.7942i 0.0000 - 5.1962i
  27. 0 - 0.0000i 0.0000 + 5.1962i 13.5000 - 7.7942i
  28. >> s
  29. s =
  30. 8 1 6
  31. 3 5 7
  32. 4 9 2
  33. % 4* 4的矩陣操作結果
  34. s=magic( 4);%magic矩陣有一個神奇的特點:每行或者每列加起來都相等
  35. f=fft2(s);
  36. a= abs(f)
  37. a =
  38. 136.0000 0 0 0
  39. 0 20.0000 11.3137 12.0000
  40. 0 45.2548 0 45.2548
  41. 0 12.0000 11.3137 20.0000
  42. >> f
  43. f =
  44. 1.0e+02 *
  45. 1.3600 0 0 0
  46. 0 0.2000 0.0800 + 0.0800i 0 - 0.1200i
  47. 0 0.3200 + 0.3200i 0 0.3200 - 0.3200i
  48. 0 0 + 0.1200i 0.0800 - 0.0800i 0.2000
  49. >> s
  50. s =
  51. 16 2 3 13
  52. 5 11 10 8
  53. 9 7 6 12
  54. 4 14 15 1

2,二維快速傅立葉fft2對灰度圖的操作


  
  1. <span style= "font-size:12px;">clear all;
  2. close all;
  3. I=imread( 'peppers.png');%讀入影象
  4. J=rgb2gray(I);%將影象轉換為灰度圖
  5. K=fft2(J);%對影象進行二維快速傅立葉變換
  6. K=fftshift(K);%將頻譜轉移到中心,其實就是在傅立葉變換時乘以了某個因子
  7. L= abs(K/ 256);%取模
  8. %顯示圖片
  9. figure;
  10. subplot( 131);
  11. imshow(I);title( '原影象')
  12. subplot( 132);
  13. imshow(J);title( '被轉換為灰度圖後')
  14. subplot( 133);
  15. imshow(uint8(L));title( '二維傅立葉變換後的頻譜圖')</span>



  
  1. clear all; close all;
  2. I=imread( 'peppers.png');%讀入影象
  3. J=rgb2gray(I);%轉換為灰度圖
  4. J=imrotate(J, 45, 'bilinear'); %將影象旋轉 45度角
  5. K=fft2(J);%對影象進行二維傅立葉比變換
  6. K=fftshift(K);%轉移頻譜中心
  7. L= abs(K/ 256);%取模
  8. figure;
  9. subplot( 121);
  10. imshow(J);title( '原影象被旋轉45度角')
  11. subplot( 122);
  12. imshow(uint8(L));title( '傅立葉變換後的影象')



  
  1. clear all; close all;
  2. I=imread( 'peppers.png');
  3. J=rgb2gray(I);
  4. J=imnoise(J, 'gaussian', 0, 0.01);%加入高斯噪聲
  5. K=fft2(J);
  6. K=fftshift(K);
  7. L= abs(K/ 256);
  8. figure;
  9. subplot( 131);
  10. imshow(I);title( '原影象')
  11. subplot( 132);
  12. imshow(J);title( '高斯噪聲汙染')
  13. subplot( 133);
  14. imshow(uint8(L));title( '汙染後進行福利葉變換')



  
  1. clear all; close all;
  2. I=imread( 'onion.png');
  3. J=rgb2gray(I);
  4. K=fft2(J);%傅立葉變換
  5. L=fftshift(K);%轉移頻譜中心
  6. L= abs(L/ 256);%取模
  7. M=ifft2(K);%二維傅立葉反變換
  8. figure;
  9. subplot( 131);
  10. imshow(J);title( '原灰度影象')
  11. subplot( 132);
  12. imshow(uint8(L));title( '傅立葉變換後的影象')
  13. subplot( 133);
  14. imshow(uint8(M));title( '反變換後的影象')


參考資源:

【1】http://blog.csdn.net/struggle_for_m/article/details/51207370

【2】動態圖來源於“維基百科”

【3】https://zhuanlan.zhihu.com/p/19763358?columnSlug=wille