एक किनारे डिटेक्टर द्वारा पता लगाया किनारों को जोड़ने


14

मेरे पास कैनी एज डिटेक्टर से प्राप्त बाइनरी इमेज है। किनारों को केंद्र में अच्छी तरह से पता नहीं लगाया गया है और मुझे उनके साथ जुड़ने की आवश्यकता है। किनारों का कनेक्शन अभिविन्यास और पड़ोस पर निर्भर है। अगर वे एक दहलीज (5 पिक्सेल से कम दूरी कहते हैं) से नीचे हैं, तो मुझे कोने को कनेक्ट करने की आवश्यकता है। यदि मेरी लगभग रेखीय विशेषताएं अच्छी तरह से उन्मुख हैं, तो इस सीमा को शिथिल किया जाना चाहिए। (यह सबसे अच्छा मामला है।) छवि

मैंने ट्रांसफ़ॉर्म हूप की कोशिश की, लेकिन यह मेरे लिए काम नहीं करता था क्योंकि मेरे पास सीधी रेखाएं नहीं हैं। कटाव और कटाव भी अच्छा नहीं है; वे छवियों को गड़बड़ बनाते हैं।

मैं जिस दृष्टिकोण की कोशिश कर रहा हूं, वह पहले कोने और नोड्स (MATLAB के साथ bwmorph) का पता लगाना है और फिर पत्तियों को एक अलग विशेषता के रूप में बनाना है। यह अग्रानुसार होगा:

  1. 3x3 विंडो में स्कैनिंग, पड़ोसियों के लिए देखें।
  2. पूर्ण जुड़ी हुई वस्तु को पीछे छोड़ें।
  3. एक पंक्ति (या शायद एक द्विघात बहुपद) को फिट करने का प्रयास करें।
  4. सुविधा-दर-सुविधा जांचें कि क्या यह कनेक्शन के लायक है या नहीं।

निर्णय लेने वाले हिस्से के बाद से कार्यान्वयन सीधा नहीं है जहां कोने को जोड़ने की आवश्यकता है, मुश्किल है।


मुझे शाखाओं को खोजने के लिए एक दिलचस्प समाधान मिला। MATLAB आसानी से स्थान को नोड्स दे सकता है। MATLAB भी कनेक्टेड सुविधाओं को लेबल कर सकते हैं। तो आप एक कनेक्टेड फीचर चुन सकते हैं। नोड्स खोजें। इन नोड्स को 0 पर सेट करें। मूल रूप से फ़्यूचर को डिस्कनेक्ट करें और उन्हें फिर से लेबल करें। पेड़ों में आपकी शाखाएँ होंगी। इसके लिए कम मैनुअल प्रोग्रामिंग की आवश्यकता होती है और परिणाम ठीक लगता है। कुछ इनपुट?
नरेश

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

जवाबों:


4

यह पूर्ण समाधान नहीं हो सकता है, लेकिन आपको अच्छी दिशा देगा।

मूल रूप से, यह कहने का मुख्य मानदंड क्या है कि किनारे मेल खाते हैं? यह "स्थानीय रूप से" बढ़त के ढाल से मेल खाता है और कुछ हद तक यह दूरी उचित है कि यह बढ़त कितनी लंबी है।

यदि आपके पास ज्यामितीय किनारे हैं, तो लंबी सीधी रेखाओं की तरह, होफ बहुत ही सहज काम करेगा। लेकिन यह तब काम नहीं करता है जब किनारों पर मनमाना वक्र हो। इस मामले में, आप अभी भी वक्र के बारे में सोच सकते हैं क्योंकि मोटे तौर पर लगातार स्थिर खंड (आपके मामले में काफी अच्छा), इसलिए, आपको स्थानीय रूप से पर्याप्त लेना चाहिए। यानी आप छवि के एक छोटे से हिस्से को ले सकते हैं (एक ब्लॉक कह सकते हैं) हाफ़ की गणना करें और कुछ चोटियों की पहचान करें। इसके आधार पर, आप पहचान सकते हैं कि डी-हिंगिंग सार्थक अंतर पैदा कर रहा है, यदि हां, तो इसे रखें या आगे बढ़ें।

एक बार छोटे अंतराल भर दिए जाने के बाद, आप इसे बड़े आकार में ले सकते हैं। चोटियाँ अधिक होंगी, लेकिन आप इससे कम का चयन कर सकते हैं।


