2011-10-14 15 views
8

तो मेरे पास यह छवि 'मैं' है। मैं 2 डी चौकोर परिवर्तन प्राप्त करने के लिए एफ = एफएफटी 2 (आई) लेता हूं। इसे पुनर्निर्माण के लिए, मैं ifft2 (एफ) जा सकता था।चरण/परिमाण से Matlab उलटा एफएफटी केवल

समस्या यह है कि मुझे इस छवि को केवल एक) परिमाण से पुनर्निर्माण करने की आवश्यकता है, और बी) एफ के चरण घटकों। मैं चारों ओर परिवर्तन के इन दो घटकों को कैसे अलग कर सकता हूं, और फिर प्रत्येक से छवि का पुनर्निर्माण कैसे कर सकता हूं?

मैंने परिमाण और चरण प्राप्त करने के लिए abs() और कोण() फ़ंक्शंस की कोशिश की, लेकिन चरण एक ठीक तरह से पुनर्निर्माण नहीं करेगा।

सहायता?

उत्तर

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() शायद है? यदि नहीं, तो क्या आपके पास इसके लिए प्रलेखन का लिंक है? इसके अलावा, मुझे यह तर्क() फ़ंक्शन नहीं दिख रहा है। – Jordan

+0

क्षमा करें, मैं 'arg' के लिए ऑक्टेव सिंटैक्स का उपयोग कर रहा था (मैटलैब के' कोण 'के बराबर) और' ifft2' के लिए मेक-इन-माय-हेड सिंटैक्स। – mtrw

+4

+1, 'F_Phase = exp (j * कोण (एफ)); 'भी! –

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');