wielkości i faza transformacji Fouriera F są zdefiniowane jako:Pierwsze Fourier Transform od fazy i wielkość - Matlab
Mag = sqrt(Real(F)^2 + Imaginary(F)^2)
i
Phase = arctan(Imaginary(F)/Real(F))
Ive próbował napisać kod Matlab, że trwa w sposób Matryca obrazu w skali szarości, wykonuje fft2() na macierzy, a następnie oblicza wielkość i fazę z transformacji. Następnie chciałbym obliczyć wyobrażone i rzeczywiste części transformaty Fouriera. Odbywa się to poprzez zmianę dwóch pierwszych równań do:
Real = Mag/sqrt(1 + tan(Phase)^2)
i
Imaginary = Real*tan(Phase)
i wreszcie łączenie i odwrotna fft2:
F = Real + i*Imaginary
image = ifft2(F)
będę oczekiwać, aby zobaczyć ten sam obraz jak wejście, ale dostaję śmieci. Czy moja matematyka jest zła? Moje Matlab kod mfile jest następujący:
function y = forwardBackwardFFT(image)
F = fft2(image);
mag = sqrt(real(F).^2 + imag(F).^2);
phase = atan(imag(F)./real(F));
re = sqrt((mag.^2)./(1 + tan(phase).^2));
im = re.*tan(phase);
F = re + i*im;
f = ifft2(F);
subplot(1,2,1);
imshow(image);
Title('Original Image');
subplot(1,2,2);
imshow(f);
Title('Image after forward and backward FFT');
y = f;
wielkie dzięki :)
ahh dziękuję! to cudownie. Jaka jest duża różnica między atan (im./re) i atan2 (im, re)? Wczoraj próbowałem tego samego rodzaju rzeczy, otrzymując re i im z mag, cos i grzechu, ale nadal dało mi to śmieci. z twoją sugestią atan2(), to działa. Dziękuję chociaż ton :) –
@Dave: Zobacz http://en.wikipedia.org/wiki/Atan2#Motivation. –
@nibot Przepraszam, nie byłem tu od dłuższego czasu. po prostu wybrałeś ją jako zaakceptowaną odpowiedź –