码字不易,如果对您有所帮助,记着点赞哦!
一. 图像傅里叶变换原理:
原理简介请参考:https://www.cnblogs.com/wojianxin/p/12529809.html
对二维图像进行傅里叶变换用如下公式进行:
图像长M,高N。F(u,v)表示频域图像,f(x,y)表示时域图像。u的范围为[0,M-1],v的范围为[0,N-1] ↑
对二维图像进行傅里叶逆变换用如下公式进行:
图像长M,高N。f(x,y)表示时域图像, F(u,v)表示频域图像。x的范围为[0,M-1],y的范围为[0,N-1] ↑
二. 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库实现图像傅里叶变换及反变换
# writer:[email protected]
# date : 2020.3.30
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
#读取图像
img = cv.imread('../head_g.jpg', 0)
#傅里叶变换
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)
res = np.log(np.abs(fshift))
#傅里叶逆变换
ishift = np.fft.ifftshift(fshift)
iimg = np.fft.ifft2(ishift)
iimg = np.abs(iimg)
#展示结果
plt.subplot(131), plt.imshow(img, 'gray'), plt.title('Original Image')
plt.axis('off')
plt.subplot(132), plt.imshow(res, 'gray'), plt.title('Fourier Image')
plt.axis('off')
plt.subplot(133), plt.imshow(iimg, 'gray'), plt.title('Inverse Fourier Image')
plt.axis('off')
plt.show()
四. 实验结果:
第三部分代码输出结果 ↑
五. 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库实现图像傅里叶变换及反变换
# writer:[email protected]
# date : 2020.3.30
import numpy as np
import cv2
from matplotlib import pyplot as plt
#读取图像
img = cv2.imread('../paojie_g.jpg', 0)
#傅里叶变换
dft = cv2.dft(np.float32(img), flags = cv2.DFT_COMPLEX_OUTPUT)
dftshift = np.fft.fftshift(dft)
res1= 20*np.log(cv2.magnitude(dftshift[:,:,0], dftshift[:,:,1]))
#傅里叶逆变换
ishift = np.fft.ifftshift(dftshift)
iimg = cv2.idft(ishift)
res2 = cv2.magnitude(iimg[:,:,0], iimg[:,:,1])
#显示图像
plt.subplot(131), plt.imshow(img, 'gray'), plt.title('Original Image')
plt.axis('off')
plt.subplot(132), plt.imshow(res1, 'gray'), plt.title('Fourier Image')
plt.axis('off')
plt.subplot(133), plt.imshow(res2, 'gray'), plt.title('Inverse Fourier Image')
plt.axis('off')
plt.show()
七. 实验结果:
第六部分代码输出结果 ↑
八. 参考内容:
① https://www.cnblogs.com/wojianxin/p/12530172.html
② https://www.jianshu.com/p/a00da3e03533
九. 版权声明:
未经作者允许,请勿随意转载抄袭,抄袭情节严重者,作者将考虑追究其法律责任,创作不易,感谢您的理解和配合!