s1093340 作業3

 一、作業說明

撰寫傅利葉轉換程式(Forward Fourier Transform and Inverse Fourier Transform)將一張圖 像轉換至頻域後,將頻譜大小與相位角度各以灰階 256 色圖像方式呈現出,再呈現還 原後圖像。

 二、開發環境

OS: Windows 11
Editor: Visual Studio Code
Compiler: GCC-12.2.0(MinGW-W64)
Language: C++
Package: OpenCV-4.6.0 

 三、程式功能

  1. 執行方式
    • 使用argv將要旋轉之圖片路徑傳入,可使用cmd執行或者直接將圖片拖曳至exe檔上面執行
      圖片拖曳執行

      使用cmd執行

  2. 查看執行結果
    • input視窗為輸入圖片
    • spectrum視窗為轉換後頻譜大小灰階圖像
    • phase視窗為轉換後相位角灰階圖像
    • recover視窗為還原後圖像
      input視窗
      spectrum視窗

      phase視窗
      recover視窗
  3. 結束程式
    • 要離開程式時,按下鍵盤上任意鍵結束執行

 四、實作過程

  1. 整張圖像讀入
  2. 使用getOptimalDFTSize()取得最佳化的圖片大小
  3. 使用copyMakeBorder()將不圖片不足最佳化的邊緣處填上0
  4. 建立一個雙通道的矩陣 planes,用來存放傅立葉轉換後複數的實部及虛部
  5. 使用dft()進行離散傅立葉轉換
  6. 使用split()將轉換結果拆解成實部及虛部存放至planes
  7. 轉換頻譜
    1. 使用magnitude()將離散傅立葉轉換後的結果轉換成振幅值
    2. 換後振幅值不適合直接顯示,因此將原本的線性尺度替換成對數尺度
    3. 將奇數行及奇數列裁切掉
    4. 將圖片分為四塊,左上右下交換、右上左下交換,重新排列四個象限,使原點位於圖片中心
  8. 轉換相位角
    1. 使用phase()將離散傅立葉轉換後的結果轉換成相位角
  9. 還原圖像
    1. 使用idft()將離散傅立葉轉換後的結果還原成圖片
  10. 正規化圖片
  11. 輸出結果

留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1061637 作業6