2016-09-27 10 views
5

का उपयोग कर सी ++ में डेटा क्लस्टरिंग मैं ऑब्जेक्ट ट्रैकिंग के लिए एक प्रोजेक्ट पर काम कर रहा हूं, जहां मुझे एक लिडर सेंसर (पेपरल-फूच आर 2000) से डेटा (मिमी और आयाम में दूरी) मिल रहा है। ओपनजीएल और सी ++ का उपयोग करके मैं लिनक्स मशीन में डेटा प्रदर्शित कर रहा हूं।
enter image description here अब मैं दूरी के आधार पर क्लस्टर में अंक समूहित करना चाहता हूं। मुझे नहीं पता कि सभी समूहों को सी ++ में अलग कंटेनरों में कैसे रखा जाए? क्या कोई संभावना है कि मैं ऑब्जेक्ट ट्रैकिंग के लिए ओपनसीवी में इनपुट डेटा के रूप में ओपनजीएल से आउटपुट डेटा का उपयोग कर सकता हूं?ओपनजीएल

+0

आप इस प्रश्न को छवि में जोड़ सकते हैं। – ChronoTrigger

उत्तर

5

आपको ओपनजीएल डेटा को ओपनसीवी संरचनाओं में बदलना चाहिए। डेटा साझा करने के लिए OpenCV में कुछ अंतर्निहित फ़ंक्शंस हैं, look here। आप ओपनजीएल पॉइंट्स को ओपनसीवी Mat, या ओपनसीवी cv::Point3f के वेक्टर में कॉपी भी कर सकते हैं। यह कैसे करें ओपनजीएल संरचना पर निर्भर करता है जिसमें आपके अंक प्रदर्शित होते हैं। अगर आपको ओपनजीएल से ओपनसीवी में मैट्रिक्स को कनवर्ट करना है, तो ध्यान रखें कि ओपनजीएल कॉलम-मेजर ऑर्डर में मैट्रिक्स स्टोर करता है, जबकि ओपनसीवी पंक्ति-प्रमुख ऑर्डर करता है।

फिर, ओपनसीवी कुछ (सीमित) clustering solutions प्रदान करता है। आपके आवेदन के आधार पर, के-साधन काम कर सकते हैं, लेकिन मैं सुझाव दूंगा कि आप अन्य क्लस्टरिंग तकनीकों जैसे कि क्विकशफ्ट या डीबीएससीएएन को भी देखें।

1

आप अपने उपयोग 2) फ़ंक्शन के अनुसार Map (या [पॉइंट_] या [कीपॉइंट] का उपयोग करके ओपनसीवी में उन सभी डेटा को आसानी से मानचित्र कर सकते हैं।
इसके बाद मैं DBSCAN का उपयोग करने का सुझाव दूंगा क्योंकि यह घनत्व के आधार पर काम करता है और क्लस्टर की संख्या की आवश्यकता नहीं होती है (क्योंकि मुझे नहीं लगता कि आप यहां क्लस्टर की पूर्व परिभाषित संख्या कर सकते हैं) जैसे के-मीन्स।

नोट: आप आसानी से इंटरनेट पर डीबीएससीएएन के लिए सी ++ कोड पा सकते हैं।