【OpenCV-Python】:影像的傅立葉變換與逆傅立葉變換
✨部落格主頁:米開朗琪羅~?
✨博主愛好:羽毛球?
✨年輕人要:Living for the moment(活在當下)!?
?推薦專欄:【影像處理】【千錘百煉Python】【深度學習】【排序演算法】
目錄
?一、知識儲備
傅立葉變換就是將訊號時域轉化為頻域的過程,本文用程式實現對二維影像的傅立葉變換與逆變換!首先需要知道一維傅立葉變換!⬇️⬇️⬇️
?1.1 一維傅立葉變換
一維傅立葉變換的過程如下方動圖所示:
就像上面動圖所示一樣,一維的波可以用許多的正弦波疊加表示,這就是一維傅立葉變換的關鍵所在。
?1.2 二維傅立葉變換
這裡引用一張知乎博主的圖,十分通透!!!!!!
先貼上引用,尊重創作者!
https://zhuanlan.zhihu.com/p/99605178
如何表現???我們看!⬇️⬇️⬇️
右邊圖的每一個點都在描述一個平面波。
右圖中的每一個點:
- 它到中點的距離描述的是頻率;
- 中點到它的方向是平面波的方向;
- 那點的灰度值是它的幅值。
通透!!!感謝這位博主的圖?
?二、基於OpenCV的頻域變換
?2.1 傅立葉變換
?2.1.1 函式API
傅立葉變換:
函式式:out = cv2.dft(src, flag)
引數介紹:
- 引數scr:輸入影像;
- 引數flag:轉換標識,一般用
cv2.DFT_COMPLEX_OUTPUT
,即輸出一個複數陣列,更多請參考dft; - 返回值out:複數陣列。
?2.1.2 程式設計
import cv2
import matplotlib.pyplot as plt
import numpy as np
original = cv2.imread(r'C:\Users\Lenovo\Desktop\lena1.jpg', 0) # 轉為灰度圖
dft = cv2.dft(np.float32(original), flags=cv2.DFT_COMPLEX_OUTPUT)
dftShift = np.fft.fftshift(dft) # 將影像中的低頻部分移動到影像的中心
result = 20 * np.log(cv2.magnitude(dftShift[:, :, 0], dftShift[:, :, 1])) # 將實部和虛部轉換為實部,乘以20是為了使得結果更大
plt.subplot(121), plt.imshow(original, cmap='gray')
plt.title('original')
plt.axis('off')
plt.subplot(122), plt.imshow(result, cmap='gray')
plt.title('fft')
plt.axis('off')
plt.show()
?2.1.3 結果視覺化
?2.2 逆傅立葉變換
?2.2.1 程式設計
import cv2
import matplotlib.pyplot as plt
import numpy as np
original = cv2.imread(r'C:\Users\Lenovo\Desktop\lena1.jpg', 0) # 轉為灰度圖
dft = cv2.dft(np.float32(original), flags=cv2.DFT_COMPLEX_OUTPUT)
dftShift = np.fft.fftshift(dft) # 將影像中的低頻部分移動到影像的中心
result = 20 * np.log(cv2.magnitude(dftShift[:, :, 0], dftShift[:, :, 1])) # 將實部和虛部轉換為實部,乘以20是為了使得結果更大
ishift = np.fft.ifftshift(dftShift) # 低頻部分從影像中心移開
iImg = cv2.idft(ishift) # 傅立葉反變換
iImg = cv2.magnitude(iImg[:, :, 0], iImg[:, :, 1]) # 轉化為空間域
plt.subplot(131), plt.imshow(original, cmap='gray')
plt.title('original')
plt.axis('off')
plt.subplot(132), plt.imshow(result, cmap='gray')
plt.title('fft')
plt.axis('off')
plt.subplot(133), plt.imshow(iImg, cmap='gray')
plt.title('ifft')
plt.axis('off')
plt.show()
?2.2.2 結果視覺化
?三、基於NumPy的頻域變換
?3.1 傅立葉變換
?3.1.1 程式設計
import cv2
import matplotlib.pyplot as plt
import numpy as np
original = cv2.imread(r'C:\Users\Lenovo\Desktop\lena1.jpg', 0) # 轉為灰度圖
dft = np.fft.fft2(original)
dftShift = np.fft.fftshift(dft) # 將影像中的低頻部分移動到影像的中心
result = 20*np.log(np.abs(dftShift))
plt.subplot(121), plt.imshow(original, cmap='gray')
plt.title('original')
plt.axis('off')
plt.subplot(122), plt.imshow(result, cmap='gray')
plt.title('fft')
plt.axis('off')
plt.show()
?3.1.2 結果視覺化
?3.2 逆傅立葉變換
?3.2.1 程式設計
import cv2
import matplotlib.pyplot as plt
import numpy as np
original = cv2.imread(r'C:\Users\Lenovo\Desktop\lena1.jpg', 0) # 轉為灰度圖
dft = np.fft.fft2(original)
dftShift = np.fft.fftshift(dft) # 將影像中的低頻部分移動到影像的中心
result = 20*np.log(np.abs(dftShift))
ishift = np.fft.ifftshift(dftShift) # 低頻部分從影像中心移開
iImg = np.fft.ifft2(ishift) # 傅立葉反變換
iImg = np.abs(iImg)
plt.subplot(131), plt.imshow(original, cmap='gray')
plt.title('original')
plt.axis('off')
plt.subplot(132), plt.imshow(result, cmap='gray')
plt.title('fft')
plt.axis('off')
plt.subplot(133), plt.imshow(iImg, cmap='gray')
plt.title('ifft')
plt.axis('off')
plt.show()
?3.2.2 結果視覺化
相關文章
- 傅立葉變換
- 離散傅立葉變換(DFT)和快速傅立葉變換(FFT)FFT
- 快速傅立葉變換
- 小波變換與傅立葉變換的區別
- 【DWT筆記】傅立葉變換與小波變換筆記
- 離散傅立葉變換
- OpenCV 離散傅立葉變換OpenCV
- 【scipy 基礎】--傅立葉變換
- 圖神經網路基礎:傅立葉級數與傅立葉變換神經網路
- Python 實現影像快速傅立葉變換和離散餘弦變換Python
- 快速傅立葉變換(FFT)隨筆FFT
- 淺談FFT(快速傅立葉變換)FFT
- 【數學】快速傅立葉變換(FFT)FFT
- 快速傅立葉變換及其實現
- 如何通俗地理解傅立葉變換?
- 短時傅立葉變換原理理解
- 數論筆記:快速傅立葉變換筆記
- 傅立葉變換頻域時域分析
- 快速傅立葉變換複習筆記筆記
- 快速傅立葉變換 學習筆記筆記
- 離散傅立葉變換DFT的應用
- 非週期訊號的傅立葉變換
- 【OI向】快速傅立葉變換(Fast Fourier Transform)ASTORM
- 傅立葉變換(二)—— 卷積 Convolution卷積
- 理解快速傅立葉變換(FFT)演算法FFT演算法
- 影象處理1--傅立葉變換(Fourier Transform )ORM
- 相位掩膜+傅立葉變換進行影象加密加密
- C# pythonnet(2)_FFT傅立葉變換C#PythonFFT
- 【數理知識】第1章-傅立葉變換-《積分變換與場論》王振
- OpenCV計算機視覺學習(10)——影像變換(傅立葉變換,高通濾波,低通濾波)OpenCV計算機視覺
- 傅立葉變換和拉普拉斯變換的物理解釋及區別
- 3. OpenCV-Python——影像梯度演算法、邊緣檢測、影像金字塔與輪廓檢測、直方圖與傅立葉變換OpenCVPython梯度演算法直方圖
- 快速傅立葉變換的迭代法程式碼實現
- 誰有短時傅立葉變換的java或c程式JavaC程式
- 【演算法學習筆記】快速傅立葉變換演算法筆記
- 卷積導向快速傅立葉變換(FFT/NTT)教程卷積FFT
- 數字影像處理學習筆記(1)——傅立葉變換在影像處理中的應用筆記
- 快速傅立葉變換原理介紹及遞迴程式碼實現遞迴