如何从图像中去除高频内容以进行傅里叶逆变换
how to remove high frequency contents from the image for inverse fourier transform
我在 opencv 中看到一些文档对此进行了解释,但是我的 objective 是用 numpy 和 scipy.
来做到这一点
我想我必须用某种圆圈掩盖频谱的外部区域,因为我用 60x60 矩形掩盖了频谱的中心以进行低频过滤。但是我怎么也看不懂。
我想了解如何在使用 numpy 数组进行傅里叶逆变换之前从幅度谱中去除高频分量。
我提供了傅里叶变换和傅里叶逆变换(用于去除低频分量)的代码。我的 objective 是做类似的事情,但这次我想去除高频成分,以便能够观察重建图像的变化 - 就像我在去除低频后对逆 FT 所做的那样。
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)
我在 opencv 中看到一些文档对此进行了解释,但是我的 objective 是用 numpy 和 scipy.
来做到这一点我想我必须用某种圆圈掩盖频谱的外部区域,因为我用 60x60 矩形掩盖了频谱的中心以进行低频过滤。但是我怎么也看不懂。
我想了解如何在使用 numpy 数组进行傅里叶逆变换之前从幅度谱中去除高频分量。
我提供了傅里叶变换和傅里叶逆变换(用于去除低频分量)的代码。我的 objective 是做类似的事情,但这次我想去除高频成分,以便能够观察重建图像的变化 - 就像我在去除低频后对逆 FT 所做的那样。
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)