欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

14-傅里叶变换的代码实现-一、numpy实现傅里叶变换和逆傅里叶变换 1.numpy实现傅里叶变换numpy.fft.fft2实现傅里叶变换,返回一个复数数组(complex ndarray),也就是频谱图像numpy.fft.fftshift将零频率分量移到频谱中心(将左上角的低频区域,移到中心位置)  20*np.log(np.abs(fshift))设置频谱的范围。可以理解为,之前通过傅里叶变换得到复数的数组,是不能通过图像的方法展示出来的,需要转换为灰度图像(映射到[0,255]区间)需要注意的是1> 傅里叶得到低频、高频信息,针对低频、高频处理能够实现不同的目的2> 傅里叶过程是可逆的,图像经过傅里叶变换、逆傅里叶变换后,能够恢复到原始图像3> 在频域对图像进行处理,在频域的处理会反映在逆变换图像上 # 将绘制的图显示在窗口 %matplotlib qt5 import cv2 import numpy as np import matplotlib.pyplo

最编程 2024-08-14 14:52:48
...

 获取图像的形状
rows,cols = img.shape
获取图像的中心点
crow,ccol = int(rows/2),int(cols/2)
生成一个原图像大小的全零矩阵(黑色)
mask = np.zeros((rows,cols,2),np.uint8),这里的(rows,cols,2)是因为dftShift频谱图像的形状是(rows,cols,2),双通道的
将全零矩阵(黑色)的中心区域设置为1(白色),也就是mask矩阵
mask[crow-30:crow+30,ccol-30:ccol+30] = 1
频谱图像 = 原频谱图像 * mask矩阵
fShift = dftShift*mask

14-傅里叶变换的代码实现_高通滤波_10

14-傅里叶变换的代码实现_浮点型_11

import cv2
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread(r"image\lena.bmp",cv2.IMREAD_GRAYSCALE)

# 傅里叶变换
dft = cv2.dft(np.float32(img),flags=cv2.DFT_COMPLEX_OUTPUT)
dftShift = np.fft.fftshift(dft)

# 低通滤波
rows,cols = img.shape
crow,ccol = int(rows/2),int(cols/2)
mask = np.zeros((rows,cols,2),np.uint8)
mask[crow-50:crow+50,ccol-50:ccol+50] = 1
fShift = dftShift*mask

# 逆傅里叶变换
ishift = np.fft.ifftshift(fShift)
iimg = cv2.idft(ishift)
iimg = cv2.magnitude(iimg[:,:,0],iimg[:,:,1])

plt.subplot(1,2,1)
plt.imshow(img,cmap=plt.cm.gray)
plt.title("original")
plt.axis("off")

plt.subplot(1,2,2)
plt.imshow(iimg,cmap=plt.cm.gray)
plt.title("inverse")
plt.axis("off")

plt.show()

使用opencv实现高通滤波的实验结果:

14-傅里叶变换的代码实现_返回结果_12

 

推荐阅读