2016-02-06 9 views
5

मुझे एक छवि का ढाल मिल रहा है। अभी के लिए मैं बस 5 x 5 छवि का उपयोग कर रहा हूँ। मुझे ढाल की दिशा खोजने में अधिक दिलचस्पी है, लेकिन मुझे मैन्युअल रूप से पेपर पर परिणाम नहीं मिल रहे हैं क्योंकि मैं उन्हें MATLAB फ़ंक्शन imgradient का उपयोग करके प्राप्त करता हूं। किसी छवि के ढाल को खोजने के लिए यहां उपयोग की जाने वाली इनपुट छवियों और सोबेल फ़िल्टर के बारे में अधिक जानने के लिए कृपया निम्न छवियों का संदर्भ लें। 3 x 3 सोबेल यहां इस्तेमाल ऑपरेटर में से एक है कि मैं समारोहMATLAB में imgradient का उपयोग करते समय मैं ढाल के अभिविन्यास की व्याख्या कैसे करूं?

f1 = fspecial('sobel'); 

और अन्य एक बस f1 transposing द्वारा प्राप्त किया जाता का उपयोग कर पाने के लिए है।

कृपया ध्यान दें कि मैं यहां केवल एक पिक्सेल की दिशा खोजने की कोशिश कर रहा हूं जो लाल रंग से घिरा हुआ है। यहां पहले दो मामलों में मेरा परिणाम मेल खाता है कि मैं imgradient फ़ंक्शन का उपयोग कर प्राप्त करता हूं लेकिन तीसरे मामले में imgradient -135 डिग्री देता है जबकि मुझे यह -45 हो रहा है। कृपया मुझे त्रुटि खोजने में मदद करें।

Case one and case two

Case three (Mismatch in results)

के रूप में भी follwing छवि में दिखाया गया है कि कैसे निम्नलिखित ढाल दिशाओं की व्याख्या करने के बारे में समझाएं।

enter image description here

उत्तर

5

आपका गणना सही हैं, लेकिन यह अत्यधिक अनुशंसित है कि आप चूंकि यह गणना वृत्त का चतुर्थ भाग कि ग्रेडिएंट का कोण में रहता है के जानकार नहीं है का उपयोग नहीं atan(y/x) परिभाषा के साथ atan(y/x) कर। आपके घटक झूठी रूप से कोण को 45 डिग्री होने की रिपोर्ट करेंगे जब यह सही नहीं होगा। आपको इसके बजाय atan2 का उपयोग करना चाहिए।

अब imgradient के आंतरिक काफी सीधे आगे हैं। मैं बाहर बात करने के लिए है कि कोण imgradient द्वारा रिपोर्ट संभालने जाता है कि y समन्वय शीर्ष करने के लिए नीचे से बढ़ती जा रही है चाहते हैं। इसके अलावा, imgradient उन्मुखीकरण के कोण है कि परिवर्तन का सबसे बड़ा दर की ओर इशारा करते है रिपोर्ट करना चाहिए। छवियों के मामले में, यह उस दिशा में इंगित करता है जहां हम अंधेरे पिक्सल से हल्के पिक्सल तक प्रगति करते हैं।

पहले imgradientxy के लिए एक कॉल कहा जाता है और यदि आप imgradient को sobel ध्वज प्रदान fspecial('sobel') को फोन किया है। वास्तव में, imgradientxy के इस हिस्से को क्या याद रखना महत्वपूर्ण है है (लाइन 75 पर शुरू: MATLAB R2015a):

