作業說明:
- 計算輸入圖的離散傅立葉轉換結果,並將頻譜大小與相位角度各以灰階256色圖像方式呈現出。
- 對圖像利用Gaussian Low-Pass filter處理,輸出平滑後圖像。
- 程式利用課本的frequency filter步驟者可得滿分,在網頁中將每個步驟結果呈現出。直接套用opencv函數得一半分數。
使用環境/語言:
- Windows11
- Visual Studio 2019
- Opencv-4.3.0
- C++
程式說明:
- 輸入圖片名稱或路徑(如要輸入名稱請把圖片和.cpp檔放一起)
- 以灰階模式讀取圖片
- 將圖片進行padding(長和寬都是兩倍)
- 定義傅立葉轉換後要存取實部和虛部的地方
- 用merge()合成起來
- 進行dft()來取得所需資訊
- 用split()分離出實部和虛部
- 使用magnitude()和phase()算出頻譜圖和象位角
- 因為此時的値無法在電腦上顯示出來因此進行log(1 + M)的運算
- 將兩張圖進行象限交換的處理令最大值在圖片中中心後用normalize()再進行輸出
- 將padding後的圖片每個點乘上pow((-1), (x + y))
- 進行dft()來取得所需資訊
- 利用公式計算filter(D0設為50) H
- 將傅立葉轉換出的實部和虛部個別乘上H後合成形成G
- 將G進行逆傅立葉轉換idft()
- 在任何一張圖按0鍵已取得最後結果(即normalize後的圖)
- 分離出實部後將其normalize()得出模糊後的圖
程式說明:
- 輸入圖片名稱或路徑(如要輸入名稱請把圖片和.cpp檔放一起)
- 以灰階模式讀取圖片
- 將圖片進行padding(長和寬都是兩倍)
- 定義傅立葉轉換後要存取實部和虛部的地方
- 用merge()合成起來
- 進行dft()來取得所需資訊
- 用split()分離出實部和虛部
- 使用magnitude()和phase()算出頻譜圖和象位角
- 因為此時的値無法在電腦上顯示出來因此進行log(1 + M)的運算
- 將兩張圖進行象限交換的處理令最大值在圖片中中心後用normalize()再進行輸出
- 將padding後的圖片每個點乘上pow((-1), (x + y))
- 進行dft()來取得所需資訊
- 利用公式計算filter(D0設為50) H
- 將傅立葉轉換出的實部和虛部個別乘上H後合成形成G
- 將G進行逆傅立葉轉換idft()
- 在任何一張圖按0鍵已取得最後結果(即normalize後的圖)
- 分離出實部後將其normalize()得出模糊後的圖
沒有留言:
張貼留言