धन्यवाद दीपन, मैंने भी यही सोचा था। यह महंगा ऑपरेशन होगा लेकिन मैं कुछ जानकारी निकाल सकता हूं। लेकिन कभी-कभी हॉगुह ट्रांसफ़ोमेशन मुझे कनेक्टेड लाइनें भी नहीं दे रहा है। पर्याप्त केवल सीधी सीधी रेखाओं का ध्यान रखता है। और पिक्सल की कनेक्टिविटी के लिए कोई परवाह नहीं है। यह बस एक सीधी रेखा पर 3 या अधिक यादृच्छिक पिक्सल के लिए एक पंक्ति फिट बैठता है। मैं अपनी परिकल्पना को कोड कर रहा हूं। मैं आगे की चर्चा के लिए यहां परिणाम पोस्ट करूंगा। नरेश
नरेश

θ

4

यह वास्तव में सीधा नहीं होने जा रहा है ... आप पूरी तरह से एक ग्राफ संरचना के साथ काम करने की कोशिश कर सकते हैं। सबसे पहले छवि से सभी जुड़े पिक्सेल निकालें और उन्हें एक ग्राफ़ में डालें जहां पड़ोसी नोड्स एक किनारे से जुड़े हुए हैं। आप ऐसे ग्राफ़ को त्याग सकते हैं जो कुछ M संख्या के नोड्स से छोटे होते हैं (छोटे स्पॉट को बाहर करने के लिए जो छवि के लिए प्रासंगिक नहीं हैं)।

इस प्रक्रिया के अंत में आपके पास डिस्कनेक्ट किए गए ग्राफ़ का एक सेट होगा। (आपकी छवि को देखते हुए, ये वास्तव में पेड़ नहीं हैं क्योंकि वहाँ चक्र हैं)

आप कुछ रैंडम नोड से शुरू करके और डीएफएस करके प्रत्येक ग्राफ़ के चरम बिंदुओं (प्रत्येक ग्राफ़ की परिधि में चरम पिक्सल) को पा सकते हैं ।

इस प्रक्रिया के अंत में आपके पास एक्सल पॉइंट्स के अनुरूप प्रत्येक ग्राफ़ के लिए पिक्सेल निर्देशांक का एक सेट होगा जहाँ कनेक्शन बनने की अधिक संभावना है।

अब आप निकटतम चरम बिंदु पड़ोसियों को जोड़ने की कोशिश कर सकते हैं (दूरी <= 5 के साथ) बस एक सीधी रेखा के साथ।

लेकिन, यदि आप लाइन सेगमेंट की ढलान को ध्यान में रखना चाहते हैं जो उस चरम पिक्सेल की ओर जाता है तो आप उस चरम पिक्सेल तक पहुँचने के लिए N पिक्सेल PRIOR को "लाइन फिट" करने का प्रयास कर सकते हैं। इसलिए यदि N = 5, तो किसी शाखा के अंतिम 5 पिक्सल का उपयोग किसी रेखा का अनुमान लगाने में किया जाएगा।

इसलिए, प्रत्येक निकटतम पड़ोसी जोड़ी के लिए, अब आपके पास यह भी एक और बात है कि जज के लिए एक मानदंड के रूप में उपयोग करें यदि दो खंडों को जोड़ा जाना चाहिए (यानी एक्सट्रीमल प्वाइंट डिस्टेंस <= 5 पिक्सल और लगभग बराबर लाइन ढलान)।

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

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

इसके अलावा, शायद यह जांचने योग्य होगा कि आप अपनी छवि के अधिग्रहण को कैसे बेहतर बना सकते हैं (उदाहरण के लिए संकल्प बढ़ाएं)।


अच्छी प्रतिक्रिया के लिए धन्यवाद। हां, आपका अवलोकन सही है। यह एक पेड़ नहीं है, इसलिए एक ग्राफ बनाने के लिए बेहतर है। इससे मुझे साइकिल खोजने में भी मदद मिलेगी। बात यह है, MATLAB ने बायोइन्फो टूल बॉक्स में ग्राफ लागू किया है, जो मुझे लगता है कि ज्यादातर लोगों के पास नहीं होगा। अधिकांश मैं जा सकता हूँ छवि प्रसंस्करण उपकरण बॉक्स। डगलस-पुकर भी कुछ ऐसा है जिसे मैंने माना है। लेकिन एक जीआईएस विशेषज्ञ से परामर्श करने के बाद, मैंने महसूस किया कि यह चीजों को और अधिक जटिल बना सकता है और मुझे इंटरसेक्टिंग लाइनें मिल सकती हैं। इसके अलावा, मुझे एक रेखांकन में भी अलग-अलग लाइनों के खंडों को देखना होगा, क्योंकि मुझे एक पंक्ति बनाने के लिए 10 पिक्सेल की आवश्यकता होती है, और मेरे पास पहले से ही द्विभाजन हो सकता है।
नरेश
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.