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

2024-10-01 09:31:17 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我和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图像如此不同?不同的实现方式?为什么我的家庭作业代码不起作用:(


Tags: path代码rectfftnumpynparrayjpg
2条回答

首先,在Matlab中,从fft2返回的值很复杂。我不知道我会怎么处理他们。尝试此代码似乎可以得到一个几乎合理的结果。(使用log10有助于显示)

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

图像相对于原点偏移,因为像素索引可能与图像的空间频率有关。ie低空间频率接近0,0。较高的像素指示是这些频率的别名。你可以重新排列图像,把(0,0)放在中间,通过一些矩阵操作。在

再加上mor22的答案:

在Matlab中,可以使用fftshift将最低频率移到中心。它本质上只是将左上角与右下象限(右上角与左下角)互换。在

相关问题 更多 >