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
相关产品推荐
相关产品推荐

