s1093340 作業4
一、作業說明
附件中的 image4 似乎受到某種頻域雜訊干擾,撰寫一個程式嘗試復原此圖像(將圖中雜 訊去除)。
二、開發環境
OS: Windows 11
Editor: Visual Studio Code
Compiler: GCC-12.2.0(MinGW-W64)
Language: C++
Package: OpenCV-4.6.0
三、程式功能
- 執行方式
- 查看執行結果
- 結束程式
- 要離開程式時,按下鍵盤上任意鍵結束執行
四、實作過程
- 整張圖像讀入
- 使用getOptimalDFTSize()取得最佳化的圖片大小
- 使用copyMakeBorder()將不圖片不足最佳化的邊緣處填上0
- 建立一個雙通道的矩陣 planes,用來存放傅立葉轉換後複數的實部及虛部
- 使用dft()進行離散傅立葉轉換
- 使用split()將轉換結果拆解成實部及虛部存放至planes
- 轉換頻譜
- 使用magnitude()將離散傅立葉轉換後的結果轉換成振幅值
- 換後振幅值不適合直接顯示,因此將原本的線性尺度替換成對數尺度
- 將奇數行及奇數列裁切掉
- 將圖片分為四塊,左上右下交換、右上左下交換,重新排列四個象限,使原點位於圖片中心,方便操作
- 轉換相位角
- 使用phase()將離散傅立葉轉換後的結果轉換成相位角
- 使用notch filter將頻譜中的雜訊消除
notch filter - 將頻譜分為四塊,左上右下交換、右上左下交換,重新排列四個象限,還原成原始的頻譜
- 使用polarToCart()將頻譜與相位角合併為複數的實部及虛部
- 使用merge()將複數的實部及虛部合併
- 使用idft()將合併的結果還原成圖片
- 正規化圖片
- 建立一個3*3的遮罩
3*3的遮罩 - 使用filter2D()將圖片依據遮罩進行邊緣強化
- 使用medianBlur()濾除雜訊
- 輸出結果
結果
留言
張貼留言