s1091442 Homework #3
學號:1091442 姓名:李衍一
主題: 傅立葉轉換與影像復原處理
設計思路:
本次作業使用傅立葉函數進行轉換,並以陷波濾波器過濾噪點,使修復後圖片的雜訊干擾不那麼嚴重。網路上的陷波濾波器多為手動輸入雜訊座標,因此本次作業希望能更進一步,設計出放入不同的圖片都能自動找出雜訊座標的程式。
程式解析:
本次作業的notch filter使用了經典的畢氏定理公式來求濾波區域,並且將對角線為基準的對稱位置也納入了濾波範圍。不過在設計遮罩之前,必須先找到雜訊的位置。本次作業使用了lebel()函式,搭配閾值能夠把頻譜中高於閾值的地方篩選出來並依序標上標籤,對於找到雜訊座標十分有效。
程式運作時首先使用opencv的dft函式對原始圖片進行傅立葉變換,以numpy.fft.fftshift將頻譜移位至正中間,透過numpy的angle及log兩個函式可以分別得到phase spectrum及magnitude spectrum的圖像。以lebel()函式標出除中心外高頻的座標並一一執行notch filter操作,將噪點以圓形遮罩去除,得到經過陷波濾波的遮罩。操作完成的遮罩再與原先的magnitude spectrum結合再以idft函式做逆傅立葉變換,即可得到修復後的影像。
成果展示:
1.
作業心得:
雖然網路上的週期性雜訊濾波大多數都是採取手動輸入notch filter的參數,秉持著程式盡可能全自動最好的心態試著做出了自動篩出噪音在頻譜上的位置的濾波器,實際測試後才發現手動輸入反而可能更好,畢竟每張圖雜訊的位置和強度都不一樣,一張圖片適用的參數可能會讓另一張圖片失真,這點上很難抓取到平衡,耗費了不少時間。
另外,原本notch filter使用for迴圈直接在遮罩上操作,但因篩選雜訊區塊標籤的作法時間複雜度也不低,兩相加下程式會跑非常久,因此將filter的做法完全改變,使用了網路上找到的將每個點的距離先求好,再把數值套到遮罩上面做邏輯運算的做法,意外地快了許多。不過有些圖片還是需要一些時間,還請稍微耐心等候。後來也試著解決lebel()製造的區塊太過破碎繁雜的問題,不過再數次嘗試後因時間因素而放棄,希望未來有機會能再嘗試看看。
留言
張貼留言