La magnitud y fase de una transformada de Fourier F se definen como:Primeros transformada de Fourier de la fase y la magnitud - Matlab
Mag = sqrt(Real(F)^2 + Imaginary(F)^2)
y
Phase = arctan(Imaginary(F)/Real(F))
he tratado de escribir código de MATLAB que se lleva en una matriz de imagen en escala de grises, realiza fft2() en la matriz y luego calcula la magnitud y la fase de la transformación. Luego deseo calcular las partes imaginarias y reales de la transformada de Fourier. Esto se hace mediante la reordenación de las dos primeras ecuaciones en:
Real = Mag/sqrt(1 + tan(Phase)^2)
y
Imaginary = Real*tan(Phase)
y, finalmente, la combinación y fft2 inversa:
F = Real + i*Imaginary
image = ifft2(F)
que cabe esperar para ver la misma imagen que la entrada, pero me sale basura. ¿Mis cálculos están equivocados? Mi código de MATLAB MFILE es el siguiente:
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;
muchas gracias :)
ahh thanks a ton! Eso es genial. ¿Cuál es la gran diferencia entre atan (im./re) y atan2 (im, re)? Ayer probé el mismo tipo de cosas, obtener re e im de mag, cos y pecado, pero aún así me dio basura. con su sugerencia de atan2(), funciona. Muchas gracias :) :) –
@Dave: ver http://en.wikipedia.org/wiki/Atan2#Motivation. –
@nibot lo siento, no he estado aquí por un tiempo. simplemente lo seleccionó como la respuesta aceptada –