python - 傅立叶滤波,回到图像

标签 python filtering fft

我的数据上有一个重复的条纹图案,我试图通过对其进行傅里叶变换并删除该图案来将其消除。但是我似乎无法找到返回图像空间的正确方法。

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 并非常粗略地过滤掉垃圾。但是回去似乎不起作用。我在什么地方绊倒了吗?

最佳答案

问题出现在下面一行:

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

关于python - 傅立叶滤波,回到图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52043238/

相关文章:

php - 创建 "temporary"可排序数据库表/redis 值的解决方案

c++ - FFT 噩梦)

python - 'maxlen' 对象的属性 'collections.deque' 不可写

python - Docker 想要一个需求文件,尽管我不想要它?

sql - 我的查询过滤无法按我想要的方式工作

c++ - 我没有从使用FFTW的重叠相加FFT卷积中获得预期的结果

python - 绘制图像的傅里叶变换时出现问题。 "ValueError: x and y can be no greater than 2-D, but have shapes (2592,) and (2592, 1, 3)"

python - 长字符串的别名

python - RxPy - 为什么排放与合并运算符交错?

java - 需要使用 $select 和 $filter 实现 Elasticsearch 查询