傅里叶滤波,回到图像

5
我在数据中发现了一个重复的边缘图案,我试图通过傅里叶变换并删除该图案来解决问题。但是,我似乎找不到正确的方法返回图像空间。
red_cube_array = (cube_array - np.median(cube_array)) * taper

im_fft  = (fftpack.fft2(red_cube_array))
im_po   = fftpack.fftshift((np.conjugate(im_fft) * im_fft).real)

mask = np.empty_like(im_po[0])*0 + 1
mask[417:430, 410:421] = 0
mask[430:443, 438:450] = 0

im_po_mask = im_po * mask

im_ifft = fftpack.ifft2(fftpack.ifftshift(im_po_mask))

taper只是一个数组,用于平滑边缘以消除在执行FFT时产生的边缘效应。然后我进行FFT并粗略地过滤杂质。但是返回操作似乎不起作用。我是不是哪里出错了?

1个回答

4
问题出现在以下代码行:
im_po = fftpack.fftshift((np.conjugate(im_fft) * im_fft).real)

这基本上是计算信号的幅度(在频域中),丢弃相位信息。没有相位信息,空间域图像无法唯一重建。

要解决问题,只需在复值频域im_fft数据上应用掩码:

im_po = fftpack.fftshift(im_fft)

mask = np.empty_like(im_po[0])*0 + 1
mask[417:430, 410:421] = 0
mask[430:443, 438:450] = 0

im_po_mask = im_po * mask

啊,好的,那么我可以对结果进行ifft吗?我试一下。 - Coolcrab
Sleuth是正确的。如果存在虚部,进行逆变换后可能还需要丢弃虚部。 - Floris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接