s1093522 作業3

 

作業說明

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


執行環境

Windows 11 21H2

Visual Studio 2019 16.11.24

OpenCV 4.5.1


程式說明

  1. 離散傅立葉變換 DFT(Mat gray_img, int rows, int cols)                                     a.計算傅立葉變換最佳大小 getOptimalDFTSize(rows)                                     b.用 0 填充空圖像矩陣 Mat::zeros(rPadded, cPadded, CV_32FC1)                           c.創建 Mat planes[2] 。其中,planes[0] 是 CV_32F1的實部矩陣(包含擴充後的原圖), planes[1] 是 CV_32F2 的虛部矩陣(大小和擴充後的原圖相同,但所有元素初始化為0)。                                                                                                                                                    d. 將 planes 中的兩個矩陣合併成一個複數矩陣 merge()                                   e.對複數矩陣進行傅立葉變換 dft(img, img, DFT_COMPLEX_OUTPUT)

  2. 計算經過傅立葉變換後的頻譜 ComputeMagnitude(Mat dft_img)                                 a.把複數矩陣分成實部和虛部矩陣 split(dft_img, planes)                               b.計算頻譜矩陣中每個頻率的振幅值 sqrt(real + imaginary, amplitude)                   c.進行對數轉換增強細節部分 log(amplitude + 1, logAmplitude)                           d.正規化頻譜矩陣,將其數值範圍調整在[0,1]之間 normalize(logAmplitude,  logAmplitude, 0, 1, NORM_MINMAX, CV_32FC1)                                                 e.轉成 8位 Unsigned int 可視化效果較佳logAmplitude.convertTo(magnitudeImg, CV_8UC1, 255)

  3. 計算相位角 ComputePhaseAngle(Mat fft_img)                                                 a.複數矩陣分成實部和虛部矩陣 split(dft_img, planes)                                   b.計算每個像素的相位角

  4. 調整傅立葉變換後的圖像 ShiftDFT(Mat magnitude)
    • A 和 D 互換, B 和 C 互換


執行結果

留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1091537 Homework #1