2012-11-25 34 views

उत्तर

51

कि I मान लिया जाये कि अपने इनपुट छवि है और F अपनी फूरियर रूपांतरण (यानी F = fft2(I))

आप इस कोड का उपयोग कर सकते हैं:

F = fftshift(F); % Center FFT 

F = abs(F); % Get the magnitude 
F = log(F+1); % Use log, for perceptual scaling, and +1 since log(0) is undefined 
F = mat2gray(F); % Use mat2gray to scale the image between 0 and 1 

imshow(F,[]); % Display the result 
+6

+1। आप लॉग (एफ + 1) का उपयोग क्यों कर रहे हैं और लॉग (एफ) - (लॉग (0) गैर-परिभाषित मान के कारण) पर एक टिप्पणी जोड़ सकते हैं) –

+0

@Andery धन्यवाद, किया गया। –

23

यहाँ मैटलैब पृष्ठ पर मेरी कैसे से एक उदाहरण है:

close all; clear all; 

img = imread('lena.tif','tif'); 
imagesc(img) 
img = fftshift(img(:,:,2)); 
F  = fft2(img); 

figure; 

imagesc(100*log(1+abs(fftshift(F)))); colormap(gray); 
title('magnitude spectrum'); 

figure; 
imagesc(angle(F)); colormap(gray); 
title('phase spectrum'); 

यह छवि के परिमाण स्पेक्ट्रम और चरण स्पेक्ट्रम देता है। मैंने एक रंगीन छवि का उपयोग किया, लेकिन आप आसानी से ग्रे छवि का उपयोग करने के लिए इसे समायोजित कर सकते हैं।

ps। मैंने अभी देखा है कि Matlab 2012a पर उपर्युक्त छवि अब शामिल नहीं है। तो, उपरोक्त पहली पंक्ति को

img = imread('ngc6543a.jpg'); 

और यह काम करेगा। मैंने उपरोक्त उदाहरण बनाने के लिए मैटलैब का एक पुराना संस्करण इस्तेमाल किया और बस इसे यहां कॉपी किया।

स्केलिंग कारक

जब हम 2 डी फूरियर को बदलने परिमाण साजिश, हम लॉग उज्ज्वल क्षेत्र में अंधेरा पिक्सल की सीमा का विस्तार करने के लिए बदलने का उपयोग कर तो हम बेहतर देख सकते हैं पिक्सेल मान पैमाने पर करने की जरूरत पर परिवर्तन हम समीकरण

s = c log(1+r) 

इस पैमाने कि मैं जानता हूँ कि detrmine पूर्व कोई ज्ञात तरीका नहीं है में एक c मूल्य का उपयोग करें। बस आपको पसंद करने के लिए अलग-अलग मानों को आजमाएं। मैंने उपर्युक्त उदाहरण में 100 का उपयोग किया था।

enter image description here

+0

यदि आप छवियों का उपयोग करते हैं (सी-सीमा निर्धारित किए बिना) –

+4

का उपयोग कर रहे निरंतर सी के लिए कोई अर्थ नहीं है आप स्थानिक और आवृत्ति डोमेन में 'fftshift' लागू कर रहे हैं। उस । । । सही नहीं हो सकता, नहीं? – imallett