一、作業題目
請撰寫一個程式,讀取一張 256 色灰階圖像。計算輸入圖的離散傅立葉轉換結果,並
將頻譜大小與相位角度各以灰階256 色圖像方式呈現出。
將頻譜大小與相位角度各以灰階256 色圖像方式呈現出。
二、執行環境
1. python 3.6
2. opencv 4.0.0.21
3. PyQt5
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彩圖,則會先將圖片轉為灰階,再進行傅立葉轉換
沒有留言:
張貼留言