【发布时间】:2013-12-11 10:58:45
【问题描述】:
我尝试使用 python 自学一些 FFT 基础知识。目前我正在尝试使用 python 和相关库重现 matlab FFT2 衍射结果。
我试图模拟的例子可以在这里找到: http://www.mathworks.ch/ch/help/matlab/math/fast-fourier-transform-fft.html#brfb2vw-3
在页面底部你会看到这个matlab代码:
D1 = fft2(M);
D2 = fftshift(D1);
imagesc(abs(D2))
axis image
colormap(hot)
title('{\bf Diffraction Pattern}')
这会将圆形光圈图像(如果有影响,他们实际上将其构建为阵列)转换为衍射图案。
[圆形光圈] www.mathworks.ch/help/releases/R2013b/matlab/math/aperture.gif
【Matlab计算结果】 www.mathworks.ch/help/releases/R2013b/matlab/math/diffraction1.gif
问题是,当我拍摄他们的圆形光圈图像(作为 gif 图形)并应用等效的 scipy FFT2 指令时,我得到了不同的结果。为什么会有这种差异以及创建衍射图案的正确方法是什么。从衍射图案返回到产生它的图像是否有类似的陷阱?这是否仅在将光圈构建为这样的阵列时才有效?
我的python代码如下:
import sys
import numpy as np
import pylab as py
from scipy import misc, fftpack
image = misc.imread(sys.argv[1])
D1 = fftpack.fft2(image)
D2 = fftpack.fftshift(D1)
abs_image = np.abs(D2)
py.imshow(abs_image)
py.show()
我下载并使用了他们的圆形光圈图像作为输入(在裁剪比例等之后),但结果我在蓝色背景上得到了一个彩色十字准线。十字准线中间有一个看起来像小圆点的东西。这个结果是因为我使用的是下载的圆形光圈图像,它的边缘是方形的还是因为代码?
在此先感谢
【问题讨论】: