s1091447作業3
作業說明 :
撰寫傅利葉轉換程式(Forward Fourier Transform and Inverse Fourier Transform)將一張圖像轉換至頻域後,將頻譜大小與相位角度各以灰階 256 色圖像方式呈現出,再呈現還原後圖像。
參考網址: https://blog.csdn.net/Ibelievesunshine/article/details/104984775
開發環境:
Windows 11+ Visual Studio 2022 + OpenCV 4.7.0
程式碼說明:
第一個版本是使用np.fft.fft2(),第二個版本改成np.fft.fft()
第一個版本
1. cv2.IMREAD_GRAYSCALE讀取灰度圖像。
2. 使用NumPy的np.fft.fft2()函數計算一維傅立葉轉換。
3. 使用np.fft.fftshift()函數,將步驟1結果的低頻分量移到頻譜中心,以便更好地可分析頻譜。
4. np.abs()函数計算傅立葉轉換的幅值,然後使用np.log()函數將其轉換為對數刻度,得到振幅頻譜。使用np.log()的原因是因為傅立葉變換後的頻譜最小值和最大值分別為10.62153154030341和163185040.41939175。
5. np.angle()函數計算相位頻譜。
6. 逆傅立葉轉換,np.fft.ifftshift()函數將中心化的傅立葉轉換移到其原始位置。然後使用np.fft.ifft2()函數計算逆傅立葉轉換。使用np.abs()函數計算複數值的模數,以獲得逆傅立葉轉換的圖像。
第二個版本
1. cv2.IMREAD_GRAYSCALE讀取灰度圖像。
2. 使用NumPy的np.fft.fft()函數先對每個row做計算,之後再對每個col做計算。
3. 之後也是一樣用np.abs()和np.log()函數得到振幅頻譜,np.angle()函數計算相位頻譜。
4. 逆傅立葉轉換是使用NumPy的np.fft.fft()函數,先對每個row做計算,之後再對每個col做計算。
留言
張貼留言