码字不易,如果对您有所帮助,记着点赞哦!
一. 图像傅里叶变换原理:
原理简介请参考:https://www.cnblogs.com/wojianxin/p/12529809.html
对二维图像进行傅里叶变换用如下公式进行:
![](https://upload-images.jianshu.io/upload_images/17221499-010a5bf4db029ce1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
对二维图像进行傅里叶逆变换用如下公式进行:
![](https://upload-images.jianshu.io/upload_images/17221499-a66722a91092f845.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
二. python的numpy库中的图像傅里叶变换公式:
#计算一维傅里叶变换
numpy.fft.fft(a, n=None, axis=-1, norm=None)
#计算二维的傅里叶变换
numpy.fft.fft2(a, n=None, axis=-1, norm=None)
#计算n维的傅里叶变换
numpy.fft.fftn()
#计算n维实数的傅里叶变换
numpy.fft.rfftn()
#返回傅里叶变换的采样频率
numpy.fft.fftfreq()
#将FFT输出中的直流分量移动到频谱中央
numpy.fft.shift()
三. 实验:python的numpy库实现图像傅里叶变换及反变换
1 # writer:wojianxinygcl@163.com 2 3 # date : 2020.3.30 4 5 import cv2 as cv 6 7 import numpy as np 8 9 from matplotlib import pyplot as plt 10 11 #读取图像 12 13 img = cv.imread('../head_g.jpg', 0) 14 15 #傅里叶变换 16 17 f = np.fft.fft2(img) 18 19 fshift = np.fft.fftshift(f) 20 21 res = np.log(np.abs(fshift)) 22 23 #傅里叶逆变换 24 25 ishift = np.fft.ifftshift(fshift) 26 27 iimg = np.fft.ifft2(ishift) 28 29 iimg = np.abs(iimg) 30 31 #展示结果 32 33 plt.subplot(131), plt.imshow(img, 'gray'), plt.title('Original Image') 34 35 plt.axis('off') 36 37 plt.subplot(132), plt.imshow(res, 'gray'), plt.title('Fourier Image') 38 39 plt.axis('off') 40 41 plt.subplot(133), plt.imshow(iimg, 'gray'), plt.title('Inverse Fourier Image') 42 43 plt.axis('off') 44 45 plt.show()
四. 实验结果:
![](https://upload-images.jianshu.io/upload_images/17221499-cd8ee62168ff3a29.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
五. python的cv2库中的图像傅里叶变换公式:
# 傅里叶变换
dft = cv2.dft(np.float32(img), flags = cv2.DFT_COMPLEX_OUTPUT)
# 傅里叶逆变换
iimg = cv2.idft(ishift)
# 返回傅里叶变换后iimg的幅值
res2 = cv2.magnitude(iimg[:,:,0], iimg[:,:,1])
六. 实验:python的cv库和numpy库实现图像傅里叶变换及反变换
1 # writer:wojianxinygcl@163.com 2 3 # date : 2020.3.30 4 5 import numpy as np 6 7 import cv2 8 9 from matplotlib import pyplot as plt 10 11 #读取图像 12 13 img = cv2.imread('../paojie_g.jpg', 0) 14 15 #傅里叶变换 16 17 dft = cv2.dft(np.float32(img), flags = cv2.DFT_COMPLEX_OUTPUT) 18 19 dftshift = np.fft.fftshift(dft) 20 21 res1= 20*np.log(cv2.magnitude(dftshift[:,:,0], dftshift[:,:,1])) 22 23 #傅里叶逆变换 24 25 ishift = np.fft.ifftshift(dftshift) 26 27 iimg = cv2.idft(ishift) 28 29 res2 = cv2.magnitude(iimg[:,:,0], iimg[:,:,1]) 30 31 #显示图像 32 33 plt.subplot(131), plt.imshow(img, 'gray'), plt.title('Original Image') 34 35 plt.axis('off') 36 37 plt.subplot(132), plt.imshow(res1, 'gray'), plt.title('Fourier Image') 38 39 plt.axis('off') 40 41 plt.subplot(133), plt.imshow(res2, 'gray'), plt.title('Inverse Fourier Image') 42 43 plt.axis('off') 44 45 plt.show()
七. 实验结果:
![](https://upload-images.jianshu.io/upload_images/17221499-06909d8a1f1614ec.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
八. 参考内容:
https://www.jianshu.com/p/a00da3e03533
九. 版权声明:
未经作者允许,请勿随意转载抄袭,抄袭情节严重者,作者将考虑追究其法律责任,创作不易,感谢您的理解和配合!