जब उनके किनारे एक-दूसरे को स्पर्श करते हैं, तो मैं अलग-अलग वस्तुओं का पता कैसे लगा सकता हूं?


21

मुझे कैमरे से प्राप्त छवि में सभी आकृति खोजने की आवश्यकता है। इसलिए मैं सबसे पहले किनारों को खोजने के लिए कैनी एज डिटेक्टर का उपयोग करता हूं और फिर कॉन्ट्रो को ढूंढता हूं। बहुत साधारण।

हालांकि, मेरे कंटेस्टेंट्स को "मर्ज" हो जाता है। उदाहरण के लिए, नीचे दी गई छवि में, मेरे पास स्पष्ट रूप से 4 अलग-अलग ऑब्जेक्ट हैं। किनारों को कुछ बिंदुओं पर थोड़ा स्पर्श किया जाता है, इसलिए मुझे चार अलग-अलग लोगों के बजाय एक बड़ा समोच्च मिलता है। मैंने थ्रेसहोल्ड, इरोडिंग, आकृति विज्ञान संचालन और इसी तरह की चीजों के आसपास बदलने की कोशिश की, लेकिन किनारों को थोड़ा छूता रहा। क्या किसी के पास नीचे दिए गए चित्रों के समान अलग-अलग आकृति प्राप्त करने के बारे में कोई सुझाव है? (नीचे दी गई छवि स्पष्ट रूप से सिर्फ एक उदाहरण है, मेरी वास्तविक छवियां बहुत अधिक जटिल हैं, लेकिन एक ही मूल समस्या है)।

यहाँ छवि विवरण दर्ज करें


वाटरशेड सेगमेंटेशन काम कर सकता है।
sm176357

तो, आपको उन मामलों पर भी विचार करना चाहिए जहां संपर्क एक रेखा है और न केवल एक बिंदु है (स्पर्श नहीं बल्कि अतिव्यापी)
श्रवण बोगारापु

जवाबों:


11

विभिन्न घटकों का पता लगाना:

यदि आप अलग-अलग घटकों का पता लगाने की कोशिश कर रहे हैं, तो संभवत: अन्य दृष्टिकोण भी हैं जो उन्हें आकृति का पता लगाने की तुलना में करते हैं। यहाँ एक उदाहरण है, गणितज्ञ में। फैलाव के बाद कटाव का पता लगाने से पहले दूसरे घटक में अंतर को बंद करने के लिए उपयोग किया जाता है (यदि आप ऐसा नहीं करते हैं, तो यह इसका पता नहीं लगाएगा)।

img = Binarize@Import["http://i.stack.imgur.com/yqDyu.png"];
Colorize[MorphologicalComponents[Dilation[Erosion[img,1],1]]]

नीचे बाईं तरफ आकृति, अपूर्ण वस्तु का पता लगाने (अंतराल को बंद किए बिना) और दाईं ओर, सही पहचान (उपरोक्त कोड को चलाने) को दिखाती है।

यहाँ छवि विवरण दर्ज करें यहाँ छवि विवरण दर्ज करें

विभिन्न आकृति का पता लगाना:

हालांकि, यदि आप वास्तव में केवल आकृति को अलग करना चाहते हैं, तो यहां एक उदाहरण है। कटाव और फैलाव अंतराल को बंद करने से पहले किया जाता है और परिणामी छवि को कैनी एज डिटेक्टर के माध्यम से चलाया जाता है। मैंने डिफ़ॉल्ट विकल्प स्पष्ट कर दिए हैं, ताकि आप देख सकें कि क्या उपयोग किया जा रहा है।

img2 = EdgeDetect[Dilation[Erosion[img, 1], 1], Method -> "Canny"]

यह आपको अंदर और बाहर दोनों किनारों (नीचे बाईं ओर आंकड़ा देखें) देगा, क्योंकि पिक्सेल की चौड़ाई लगभग 1 से अधिक है। मेरे पास इसे पाने की कोशिश में बहुत ज्यादा किस्मत नहीं थी, क्योंकि प्रदर्शन में गिरावट (आपकी अन्य छवियों के लिए अलग हो सकती है)। आंतरिक कंट्रोस वे हैं जो आप चाहते हैं, और बाहरी समोच्च सभी 4 घटकों का संयुक्त समोच्च है। अब हमें बस इतना करना है कि सबसे बाहरी को एक साथ छोड़ दें:

