s1081540 作業 4
主題:影像還原練習
作業說明
附件中的 image4 似乎受到某種頻域雜訊干擾,撰寫一個程式嘗試復原此圖像(將圖中雜訊去除)。
開發環境
- Windows 10
- OpenCV 4.2.0
- Visual Studio 2019
- C++
- MATLAB
- Windows 10
- OpenCV 4.2.0
- Visual Studio 2019
- C++
- MATLAB
程式實作
- 使用 imread(path, IMREAD_GRAYSCALE) 以灰階模式讀入圖像,再使用 empty() 判斷圖片是否存在,若圖像讀取失敗會輸出錯誤訊息並結束程式。
- Rect() :使原圖像保證有偶數的行與列。
- 分析輸入圖像的頻譜後,可以看到頻譜中心外有6個峰值:
▲ 原圖像的頻譜大小
- 使用MATLAB找出較正確的頻譜峰值座標。
- imread() :讀入頻譜大小圖像。
- meshc() :繪製三維的圖像,顯示灰度值的大小。
- 設計notch filter
- circle() :以3個峰值點座標為中心,畫出圓形(加上對稱點一共6個圓點),並將圓點的值設為0。
- 對圖像象限進行重新排列,使原點位於圖像中心。
- 創建原圖像的圖像通道,用來儲存複數的實部與虛部,並使用 merge() 來合併圖像通道。
- dft() :對原圖像進行離散傅立葉轉換(DFT)
- 創建notch filter的圖像通道,用來儲存複數的實部與虛部,並使用 merge() 來合併圖像通道。
- mulSpectrums() :將兩個(原圖像及notch filter)傅立葉頻譜中的每個element進行相乘。
▲ 經過notch filter的頻譜 - idft() :將經過notch filter的頻譜進行IDFT(重建圖像)。
- split() :分離圖像通道。
- normalize() :歸一化,將圖像轉換到可顯示範圍(0~1)。
- imshow() :顯示原圖像及經過notch filter處理(去除雜訊)後的圖像。
- waitKey(0) :透過使用者輸入0來中止程式。
執行結果
![]() |
▲ 受到雜訊干擾的原圖像(灰階) |
![]() |
▲ 復原後的圖像(雜訊去除) |
▲ 程式執行過程
參考資料
- Periodic Noise Removing Filter - OpenCV:https://docs.opencv.org/4.x/d2/d0b/tutorial_periodic_noise_removing_filter.html
- Contour plot under mesh surface plot - MATLAB meshc:https://www.mathworks.com/help/matlab/ref/meshc.html
留言
張貼留言