Obteniendo Transformada de Fourier de Fase y Magnitud - Matlab

a magnitud y la fase de una transformada de Fourier F se definen como:

Mag = sqrt(Real(F)^2 + Imaginary(F)^2)

Phase = arctan(Imaginary(F)/Real(F))

He intentado escribir código matlab que toma 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)

Imaginary = Real*tan(Phase)

y finalmente combinando e invirtiendo fft2:

F = Real + i*Imaginary
image = ifft2(F)

Yo esperaría a ver la misma imagen que la entrada, pero me sale basura. ¿Están mal mis matemáticas? Mi código de archivo de Matlab 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 :

Respuestas a la pregunta(1)

Su respuesta a la pregunta