Python 如何从图像中去除高频内容进行傅里叶逆变换

Python 如何从图像中去除高频内容进行傅里叶逆变换,python,numpy,fft,Python,Numpy,Fft,我在opencv中看到了一些解释这一点的文档,但是我的目标是使用numpy&scipy来实现这一点 我想我必须用某种圆来遮罩光谱的外部区域,因为我用60x60矩形遮罩光谱的中心,用于低频滤波。但我不明白怎么做 在使用numpy阵列进行傅里叶逆变换之前,我想学习如何从幅度谱中去除高频分量 我提供了傅里叶变换和逆傅里叶变换(用于去除低频分量)的代码。我的目标是做类似的事情,但这次我想去除高频成分,以便能够观察重建图像中的变化——就像我在去除低频后对逆傅立叶变换所做的一样 import numpy

我在opencv中看到了一些解释这一点的文档,但是我的目标是使用numpy&scipy来实现这一点

我想我必须用某种圆来遮罩光谱的外部区域,因为我用60x60矩形遮罩光谱的中心,用于低频滤波。但我不明白怎么做

在使用numpy阵列进行傅里叶逆变换之前,我想学习如何从幅度谱中去除高频分量

我提供了傅里叶变换和逆傅里叶变换(用于去除低频分量)的代码。我的目标是做类似的事情,但这次我想去除高频成分,以便能够观察重建图像中的变化——就像我在去除低频后对逆傅立叶变换所做的一样

 import numpy as np
 import scipy
 import scipy.misc
 import matplotlib.pyplot as plt
 from scipy import ndimage
 from PIL import Image
 
 img = Image.open('gorkem.png').convert('L')
 img.save('output_file.jpg')
 
 f = np.fft.fft2(img)
 fshift = np.fft.fftshift(f) ## shift for centering 0.0 (x,y)
 magnitude_spectrum = 20*np.log(np.abs(fshift))
 
 plt.subplot(121),plt.imshow(img, cmap = 'gray')
 plt.title('Input Image'), plt.xticks([]), plt.yticks([])
 plt.subplot(122),plt.imshow(magnitude_spectrum, cmap = 'gray')
 plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
 plt.show()
 
 ## removing low frequency contents by applying a 60x60 rectangle window (for masking)
 rows = np.size(img, 0) #taking the size of the image
 cols = np.size(img, 1)
 crow, ccol = rows/2, cols/2
 
 fshift[crow-30:crow+30, ccol-30:ccol+30] = 0
 f_ishift= np.fft.ifftshift(fshift)
 
 img_back = np.fft.ifft2(f_ishift) ## shift for centering 0.0 (x,y)
 img_back = np.abs(img_back)
 
 plt.subplot(131),plt.imshow(img, cmap = 'gray')
 plt.title('Input Image'), plt.xticks([]), plt.yticks([])
 plt.subplot(132),plt.imshow(img_back, cmap = 'gray')
 plt.title('Image after removing low freq'), plt.xticks([]), plt.yticks([])

您只需从原始图像中删除低频率即可对图像进行减影:

original = np.copy(fshift)
fshift[crow-30:crow+30, ccol-30:ccol+30] = 0
f_ishift= np.fft.ifftshift(original - fshift)