2019年5月13日 星期一

s1051534的作業3

一、作業題目

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

二、執行環境

1. python 3.6
2. opencv 4.0.0.21
3. PyQt5
4. Numpy
5. Windows

三、程式功能

  • 基本功能:

    能讀取灰階圖像,進行傅立葉轉換,並以灰階圖像呈現頻譜大小與相位角度。
  • 特殊功能:

    1. 提供兩種傅立葉轉換方式,DFT與FFT 。
          2. 能選擇highpass filter或lowpass filter進行逆轉換。

          3. 若輸入rgb彩圖,會將圖片轉為灰階,再進行傅立葉轉換,呈現結果。

四、實作方法

使用PyQt建立介面,並將圖片等比例縮放,在介面上以QPixmap形式,做出適當大小的呈現,使用者可依據個人需求,選擇傅立葉轉換模式。

  • DFT:

    使用opencv中的dft進行傅立葉轉換,並且以magnitude與phase,擷取出頻譜大小與相位角度,以灰階方式呈現。
  • FFT:

    使用numpy中的fft進行傅立葉轉換,並且以abs與angle,擷取出頻譜大小與相位角度,以灰階方式呈現。
  • Filter:

    以手動方式製作filter,highpass filter多偵測到圖像邊緣,lowpass filter則能較完整逆轉換成原始圖片,若mask半徑越大,則逆轉換圖片越模糊,若半徑越小,則逆轉換圖片能越清晰。
經實際測試結果發現,DFT的運算速度較FFT快,花費時間較短。

五、執行結果

  • 初始介面


  • 按下選擇圖片按鈕,選取要轉換的圖片


  • 所選的圖片(灰階)呈現於主畫面上,可透過右方checkbox,選擇進行逆轉換時,所要使用的filter類型。


  • 選擇highpass filter,點擊DFT按鈕,將圖片以DFT方式進行傅立葉轉換,將輸入圖片、頻譜大小、相位角度、逆轉換圖片,以灰階方式呈現於subplot上,以highpass filter僅能回復其邊緣輪廓。左上角的calculation time,為利用此方法進行傅立葉轉換的運行時間。


  • 選擇highpass filter,點擊FFT按鈕,將圖片以FFT方式進行傅立葉轉換,將輸入圖片、頻譜大小、相位角度、逆轉換圖片,以灰階方式呈現於subplot上,以highpass filter僅能回復其邊緣輪廓。左上角的calculation time,為利用此方法進行傅立葉轉換的運行時間。測試結果發現,DFT運算速度較FFT快。


  • 選擇lowpass filter,點擊DFT按鈕,將圖片以DFT方式進行傅立葉轉換,將輸入圖片、頻譜大小、相位角度、逆轉換圖片,以灰階方式呈現於subplot上,以lowpass filters能幾乎完全回復圖片,mask半徑越大,結果越模糊,半徑越小,越清晰。左上角的calculation time,為利用此方法進行傅立葉轉換的運行時間。


  • 選擇lowpass filter,點擊FFT按鈕,將圖片以FFT方式進行傅立葉轉換,將輸入圖片、頻譜大小、相位角度、逆轉換圖片,以灰階方式呈現於subplot上,以lowpass filters能幾乎完全回復圖片,mask半徑越大,結果越模糊,半徑越小,越清晰。左上角的calculation time,為利用此方法進行傅立葉轉換的運行時間。測試結果發現,DFT運算速度較FFT快。


  • 可點擊儲存鍵儲存圖片。



  • 若選擇圖片為rgb彩圖,則會先將圖片轉為灰階,再進行傅立葉轉換


沒有留言:

張貼留言