मैं MATLAB में ग्रेस्केल छवि के फूरियर ट्रांसफॉर्म की गणना करने के लिए fft2 का उपयोग कर रहा हूं।Matlab में 2 डी एफएफटी कैसे प्लॉट करें?
परिणाम की परिमाण को साकार करने का आम तरीका क्या है?
मैं MATLAB में ग्रेस्केल छवि के फूरियर ट्रांसफॉर्म की गणना करने के लिए fft2 का उपयोग कर रहा हूं।Matlab में 2 डी एफएफटी कैसे प्लॉट करें?
परिणाम की परिमाण को साकार करने का आम तरीका क्या है?
कि 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
यहाँ मैटलैब पृष्ठ पर मेरी कैसे से एक उदाहरण है:
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
का उपयोग किया था।
यदि आप छवियों का उपयोग करते हैं (सी-सीमा निर्धारित किए बिना) –
का उपयोग कर रहे निरंतर सी के लिए कोई अर्थ नहीं है आप स्थानिक और आवृत्ति डोमेन में 'fftshift' लागू कर रहे हैं। उस । । । सही नहीं हो सकता, नहीं? – imallett
+1। आप लॉग (एफ + 1) का उपयोग क्यों कर रहे हैं और लॉग (एफ) - (लॉग (0) गैर-परिभाषित मान के कारण) पर एक टिप्पणी जोड़ सकते हैं) –
@Andery धन्यवाद, किया गया। –