3 Stimmen

Diskrepanz zwischen Matlab und Numpy+Python FFT2?

Ich habe also einige Hausaufgaben zur Beugung in Python mit Numpy gemacht. Meine Ergebnisse wollten einfach nicht so ausfallen, wie sie hätten ausfallen sollen, und ich war verwirrt.

Der Code, den ich zur Erzeugung der FFTs verwendet habe, lautet wie folgt:

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')

Die Bilder sind hier -> http://imgur.com/a/3Cw81#EdFoA

Was ist hier eigentlich los? Warum sind die FFT-Bilder so unterschiedlich? Unterschiedliche Implementierungen? Warum funktioniert mein Hausaufgabencode nicht :(

2voto

iliis Punkte 713

Um die Antwort von mor22 zu ergänzen:

In Matlab können Sie fftshift verwenden, um die niedrigsten Frequenzen in die Mitte zu verschieben. Dabei wird im Wesentlichen nur der obere linke mit dem unteren rechten Quadranten (und der obere rechte mit dem unteren linken) vertauscht.

1voto

mor22 Punkte 1322

In Matlab sind die von fft2 zurückgegebenen Werte zunächst einmal komplex. Ich bin mir nicht sicher, wie imwrite mit ihnen umgehen wird. Wenn man diesen Code ausprobiert, scheint man fast vernünftige Ergebnisse zu erhalten. (Die Verwendung von log10 hilft bei der Anzeige)

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

Das Bild ist um den Ursprung verschoben, da der Pixelindex wahrscheinlich mit der Ortsfrequenz des Bildes zusammenhängt, d. h. niedrige Ortsfrequenzen erscheinen in der Nähe von 0,0. Die höheren Pixelindizes sind Aliase dieser Frequenzen. Sie können das Bild mit Hilfe einer Matrixmanipulation so anordnen, dass die (0,0) in der Mitte liegt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X