2011-10-14 8 views
8

Итак, у меня есть этот образ «Я». Я беру F = fft2 (I), чтобы получить двумерное преобразование Фурье. Чтобы восстановить его, я мог бы пойти ifft2 (F).Matlab обратный БПФ только от фазы/величины

Проблема в том, что мне нужно восстановить это изображение только из a) величины и b) фазовых составляющих F. Как я могу отделить эти два компонента преобразования Фурье, а затем восстановить изображение из каждого?

Я пробовал функции abs() и angle() для получения величины и фазы, но первая фаза не восстанавливается должным образом.

Помощь?

ответ

10

Вам нужна одна матрица с такой же величиной, как F и 0 фаза, а другая с той же фазой, что и F, и равномерная величина. Как вы отметили, abs дает вам величину. Чтобы получить одинаковую фазовую матрицу одинаковой величины, вам нужно использовать angle, чтобы получить фазу, а затем отделить фазу назад до реальной и мнимой частей.

> F_Mag = abs(F); %# has same magnitude as F, 0 phase 
> F_Phase = cos(angle(F)) + j*(sin(angle(F)); %# has magnitude 1, same phase as F 
> I_Mag = ifft2(F_Mag); 
> I_Phase = ifft2(F_Phase); 
+0

Я не 'Посмотрите эту функцию ffti(), на которую вы ссылаетесь, вы имеете в виду ifft2(), возможно? Если нет, есть ли у вас ссылка на документацию? Кроме того, я не вижу эту функцию arg(). – Jordan

+0

Извините, я использовал синтаксис Octave для 'arg' (эквивалент Matlab' angle') и синтаксис make-up-in-my-head для 'ifft2'. – mtrw

+4

+1, 'F_Phase = exp (j * angle (F));' тоже! –

0

это слишком поздно, чтобы поставить еще один ответ на этот пост, но ... все равно

@ zhilevan, вы можете использовать коды я написал, используя ответ mtrw в:

image = rgb2gray(imread('pillsetc.png')); 
subplot(131),imshow(image),title('original image'); 
set(gcf, 'Position', get(0, 'ScreenSize')); % maximize the figure window 
%::::::::::::::::::::: 
F = fft2(double(image)); 
F_Mag = abs(F); % has the same magnitude as image, 0 phase 
F_Phase = exp(1i*angle(F)); % has magnitude 1, same phase as image 
% OR: F_Phase = cos(angle(F)) + 1i*(sin(angle(F))); 
%::::::::::::::::::::: 
% reconstruction 
I_Mag = log(abs(ifft2(F_Mag*exp(i*0)))+1); 
I_Phase = ifft2(F_Phase); 
%::::::::::::::::::::: 
% Calculate limits for plotting 
% To display the images properly using imshow, the color range 
% of the plot must the minimum and maximum values in the data. 
I_Mag_min = min(min(abs(I_Mag))); 
I_Mag_max = max(max(abs(I_Mag))); 

I_Phase_min = min(min(abs(I_Phase))); 
I_Phase_max = max(max(abs(I_Phase))); 
%::::::::::::::::::::: 
% Display reconstructed images 
% because the magnitude and phase were switched, the image will be complex. 
% This means that the magnitude of the image must be taken in order to 
% produce a viewable 2-D image. 
subplot(132),imshow(abs(I_Mag),[I_Mag_min I_Mag_max]), colormap gray 
title('reconstructed image only by Magnitude'); 
subplot(133),imshow(abs(I_Phase),[I_Phase_min I_Phase_max]), colormap gray 
title('reconstructed image only by Phase');