所以我和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图像如此不同?不同的实现方式?为什么我的家庭作业代码不起作用:(
首先,在Matlab中,从fft2返回的值很复杂。我不知道我会怎么处理他们。尝试此代码似乎可以得到一个几乎合理的结果。(使用log10有助于显示)
图像相对于原点偏移,因为像素索引可能与图像的空间频率有关。ie低空间频率接近0,0。较高的像素指示是这些频率的别名。你可以重新排列图像,把(0,0)放在中间,通过一些矩阵操作。在
再加上mor22的答案:
在Matlab中,可以使用fftshift将最低频率移到中心。它本质上只是将左上角与右下象限(右上角与左下角)互换。在
相关问题 更多 >
编程相关推荐