作業說明:
請撰寫一個程式,讀取一張 256 色灰階圖像。
(1)計算輸入圖的離散傅立葉轉換結果,並將頻譜大小與相位角度各以灰階 256 色圖像 方式呈現出。
(2)對圖像利用 Gaussian Low-Pass filter 處理,輸出平滑後圖像。(程式利用課本的 frequency filter 步驟者可得滿分!)
Coding環境:
- Windows 10 20H2
- Anaconda 3.18.11
- Python 3.9.1
- OpenCV 4.5.1
第一部分:
- 使用者在呼叫此程式時使用參數呼叫s1071546_hw3.py -i <要處理的檔案檔名> -d <高斯低通濾波器截止頻率> 來使用
- 使用cv2.imread將檔案載入並存成變數img
- 使用cv2.dft取得傅立葉轉換後的結果
- 呼叫np.fft.fftshift函式將zero-frequency分量移到頻譜中心
- 使用cv2.magnitude算出頻譜大小,並使用20*np.log換算成分貝單位
- 使用cv2.phase算出相位角
- 使用matplotlib套件將剛剛得到的頻譜大小與相位角輸出成圖表
第二部分(與第一部分同一個檔案):
- 使用np.pad將原圖(MxN)變成兩倍(2Mx2N)大,並在延伸的地方都填入0
- 使用np.fromfunction生成(-1)^x+y操作的矩陣
- 將np.pad完的圖使用cv2.dft取得傅立葉轉換後的結果,存為F
- 用GLPF的公式製作出高斯低通濾波器,大小為(2Mx2N),存為H
- 將F與H相乘,存為G
- 使用cv2.idft反轉換,並保留實部
- 將cv2.idft反轉換的實部乘上(-1)^x+y操作矩陣還原
- 將圖的大小還原為MxN
原圖使用傅立葉轉換出的頻譜大小與相位角
padding完乘(-1)^x+y的圖傅立葉轉換完的結果,存為F
沒有留言:
張貼留言