Получение преобразования Фурье по фазе и величине - Matlab

Величина и фаза преобразования Фурье F определяются как:

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

и

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

Я пытался написать Код matlab, который принимает матрицу изображения в градациях серого, выполняет fft2 () на матрице, а затем вычисляет величину и фазу из преобразования. Затем я хочу вычислить мнимую и действительную части преобразования Фурье. Это делается путем преобразования первых двух уравнений в:

Real = Mag/sqrt(1 + tan(Phase)^2)

и

Imaginary = Real*tan(Phase)

и, наконец, объединения и обратного fft2:

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

Я ожидал увидеть то же изображение, что и входные данные, но получаю мусор. Моя математика неверна? Мой код mfile в matlab выглядит следующим образом:

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;

большое спасибо :)

19
задан rayryeng - Reinstate Monica 1 December 2016 в 15:19
поделиться