L'amplitude et la phase d'une transformation de Fourier F sont définis comme:Mise à transformée de Fourier de la phase et de magnitude - Matlab
Mag = sqrt(Real(F)^2 + Imaginary(F)^2)
et
Phase = arctan(Imaginary(F)/Real(F))
Ive a essayé d'écrire du code MATLAB qui prend en matrice d'image en niveaux de gris, exécute fft2() sur la matrice puis calcule l'amplitude et la phase à partir de la transformée. Je souhaite ensuite calculer les parties imaginaires et réelles de la transformée de Fourier. Cela se fait en réorganisant les deux premières équations dans:
Real = Mag/sqrt(1 + tan(Phase)^2)
et
Imaginary = Real*tan(Phase)
et enfin la combinaison et fft2 inverse:
F = Real + i*Imaginary
image = ifft2(F)
Je me attends de voir la même image que l'entrée, mais je reçois des ordures. Est-ce que mes maths sont fausses? Mon matlab code MFILE est la suivante:
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;
merci beaucoup :)
ahh merci une tonne! c'est génial. Quelle est la grande différence entre atan (im./re) et atan2 (im, re)? Hier, j'ai essayé le même type de chose, en recevant re et im du mag et du cos et du péché, mais ça m'a quand même donné des déchets. avec votre suggestion de atan2(), cela fonctionne. Merci beaucoup cependant :) –
@Dave: Voir http://en.wikipedia.org/wiki/Atan2#Motivation. –
@nibot désolé homme, havent été ici depuis un moment. il suffit de le sélectionner comme réponse acceptée –