मैंने बाइनरी छवियों का सेट किया है, जिस पर मुझे क्रॉस (उदाहरण संलग्न) ढूंढने की आवश्यकता है। मैं बाइनरी छवि से सीमाओं को निकालने के लिए findcontours का उपयोग करें। लेकिन मैं समझ नहीं पा रहा हूं कि मैं यह निर्धारित कैसे कर सकता हूं कि यह आकार (सीमा) पार हो या नहीं? शायद opencv में कुछ अंतर्निहित विधियां हैं, जो इस समस्या को हल करने में मदद कर सकती हैं। मैंने मशीन सीखने का उपयोग करके इस समस्या को हल करने का विचार किया, लेकिन मुझे लगता है कि ऐसा करने का एक आसान तरीका है। धन्यवाद!छवि पर क्रॉस ढूंढना
उत्तर
Viola-Jones object detection एक अच्छी शुरुआत हो सकती है। हालांकि एल्गोरिदम (AFAIK) का मुख्य उपयोग चेहरा पहचान है, लेकिन वास्तव में यह आपके क्रॉस जैसे किसी ऑब्जेक्ट डिटेक्शन के लिए डिज़ाइन किया गया था।
एल्गोरिदम मशीन-लर्निंग आधारित एल्गोरिदम है (इसलिए, आपको वर्गीकृत "क्रॉस" के एक सेट और वर्गीकृत "क्रॉस नहीं" के सेट की आवश्यकता होगी), और आपको महत्वपूर्ण "विशेषताओं" (पैटर्न) की पहचान करने की आवश्यकता होगी, इससे एल्गोरिदम को पार करने में मदद मिलेगी।
एल्गोरिथ्म के रूप में cvHaarDetectObjects()
, मैं एक निष्कर्ष पर आया कि यहां एकमात्र मजबूत तरीका है SVM + HOG का उपयोग करना। बस इतना ही।
मूल छवि से, मान लीजिए कि आपने बहुभुज के सेट निकाले हैं जो संभावित रूप से आपका क्रॉस हो सकता है। यह मानते हुए कि सभी क्रॉस दिखाई दे रहे हैं, इस सीमा तक कि सभी किनारों को लंबाई के रूप में प्रतिष्ठित किया जा सकता है, आप निम्न कोशिश कर सकते हैं।
सभी बहुभुज कि वास्तव में 12 करने के लिए आवश्यक कोने अपने बहुभुज फार्म नहीं था अस्वीकार।
शीर्षस्थों की पुन: क्रमबद्ध करें जैसे कि सबसे छोटी किनारे की लंबाई पहले है।
एक सबसे अच्छा फिट perspective transformation कि समान आकार के एक क्रॉस पर अपने कोने नक्शे बनाने
समान अनुप्रस्थ, जहां अवशिष्ट किसी भी बिन्दु के लिए पर इस बदलाव का उपयोग कर वापस अपने पार परियोजना के लिए द्वारा उत्पन्न बच की जांच अनुमानित बिंदु और इसी वर्दी बिंदु के बीच की दूरी है।
- यदि सभी अवशेष आपकी परिभाषित सहनशीलता के भीतर हैं, तो आपको एक क्रॉस मिला है।
ध्यान दें कि यह ज्यामितीय आकार आप खोज रहे हैं की सादगी की वजह से मुख्य रूप से काम करता है। काम करने के लिए आपके समोच्चों को शोर को हटाने की भी आवश्यकता होगी, उदा। क्रॉस के भीतर प्रत्येक पंक्ति को एक साधारण रेखा में परिवर्तित करने की आवश्यकता है।
आप प्रत्येक ब्लॉब को खराब कर सकते हैं और विश्लेषण कर सकते हैं कि उनकी संख्या पिक्सेल नीचे जा रही है। क्रॉस के घूर्णन स्केलिंग को कोई भी नहीं मिला, उन्हें हमेशा उसी अनुपात के साथ नीचे जाना चाहिए, जब आप शेष केंद्र पर बंद हो जाते हैं। दोबारा, जब ब्लॉब काफी छोटा होता है तो आपको मूल ब्लॉब के केंद्र में रहने की उम्मीद करनी चाहिए। इसे हल करने के लिए आपको किसी भी मशीन लर्निंग एल्गोरिदम या प्रशिक्षण डेटा की आवश्यकता नहीं होगी।
यह काम नहीं करेगा क्योंकि क्रॉस लाइन सीमा पर मौजूद विभिन्न बिंदुओं में एक ही एसआईएफटी वर्णनकर्ता होंगे। –
ओह मैं देखता हूं ... तो क्रॉस के चारों ओर का सर्कल हमेशा मौजूद नहीं होता है? (दोनों उदाहरण एक सर्कल के अंदर एक क्रॉस दिखाते हैं) –