You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中使用IFFT无法还原原始图像,仅得到黑屏的问题求助

Python中使用IFFT无法还原原始图像,仅得到黑屏的问题求助

大家好,我现在遇到一个傅里叶光学相关的问题,希望能得到各位的帮助:

我有不同孔径(比如光栅)的空间频率傅里叶变换图像,现在想用Scipy的IFFT来还原原始孔径,但结果总是黑屏。奇怪的是,如果我对这个黑屏图像做FFT,还能得到原来的傅里叶变换图像。附上的测试图里,第一行就是这个有问题的结果,而我自己生成的光栅做FFT再IFFT是正常的。

以下是我的代码:

import numpy as np
import imageio.v3 as iio
import matplotlib.pyplot as plt
import os
from scipy.fft import ifft2, fft2, ifftshift, fftshift

path = r'C:\\Users\\Plowa\\Exercism\\python\\fourier optics RLI'

pixelset = iio.imread(os.path.join(path, 'E fourier_0.bmp'))
pixelset2 = iio.imread(os.path.join(path, 'E in transform plane_0.bmp'))

pixelset = pixelset[:,:,0]
pixelset2 = pixelset2[:,:,0]

ft_pixels_2 = fftshift(fft2(pixelset2))
ift_pixels_2 = ifft2(ifftshift(ft_pixels_2))

ift_pixels = ifft2(ifftshift(fftshift(pixelset), axes=(0,1)))
pixels = fft2(fftshift(ift_pixels))

x = np.arange(-500, 501, 1)
X, Y = np.meshgrid(x, x)
grating = 10*(np.exp(-((X-100)/10)**2) + np.exp(-((X+100)/10)**2))

ft_grating = fftshift(fft2(ifftshift(grating)))
ift_grating = ifftshift(ifft2(fftshift(ft_grating)))

f, ((ax2, ax1, ax6), (ax3, ax4, ax5), (ax7, ax8, ax9)) = plt.subplots(3, 3)

inv_fourier_image = ax1.imshow(abs(ift_pixels), cmap ='gray')
image = ax2.imshow(pixelset, cmap='gray')
ax3.imshow(grating, cmap='gray')
ax4.imshow(abs(ft_grating), cmap='gray')
ax5.imshow(abs(ift_grating), cmap='gray')
ax6.imshow(abs(pixels), cmap='gray')

ax4.set_xlim(450,550)
ax4.set_ylim(520,480)

ax7.imshow(pixelset2, cmap='gray')
ax8.imshow(20*np.log(abs(ft_pixels_2)), cmap='gray')
ax9.imshow(abs(ift_pixels_2), cmap='gray')

plt.show()

我已经搜索过类似问题,但没找到解决方案,想问问大家我哪里出错了?

备注:内容来源于stack exchange,提问作者Luke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 06:55:29