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