应用平方滤波器后图像区域损坏

image regions corrupt after applying squared filter

我有这张图片:

我正在对其应用低通方形滤波器:

def SquareFilter(imgShape,size):
    filterSquare = np.zeros(imgShape)
    filterSquare[
        imgShape[0]//2-size//2 : imgShape[0]//2+size//2,
        imgShape[1]//2-size//2 : imgShape[1]//2+size//2
    ] = 1
    return filterSquare

im = cv2.imread("Images/wall.jpg",0)

freq = np.fft.fft2(im)
freq2 = np.fft.fftshift(freq)
filtered_g = freq2 * SqFilt
asd = np.fft.ifftshift(np.fft.ifft2(filtered_g))

fel = cv2.normalize(abs(asd), None, 0, 255, cv2.NORM_MINMAX)

cv2.imwrite('Results/result.png',fel)

但结果完全不同,我认为图像分为4个区域。我不要这个。

当您使用 FFT 对图像进行离散傅里叶变换时,您假设它位于此类图像在边界处重复的无限平面上。您的过滤器不仅是 low-pass 过滤器,它还是一个移位过滤器。要修复您的代码,请在 ifft2:

之前进行 ifftshift
asd = np.fft.ifft2(np.fft.ifftshift(filtered_g))