“axes”中的重复索引表示对该轴执行多次转换,一个元素序列意味着执行一维FFTnorm包括None和ortho两个选项,规范化模式(请参见numpy.fft)。默认值为无
Numpy中fft模块有很多函数,相关函数如下:
#计算一维傅里叶变换 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()
下面的代码是通过Numpy实现傅里叶变换,调用 np.fft.fft2() 快速傅里叶变换得到频率分布,接着调用 np.fft.fftshift() 函数将中心位置转移至中间,最终通过 Matplotlib显示效果图。
# _*_ coding:utf-8 _*_ import cv2 import numpy as np from matplotlib import pyplot as plt # 读取图像 img = cv2.imread('irving.jpg', ) # 图像进行灰度化处理 img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 快速傅里叶变换算法得到频率分布 f = np.fft.fft2(img) # 默认结果中心点位置是在左上角 # 调用fftshift()函数转移到中间位置 fshift = np.fft.fftshift(f) # fft 结果是复数,其绝对值结果是振幅 fimg = np.log(np.abs(fshift)) # 展示结果 plt.subplot(121), plt.imshow(img, 'gray'), plt.title('original Fourier') plt.axis('off') plt.subplot(122), plt.imshow(fimg, 'gray'), plt.title('fourier Fourier') plt