SelectComponents[img2, "EnclosingComponentCount", # > 0 &]

जो आपको सिर्फ आंतरिक आकृति देता है (नीचे दाईं ओर देखें)। दूसरे शब्दों में, यह केवल उन कंटेस्टरों को चुनता है जो कम से कम एक अन्य समोच्च द्वारा संलग्न हैं, जो बाहरी व्यक्ति को स्वचालित रूप से अयोग्य घोषित करता है। मैं इन कमांड / ऑपरेशन्स के समकक्ष ओपनसीवी में नहीं जानता।

यहाँ छवि विवरण दर्ज करें यहाँ छवि विवरण दर्ज करें

ध्यान दें कि आकृति में स्पष्ट विराम छोटे आकार में jpeg को सहेजने के कारण हैं। यह मेरे स्क्रीन पर ऐसा नहीं दिखता है।


2

कटाव जैसे आकारिकीय फिल्टर के साथ अपनी छवियों को पूर्व-प्रसंस्करण करने का प्रयास करें । यह स्पर्श आकृति को अलग करने की अनुमति देगा। अपने आकृति का पता लगाने के बाद, आप अक्षांशों को पूरा करने के लिए एक फैलाव ऑपरेशन लागू कर सकते हैं।


मैंने कोशिश की, लेकिन परिणामों में कोई सुधार नहीं हुआ।

1
क्या आप एक वास्तविक उदाहरण छवि दिखा सकते हैं?

2

यह आपके प्रश्न का उत्तर नहीं है, लेकिन समोच्च विश्लेषण त्रुटि-प्रवण है। आप इसके बारे में बहुत कुछ नहीं कर सकते हैं और यह केवल बहुत ही सरल परिदृश्यों पर काम करता है।

यदि आपको इसका उपयोग करने में परेशानी है, तो आपको पूरी तरह से अलग एल्गोरिथ्म की तलाश करनी चाहिए। चीजों को हल करने के लिए अधिक जटिल और अधिक मजबूत तरीके हैं, लेकिन यह इस बात पर निर्भर करता है कि आप क्या हासिल करना चाहते हैं (ऑब्जेक्ट डिटेक्शन, ट्रैकिंग, आदि)


धन्यवाद। मेरा कार्यक्रम हाथ का पता लगाने के लिए उपयोग किया जाता है, इसलिए मुझे लगता है कि यह ऑब्जेक्ट डिटेक्शन के समान होगा। क्या आपने अधिक जटिल और मजबूत एल्गोरिदम के लिए कोई सुझाव दिया है? Haar Features, SURF और इसी तरह की मशीन लर्निंग एल्गोरिदम ऐसी कोई चीज़ नहीं है जो मैं कर सकता हूँ।

क्या आपने इन संसाधनों को देखा? paginas.fe.up.pt/~hgc2011 वे मुख्य रूप से डेटाबेस / परिणाम हैं, लेकिन मुझे आशा है कि आप यहां कुछ अच्छे पेपर ढूंढ पाएंगे।

0

कोंट्रोस आवश्यक रूप से खुले विचार नहीं हैं कि आपने उन्हें पता लगाने के लिए कैनी का उपयोग किया है। कैनी के साथ समस्याओं को पहले से ही यहां खारिज कर दिया गया थाचर्चा चालाक पर आप मूल विचार अभी भी बंद करने और फैलाव जैसे कार्य कर रहे हैं का मूल्यांकन किया बंद आकृति को चालाक की चोटी पर की आवश्यकता है कि है कि वहाँ देता है।

यह भी पर निर्भर करता है कि हम के लिए देख रहे हैं कि क्या आकृति या विभाजन (कैनी की तरह विधियों के विरुद्ध Graphcuts )। इसलिए मुझे लगता है कि मजबूत समाधान की तलाश आपके अंतिम आवेदन पर निर्भर करती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.