应用平方滤波器后图像区域损坏
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))
我有这张图片:
我正在对其应用低通方形滤波器:
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:
之前进行 ifftshiftasd = np.fft.ifft2(np.fft.ifftshift(filtered_g))