2011-03-24 268 views
2

所以我正在做一些關於Numpy的Python衍生作業。我的結果根本不會證明他們應該有什麼,我很困惑。Matlab和Numpy + Python FFT2之間的不一致?

我用來生成的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圖像如此不同?不同的實現?爲什麼我的作業代碼工作:(

+1

我沒有背景來回答你的問題,但從查看Python位,我建議你多說一點你如何加載「im」變量,什麼「###我在這裏做了一些計算# ##「表示Ta和Utfm是什麼以及它們是如何相關的等等。對你的代碼的一些理解和你正在尋找的東西對於回答你的問題是非常重要的,而且我真的不明白任何人都可以得到多大的幫助關於你給出的Python片段的信息。 (可能還有一些Matlab位缺失的部分,但我評估的能力較差。) – 2011-03-24 09:19:18

回答

1

首先,在Matlab,從FFT2返回的值是複雜的。我不知道imwrite將如何處理這些問題。想知道是代碼似乎得到近明智的結果。(服用日誌10與顯示幫助)

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

圖像被圍繞原點偏移,因爲像素索引可能與圖像的空間頻率。即低空間頻率出現接近0,0 。較高的像素指標是這些頻率的別名。您可以重新排列圖像,將(0,0)放在中間並進行一些矩陣操作。

2

要添加到mor22的答案:

在Matlab中,您可以使用fftshift將最低頻率移動到中心。它基本上只是將左上角與右下象限交換(右上角與左下角交換)。

+2

另外,在Python方面:'numpy.fft.fftshift'和'numpy.fft.ifftshift'。 – 2011-12-14 23:42:07