Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab和Numpy之间的差异+;Python FFT2?_Python_Matlab_Numpy_Fft - Fatal编程技术网

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

Matlab和Numpy之间的差异+;Python FFT2?,python,matlab,numpy,fft,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(n

所以我用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')
图片在这里->


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

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


图像围绕原点偏移,因为像素索引可能与图像的空间频率相关。即低空间频率接近0,0。较高的像素标记是这些频率的别名。您可以重新排列图像以放置(0,0)在中间有一些矩阵运算。

< P> > My22的答案:


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

我没有背景知识来回答您的问题,但通过查看Python位,我建议您多说一下如何加载“im”变量,什么是“##########”是什么意思,Ta和Utfm是什么以及它们是如何关联的,等等。对您的代码和您所寻找的内容的一些理解对于回答您的问题非常重要,而且我真的不认为任何人能够从您提供的Python代码片段中获得关于这些内容的有用信息。(Matlab位中可能也有缺失的部分,但我的评估能力较低。)此外,在Python方面:
numpy.fft.fftshift
numpy.fft.ifftshift
rect = imread('rect.jpg');
rectfft = fft2(rect);
pcolor(log10(abs(rectfft)));
shading flat