s1093350 Homework #3
1122 Digital Image Processing Assignment #3報告
學號:s1093350 姓名:楊宜芳
主題:傅立葉轉換與影像復原處理
問題與專案解決目標:
呈現受雜訊干擾原圖的傅立葉轉換的振幅頻譜(Amplitude Spectrum)與相位頻譜(Phase Spectrum),並產生去除雜訊後的圖像。
開發環境:Microsoft
Windows 11, Visual Studio Code 1.87.1, OpenCV 4.90, Python 3.8.13
程式架構與功能說明:
1. 讓使用者在 Conslole 輸入原始圖片的檔案名稱(包含副檔名),並用灰階模式讀取圖片。範 例如下,藍色部分為使用者自行輸入:
input image filename: image1.jpg
程式碼及註解如下圖。
2. 對讀取的圖片做傅立葉轉換,並計算出振幅頻譜和相位頻譜,再用Matplotlib的功能將振幅 頻譜及相位頻譜存成圖片檔。程式碼及註解如下圖。
3. 建立視窗預覽原始圖片。視窗上設置 Trackbar,讓使用者能透過 Trackbar 來調整設定的截止 頻率與儲存檔案。程式碼及註解如下圖。
因 Trackbar 改動時不會執行動作,設置 nothing 函數,不執行動作,如下圖。
4. 取得 Trackbar 的值(截止頻率以及是否儲存圖片)。程式碼及註解如下圖。
5. 根據設定的截止頻率來設定低通濾波器,首先取得圖片的大小及算出圖片的中心位置,並建 立與圖片大小相同的零矩陣,再將矩陣的中心範圍設置為1。接著,去除圖片中的高頻雜 訊,並與原始的相位結合,最後,做逆傅立葉轉換,產生結果。程式碼及註解如下圖。
6. 對處理完後的圖片做歸一化,以顯示於預覽視窗。程式碼及註解如下圖。
7. 若使用者將SaveFile設置為1,則儲存圖像並退出。程式碼及註解如下圖。

濾波器原理與步驟說明:
低通濾波器允許低頻信號通過,並抑制高頻信號。以下是低通濾波器的原理和應用步驟:
§
低通濾波器的原理:
在頻率域中,低頻的成分通常代表圖像的主要形狀或大範圍的變化,而高頻的成分則通常表示圖像的細節、邊緣,也容易有圖像的雜訊。低通濾波器是一個二維陣列,首先需要創建一個只在中心(低頻區域)有開放(值設為1),而在其他高頻區域封閉(值設為0)的濾波器來執行其功能。其中,中心區域允許低頻成分通過,邊緣區域則不允許高頻成分通過。
§ 低通濾波器的應用步驟:
首先取得圖片的大小、計算圖片的中心位置,再建立與圖片大小相同的零矩陣作為濾波器,並將中心範圍設為1(大小由設定的截止頻率決定,表示允許這個頻率範圍內的成分通過)。程式碼如下:
rows, cols =
img.shape
crow, ccol = rows // 2, cols // 2
lowpass_mask = np.zeros((rows, cols), np.uint8)
lowpass_mask[crow - cutoff_frequency:crow + cutoff_frequency, col -
cutoff_frequency:ccol + cutoff_frequency] = 1
接著,將濾波器用於原始圖片傅立葉轉換後的結果。將傅立葉轉換的每個頻率成分與濾波器對應的值相乘,保留低頻成分,並削弱高頻成分。再將濾波過的結果重新建構成傅立葉變換數據,以便進行逆傅立葉轉換。程式碼如下:
filtered_FT = FT *
lowpass_mask
filtered_FT_complex = np.abs(filtered_FT) * np.exp(1j *
phase_spectrum)
最後,對濾波後的傅立葉轉換數據進行逆傅立葉轉換,將其轉回空間域,得到去除雜訊後的圖像。程式碼如下:
filtered_image = np.fft.ifft2(filtered_FT_complex)
filtered_image = np.abs(filtered_image)
成果展示與討論:
範例一:
使用者在 conslole 輸入檔案名稱,即可讀取該圖片,並取得該圖的振幅頻譜和相位頻譜。接著可設置截止頻率,並儲存去除雜訊後的圖片至output資料夾。如下圖。
振幅頻譜、相位頻譜、原圖及去除雜訊後的結果如下:
範例二:
振幅頻譜、相位頻譜、原圖及去除雜訊後的結果如下:
範例三:
振幅頻譜、相位頻譜、去除雜訊後的結果如下:
影片:
留言
張貼留言