Matlab和Numpy + Python FFT2之间的差异?

时间:2011-03-24 05:24:01

标签: python matlab numpy fft

所以我用Numpy在Python上做衍射作业。我的结果根本不会证明他们应该如何,我很困惑。

我用来生成FFT的代码如下:

Python:
aperaturearray = np.array(im) # Turn image into numpy array
Ta = np.fft.fftshift(np.fft.fft2(aperaturearray))
### I did some calculations here ###
ftfm = Image.fromarray(np.uint8(Utfm)) 
ftfm.save(("Path"))  

Matlab:
rect = imread('PATH\pyRectangle.jpg');
rectfft = fft2(rect);
imwrite(rectfft, 'C:\Users\Dan\Documents\python\DiffPhotos\matlabRectfft','jpg')
pyrectmat = ifft2(pyfftrect);
imwrite(pyrectmat, 'Path','jpg')

图像在这里 - > http://imgur.com/a/3Cw81#EdFoA

现在发生了什么事?为什么FFT图像如此不同?不同的实施?为什么我的家庭作业代码不起作用:(

2 个答案:

答案 0 :(得分:2)

添加到mor22的答案:

在Matlab中,您可以使用fftshift将最低频率移动到中心。它实际上只是将左上角与左下象限交换(右上角与左下方交换)。

答案 1 :(得分:1)

首先,在Matlab中,从fft2返回的值很复杂。我不确定imwrite会如何处理它们。尝试这个代码似乎给出了几乎合理的结果。 (使用log10有助于显示)

rect = imread('rect.jpg');
rectfft = fft2(rect);
pcolor(log10(abs(rectfft)));
shading flat

图像偏离原点,因为像素索引可能与图像的空间频率有关。即低空间频率接近0,0。较高像素指示是这些频率的别名。您可以重新排列图像,将(0,0)置于中间,并进行一些矩阵操作。