प्रयोग करेंगे ऐसा लगता है अपने इनपुट छवि एक तुम्हें तैनात की तुलना में थोड़ा अलग है, के बाद से मैं सीधे शाखा अंक नहीं एकत्र कर पाया है (वहाँ थे उनमें से बहुत से)। तो, अपनी समस्या को संभालने शुरू करने के लिए मैं शाखा बिंदु पहचान के बाद एक पतला पर विचार कर रहा हूं। मैं उन्हें पतला कर देता हूं और पतली छवि से हटा देता हूं, यह गारंटी देता है कि वास्तव में प्रारंभिक छवि में विभिन्न सेगमेंट के बीच कोई कनेक्शन (4 या 8) नहीं है।
f = im2bw(imread('http://i.imgur.com/yeFyF.png'), 0);
g = bwmorph(f, 'thin', 'Inf');
h = g & ~bwmorph(bwmorph(g, 'branchpoints'), 'dilate');
h
के बाद से कट क्षेत्रों रखती है, निम्नलिखित आपरेशन सभी खंडों के अंत अंक एकत्र करता है:
u = bwmorph(h, 'endpoints');
अब वास्तव में क्या आप अभी नहीं करना चाहते पर आपकी समस्या मैं कुछ त्वरित विश्लेषण किया था हल करने के लिए। h
में दो अलग-अलग सेगमेंट, a
और b
पर विचार करें। हम कहते हैं कि a
और b
ओवरलैप हैं यदि किसी के अंतिम बिंदु दूसरे में निहित हैं। निहित द्वारा मेरा मतलब यह है कि यदि एक का प्रारंभिक एक्स बिंदु दूसरे के बराबर या बराबर है, और अंतराल x बिंदु भी बड़ा या बराबर है। आपके मामले में, "पहाड़" उस सेगमेंट के साथ ओवरलैप करता है जिसे आप निकालना चाहते हैं। उनमें से प्रत्येक को हटाने के लिए, अपने क्षेत्र पर विचार करें। लेकिन, चूंकि ये खंड हैं, क्षेत्र एक अर्थहीन शब्द है। इसे संभालने के लिए, मैंने एक सेगमेंट के अंतिम बिंदुओं को जोड़ा, और क्षेत्र के रूप में केवल आंतरिक बिंदुओं के रूप में उपयोग किया। जैसा कि आप स्पष्ट रूप से ध्यान दे सकते हैं, नीचे ओवरलैप्ड सेगमेंट का क्षेत्र बहुत छोटा है, इसलिए हम कहते हैं कि यह मूल रूप से एक रेखा है और "पहाड़" खंड को रखते हुए इसे छोड़ दें। इस चरण को करने के लिए छवि u
मौलिक महत्व का है, क्योंकि इसके साथ आपको एक स्पष्ट संकेत है कि कहां से शुरू करना और बंद करना बंद करना है। यदि आपने छवि h
का उपयोग किया है, तो आपको यह निर्धारित करने में परेशानी होगी कि कहां से शुरू करना है और एक समोच्च के बिंदु एकत्र करना बंद करना है (यानी, रास्टर ऑर्डर आपको गलत ओवरलैपिंग संकेत देगा)।
एक भी एक के रूप में खंड को फिर से संगठित करने के लिए (वर्तमान में आप उनमें से तीन है), अंक आप h
में g
से खारिज कर दिया पर विचार करें, और उन है कि अब से हटाया नीचे खंड से संबंधित नहीं है का उपयोग करें।
आपने उल्लेख किया कि यह हमेशा 3 नहीं हो सकता ... इसके पीछे क्या कारण है? मेरी समझ के लिए यह हमेशा एक 1px चौड़ाई वाली रेखा/समोच्च है, जो उस पैटर्न (3) के फिट बैठता है ..? – mchlfchr
@mchlfchr: 'bwlabel' चरण में, तीन डिस्कनेक्टेड लाइन क्रमशः लेबल 1,2, और 3 असाइन की जाती हैं। यह हमेशा 3 लेबल वाला हिस्सा नहीं हो सकता है जिसे आप निकालना चाहते हैं। – Jonas
इसलिए किसी भी मामले के लिए "बाहरी" रेखा का चयन करना संभव नहीं है? जैसा कि मैंने 'हैकब्रे' तरीके को समझा, यह इस तरह के ट्रिपल कनेक्टेड संरचनाओं को अलग करता है? अगले चरण में मैंने उस बाहरी लेबल का चयन किया होगा, लेकिन उस विकल्प के लिए 'hbreak' काम नहीं कर रहा है। – mchlfchr