2011-10-14 30 views
8

Vì vậy, tôi có hình ảnh này 'Tôi'. Tôi lấy F = fft2 (I) để chuyển đổi 2 chiều. Để tái tạo lại nó, tôi có thể đi ifft2 (F).Matlab nghịch đảo FFT từ pha/độ lớn chỉ

Vấn đề là, tôi cần phải xây dựng lại hình ảnh này chỉ từ a) cường độ và b) thành phần pha F. Làm thế nào tôi có thể tách hai thành phần này của biến đổi bẩn, và sau đó tái tạo lại hình ảnh từ mỗi?

Tôi đã thử hàm abs() và angle() để thu được cường độ và pha, nhưng pha sẽ không tái tạo đúng cách.

Trợ giúp?

Trả lời

10

Bạn cần một ma trận có cùng độ lớn như F và 0 pha và một ma trận khác có cùng pha là F và độ lớn đồng đều. Như bạn đã lưu ý abs cho bạn độ lớn. Để có được ma trận pha có cùng độ lớn đồng đều, bạn cần sử dụng angle để lấy pha, và sau đó tách pha trở lại thành các phần thực và ảo.

> 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

tôi don Không thấy hàm ffti() này mà bạn đề cập đến, ý bạn là ifft2() có lẽ? Nếu không, bạn có một liên kết đến tài liệu cho nó không? Ngoài ra, tôi không thấy hàm arg() này. – Jordan

+0

Xin lỗi, tôi đã sử dụng cú pháp Octave cho 'arg' (tương đương với' góc' của Matlab) và cú pháp được tạo thành trong đầu của tôi cho 'ifft2'. – mtrw

+4

+1, 'F_Phase = exp (j * angle (F));' quá! –

0

nó quá muộn để đưa câu trả lời khác với bài này, nhưng ... anyway

@ zhilevan, bạn có thể sử dụng các mã tôi đã viết bằng câu trả lời mtrw của:

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'); 
Các vấn đề liên quan