case 'sobel' 
    h = -fspecial('sobel'); %// Align mask correctly along the x- and y- axes 
    Gx = imfilter(I,h','replicate'); %' 
    if nargout > 1 
     Gy = imfilter(I,h,'replicate'); 
    end 

सूचना है कि नकारात्मक fspecial के उत्पादन की पर प्रदान की टिप्पणी के रूप में रूप में अच्छी तरह से किया जाता है वह रेखा यह (अर्थात् Gy) सुनिश्चित करना है कि नकाब क्षैतिज किनारों का पता लगाने के लिए है (जैसा कि आमतौर पर कंप्यूटर ग्राफिक्स में जाना जाता है) y-नीचे है। विशेष रूप से, छवि के मूल ऊपरी-बाएं कोने में और नहीं नीचे बाएँ है।

यह है कि कैसे समन्वय प्रणाली का एक सचित्र प्रतिनिधित्व y -down में खर्च की गई थी:

स्रोत: Wikipedia - Rotation Matrix

जैसे, जब उन्मुखीकरण खोजने है एक यह सुनिश्चित करने के लिए अतिरिक्त आवश्यकता है कि ढाल के अभिविन्यास का कोण y-up समन्वय प्रणाली के संबंध में है जिसका उपयोग हम करते हैं। इसलिए जब आप ढाल के अभिविन्यास के कोण को ढूंढ रहे हैं, तो आपको y कोण की गणना करने से पहले समन्वय करने की आवश्यकता है ताकि कोण मानक मानक सम्मेलन के संबंध में हो।

ढाल है कि आप की तलाश की परिभाषा का पीछा y की पारंपरिक प्रणाली नीचे शीर्ष पर से बढ़ती समन्वय है। निषेध के लिए आवश्यक है और वास्तव में आप imgradient के लिए स्रोत कोड की जांच करता है, तो, यह ठीक है क्या कोड की लाइन 127 (संस्करण R2015a) में किया जा रहा है:

Gdir = atan2(-Gy,Gx)*180/pi; %// Radians to degrees 

आप अपने आप को मांग रहा है यही कारण है कि वहाँ है एक मास्क को अस्वीकार करने की आवश्यकता है और फिर उन्मुखीकरण को खोजने के बाद y समन्वय को अस्वीकार कर दें। इसका कारण यह है कि संशोधित मुखौटा को ढाल की परिमाण को सही ढंग से कैप्चर करने की आवश्यकता होती है और इसलिए हम मास्क को एक बार अस्वीकार करते हैं और ढाल परिमाण पाते हैं और फिर हम y समन्वय को अस्वीकार करते हैं ताकि हम परंपरागत समन्वय के संबंध में कोण पा सकें प्रणाली।

आपके मामले में, यह देखते हुए कि Gx = 765 और Gy = -765, उपरोक्त समीकरण पैदावार में इन मात्रा प्रतिस्थापन:

>> Gy = 765; 
>> Gx = -765; 
>> Gdir = atan2(-Gy,Gx)*180/pi 

Gdir = 

    -135 

क्योंकि ढाल दिशा परिवर्तन की सबसे बड़ी दर की ओर दिशा से मेल खाती है यह समझ में आता है। -135 डिग्री का मतलब है कि हम दक्षिण पश्चिम की ओर इशारा कर रहे हैं जो समझ में आता है क्योंकि हम अंधेरे पिक्सल से हल्के पिक्सेल तक प्रगति कर रहे हैं।

अब यदि आप अपनी तीसरी उदाहरण छवि से परामर्श करते हैं, तो imgradient द्वारा रिपोर्ट किए गए कोण वास्तव में सही हैं। बस अंधेरे क्षेत्र से प्रकाश क्षेत्र में एक रेखा खींचें और देखें कि x धुरी के साथ यह कोण क्या बनाता है जहां इसे दाईं ओर बढ़ रहे कॉलम के साथ गठबंधन किया गया है। +90 डिग्री का पहला कोण समझ में आता है क्योंकि हम अंधेरे क्षेत्र और प्रकाश का पालन करने के लिए नीचे से ऊपर तक जा रहे हैं। यह ऐसी स्थिति के साथ एक समान स्थिति है जहां छवि को उलट दिया जाता है। तीसरी स्थिति यह है कि हमने पहले देखा है और चौथी स्थिति केवल तीसरी स्थिति 180 डिग्री से घिरा हुआ है और इसलिए स्वाभाविक रूप से अंधेरे से प्रकाश तक अभिविन्यास का कोण अब +45 डिग्री है जो पहले -135 डिग्री के विपरीत था।

+0

बहुत बहुत धन्यवाद !! खूबसूरती से समझाया !! –

+0

@NavdeepSony बिल्कुल कोई समस्या नहीं :) मुझे मदद करने में खुशी है। सौभाग्य! – rayryeng

+0

मैं जीडीआईआर के बारे में उलझन में हूं। मुझे लगता है कि जीडीआईआर अधिकतम तीव्रता परिवर्तन की दिशा है और किनारे हमेशा इसके लिए ऑर्थोगोनल है। क्या मैं सही हू? जब मैं 'gx = [- 1 0 1 का उपयोग करता हूं; -2 0 2; -1 0 1] और जीई = [- 1 -2 -1; 0 0 0; 1 2 1] 'मेरे सभी उत्तर असंगत के साथ मेल खाते हैं लेकिन मैं परिणामों की व्याख्या करने में असमर्थ हूं। उदाहरण के लिए 1: मुझे 'Gdir = 90' मिल रहा है जो एक रेखा है जो y (y-down) पर रहता है और मुझे लगता है कि तीव्रता परिवर्तन दिखा रहा है। मामूली रूप से 2 मामले के लिए: 'Gdir = -90', तीव्रता को ऊपर दिखाता है लेकिन 3:' Gdir = -135' जो कोण है जिस पर किनारे मौजूद है। समस्या क्या है? –

संबंधित मुद्दे

 संबंधित मुद्दे