✨博客主页:米开朗琪罗~🎈
✨博主爱好:羽毛球🏸
✨年轻人要:Living for the moment(活在当下)!💪
🏆推荐专栏:【图像处理】【千锤百炼Python】【深度学习】【排序算法】
目录
😺一、知识储备🐶1.1 一维傅里叶变换🐶1.2 二维傅里叶变换 😺二、基于OpenCV的频域变换🐶2.1 傅里叶变换🦄2.1.1 函数API🦄2.1.2 程序设计🦄2.1.3 结果可视化 🐶2.2 逆傅里叶变换🦄2.2.1 程序设计🦄2.2.2 结果可视化 😺三、基于NumPy的频域变换🐶3.1 傅里叶变换🦄3.1.1 程序设计🦄3.1.2 结果可视化 🐶3.2 逆傅里叶变换🦄3.2.1 程序设计🦄3.2.2 结果可视化😺一、知识储备
傅里叶变换就是将信号时域转化为频域的过程,本文用程序实现对二维图像的傅里叶变换与逆变换!首先需要知道一维傅里叶变换!⬇️⬇️⬇️
🐶1.1 一维傅里叶变换
一维傅里叶变换的过程如下方动图所示:
就像上面动图所示一样,一维的波可以用许多的正弦波叠加表示,这就是一维傅里叶变换的关键所在。
🐶1.2 二维傅里叶变换
这里引用一张知乎博主的图,十分通透!!!!!!
先贴上引用,尊重创作者!
/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 cv2import matplotlib.pyplot as pltimport numpy as nporiginal = 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 cv2import matplotlib.pyplot as pltimport numpy as nporiginal = 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 cv2import matplotlib.pyplot as pltimport numpy as nporiginal = 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 cv2import matplotlib.pyplot as pltimport numpy as nporiginal = 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()