s1093310 Homework #3
1122 Digital Image Processing
Assignment #3 報告
學號: 1093310 姓名: 胡凱騰
主題: 傅立葉轉換與影像復原處理
專案目標:
基於python與opencv、numpy撰寫一個程式,透過輸入指令與交互介面提供使用者將受干擾的圖片盡可能的回復至原始狀態。
開發平台:
Microsoft Windows 10,
Visual Studio Code, Python 3.10.11, opencv-python 4.9.0.80
功能說明:
沿用作業2的系統,以命令列引數的方式傳入要操作的圖像檔案路徑,接著經過以下步驟:
1.
以灰階讀取傳入的圖像路徑
2. 對圖像使用numpy的fft2進行傅立葉轉換,並透過20xlog以視覺化magnitude spectrum,同時以numpy
angle取出phase spectrum
3.
將magnitude
spectrum透過二值化以及膨脹後,從圖像中心進行flood fill保留低頻(也就是圖像主體)的部分,嘗試取出頻域中雜訊的遮罩
圖1. 左圖為magnitude spectrum與最終遮罩相乘後的結果,右圖為二值化得出的遮罩
4.
透過magnitude
spectrum乘上遮罩(也就是上圖)來去除雜訊
在程式運作時會顯示原圖、magnitude
spectrum、phase spectrum、二值化得出的遮罩、侵蝕後得出的遮罩、flood fill後的遮罩與magnitude
spectrum相乘、經過處理後的圖
圖2. 由左至右、上至下依序為: 原圖、經過處理後的圖、magnitude spectrum、phase
spectrum、二值化得出的遮罩、侵蝕後得出的遮罩、flood
fill後的遮罩與magnitude
spectrum相乘
可選擇是否傳入長寬,僅傳入長寬其中之一也可以,另一未傳入的邊會維持原始值。若有傳入長寬,則程式一開始便會將圖像縮放成該大小,使用命令列引數-h來獲得更詳細的資訊。
圖3. 傳入 –h
當開啟程式後最左方會顯示>>>,代表能開始輸入所需操作的相關指令,輸入help來顯示所有可用指令,接著會一一說明其功用。
圖4. 所有可用指令
>>> img_state
顯示當前影像的長寬
>>> img_resize width
height
將圖像長寬縮放為指定的整數數值。
>>> save_as path
將結果儲存至指定path。
>>> save
儲存至原路徑。
>>> mask_adjust
使用trackbar調整二值化的閾值與侵蝕的次數,點擊任一視窗並輸入w儲存操作的結果,輸入q取消該操作。
圖5. 可調整個參數以嘗試最佳遮罩
>>> dilate_switch
啟用或關閉侵蝕,因條文狀的雜訊在頻域中看似為直線,經過侵蝕後於遮罩上容易消失。不過就算不使用侵蝕成效依舊不好,難以濾除條文狀雜訊,主要是單一閾值不易於完整取出所有雜訊。
圖6. 關閉侵蝕後部分條文狀的雜訊可被遮罩蓋住
成果展示:
留言
張貼留言