s1093522 作業3
作業說明
離散傅立葉轉換 DFT 練習 撰寫傅利葉轉換程式(Forward Fourier Transform and Inverse Fourier Transform)將一張圖 像轉換至頻域後,將頻譜大小與相位角度各以灰階 256 色圖像方式呈現出,再呈現還 原後圖像。
執行環境
Windows 11 21H2
Visual Studio 2019 16.11.24
OpenCV 4.5.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)
-
計算經過傅立葉變換後的頻譜
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)
-
計算相位角
ComputePhaseAngle(Mat fft_img) a.
複數矩陣分成實部和虛部矩陣split(dft_img, planes) b.
計算每個像素的相位角 -
- 調整傅立葉變換後的圖像
ShiftDFT(Mat magnitude)
- A 和 D 互換, B 和 C 互換
留言
張貼留言