2019年5月8日 星期三

1051549的作業3

離散傅立葉轉換DFT練習

題目說明


讀取一張256色灰階圖像,計算輸入圖的離散傅立葉轉換結果,並將頻譜大小跟相位角度各以灰階256色圖像方式呈現出

環境需求


  • windows10
  • python 3.7
  • numpy 1.15.1
  • opencv 4.0
  • matplotlib 2.2.3

實作內容


一開始,我使用numpy套件中的np.fft.fft2()函式,將原圖經過快速傅立葉轉換變成複數矩陣
fft = np.fft.fft2(img)

origin image:

fft image:

利用以下公式,求出頻譜圖

使用np.abs()將複數透過絕對值轉換成跟原點之間的距離
由於原圖經過FFT轉換後,實數部分大於10^6以上,取對數值可以有效將數值限制在一定範圍之間
magnitude_spectrum = np.log(np.abs(fftshift))
為了能夠清楚分析頻域分布,我們需要將原點(0,0)移到圖像的中心(M/2,N/2)位置,將每點乘上(-1),用np.fft.fftshift()做轉換
fftshift = np.fft.fftshift(fft)

位移圖像:

位移前的FFT圖:

位移後的FFT圖:

利用以下公式,I(u,v)是虛數(sin角),R(u,v)是實數(cos角),利用arctan方式求出原來幅角
使用np.angular()公式求出原來的幅角
ph_fftshift = np.angle(fftshift)

實際運行結果:


左圖第一張是原圖,第二張是頻域圖,第三張是相位圖

沒有留言:

張貼留言