Величина и фаза преобразования Фурье F определяются как:
Mag = sqrt(Real(F)^2 + Imaginary(F)^2)
и
Phase = arctan(Imaginary(F)/Real(F))
Ive попытался написать matlab-код, который принимает матрицу изображений в оттенках серого, выполняет fft2() на матрице, а затем вычисляет величину и фазу из преобразования. Затем я хочу рассчитать мнимую и действительную части преобразования Фурье. Это делается путем перестановки первых двух уравнений на:
Real = Mag/sqrt(1 + tan(Phase)^2)
и
Imaginary = Real*tan(Phase)
и, наконец, объединение и обратное fft2:
F = Real + i*Imaginary
image = ifft2(F)
Я ожидаю увидеть то же изображение, что и вход, но я получаю мусор. Является ли моя математика неправильной? Мой код mclab mfile выглядит следующим образом:
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;
Большое спасибо:)