s1093304 作業4
一、作業說明
主題: 影像還原練習
附件中的 image4 似乎受到某種頻域雜訊干擾,撰寫一個程式嘗試復原此圖像(將圖中雜訊去除)。
二、開發環境
- Windows 10
- Visual Studio Code 1.76.1
- Python 3.9.15
- OpenCV 4.6.0
三、實作過程
- 首先使用cv2.imread('image4.png', 0),以灰階方式讀取圖像。
- 使用np.fft.fft2()對輸入圖像執行二維傅立葉轉換,並將其結果藉由np.fft.fftshift()進行中心化處理圖二、進行傅立葉轉換
- 使用20 * np.log(np.abs(fshift))計算頻譜大小,得到magnitude_spectrum
- 使用cv2.normalize()將magnitude_spectrum進行正規化,轉成0~255 的灰階影像圖三、magnitude_spectrum (頻譜大小)
- 接著執行cv2.imread('mask.png', 0)讀取名為mask的圖片
- 若沒有讀取到圖片,則會顯示剛剛得到的magnitude_spectrum,以設計notch filter
- 可在magnitude_spectrum上透過點擊滑鼠左鍵在該位置點上黑點,同時點選的對稱位置也會被點上黑點,意味著可只點選頻譜的上半部分即可。
- 點選完成後,按下任意鍵就會接著進行二值化處理,將黑點以外的部分都設成白色以形成遮罩。
- 顯示的同時儲存該遮罩為mask.png
- 最後再按下任意鍵結束當前呈現視窗,並繼續執行之後的步驟。
- 反之則會詢問是否要重新建立mask,若選擇y則回到步驟1.,顯示剛剛得到的magnitude_spectrum,否則繼續執行之後的步驟。
- 接著將傅立葉轉換出來的頻譜和遮罩相乘以去除noise
- 進行傅立葉反轉換 (np.fft.ifftshift將頻譜移到原點附近 → np.fft.ifft2進行反傅立葉轉換 → np.real再取實數部分)
- 再透過cv2.normalize()將restored_image正規化
- 影片Demo
圖一、以灰階方式讀取圖片
留言
張貼留言