2013-07-17 7 views
5

मैं वर्तमान में एक बाइनरी छवि में अलग "शाखाओं" को संग्रहित करने का एक साफ तरीका खोजने की कोशिश कर रहा हूं। इस छोटे एनीमेशन यह बताते हैं:ओपनसीवी: सिंगल पिक्सेल शाखाओं के साथ पिक्सल के लिए खोज

searching for branches

मैं शाखाओं मैं पिक्सेल सूचकांक कि एकल-पिक्सेल विस्तृत शाखा का निर्माण करता है इकट्ठा करने के लिए की जरूरत है साथ जाने के रूप में। जब मैं एक जंक्शन बिंदु मारा तो इसे विभाजित और नई शाखाओं को स्टोर करना चाहिए।

इसके बारे में जाने का एक तरीका शायद 3x3 सब्रेगियन बनाना है, पता लगाएं कि इसके अंदर सफेद पिक्सेल हैं या नहीं, तदनुसार इसे स्थानांतरित करें, यदि दो से अधिक हो तो जंक्शन बिंदु बनाएं। हमेशा पिछले उप-संग्रह को संग्रहीत करें ताकि कोई यह सुनिश्चित करने के लिए इसका उपयोग कर सके कि हम उन क्षेत्रों में नहीं जाते हैं जिन्हें हम पहले ही स्कैन कर चुके हैं। यह पता लगाने में थोड़ा मुश्किल है कि मैं इसके बारे में कैसे जाऊंगा।

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

+0

यह एक [ग्राफ ट्रेवर्सल समस्या] की तरह दिखता है (http://en.wikipedia.org/wiki/Graph_traversal), जहां जंक्शन अंक नोड्स और एक पिक्सेल विस्तृत शाखाएं हैं ग्राफ के किनारों कर रहे हैं। मनमाना प्रारंभिक बिंदु से शुरू करके, आप ग्राफ़ ट्रैवर्सल एल्गोरिदम जैसे [चौड़ाई-पहली खोज] (http://en.wikipedia.org/wiki/Breadth-first_search) या [गहराई से पहली खोज) लागू करके सभी शाखाओं और जंक्शनों को खोज सकते हैं ] (http://en.wikipedia.org/wiki/Depth-first_search) – Alexey

+0

इसके अलावा, आप [कनेक्टेड घटक लेबलिंग] (http://en.wikipedia.org/wiki/Connected-component_labeling) देख सकते हैं – Alexey

+0

@pray क्या आपको यहां एक खोज करने की ज़रूरत है? क्या यह एक शाखा से शुरू करने और आगे बढ़ने की बाधा है? यदि आप पूरी छवि को "देख" सकते हैं, तो शाखाओं को समूहित करना और लेबल करना आसान है। यदि आप नहीं कर सकते हैं, तो आपको पहली बार गहराई की खोज की आवश्यकता है और किसी अन्य को खोजने के लिए जंक्शन पर वापस जाएं; प्रत्येक बार डेटा स्टोर करें- एलेक्सी ने अभी सुझाव दिया है। – baci

उत्तर

1

मुझे नहीं पता कि आप इसे अपने मामले में लागू कर सकते हैं लेकिन आपको सीवी :: findContour पर एक नज़र रखना चाहिए। आपको आदेश दिए गए बिंदुओं का वेक्टर मिलेगा।

http://docs.opencv.org/doc/tutorials/imgproc/shapedescriptors/find_contours/find_contours.html

+0

आह, कोशिश की कि। FindContours सिंगल-पिक्सेल लाइनों के साथ अच्छी तरह से नहीं खेलता है। डेटा के साथ बाद में जो करना है, उसके लिए यह वास्तव में उपयुक्त नहीं है। – prayforbacon

+0

शायद आप आरओआई के साथ खेल सकते हैं, लेकिन अपने अंक ऑर्डर करने के लिए मैं बेहतर नहीं कर सकता ... – Poko

+0

मैं मूर्ख हूं। यह विधि काम करता है, विशेष रूप से पहले से लागू पतले के साथ। – prayforbacon

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