सबसे दिलचस्प परियोजनाओं में से एक मैंने पिछले कुछ वर्षों में काम किया है जो छवि प्रसंस्करण के बारे में एक परियोजना थी । लक्ष्य कोका-कोला 'डिब्बे' को पहचानने में सक्षम होने के लिए एक प्रणाली विकसित करना था (ध्यान दें कि मैं 'डिब्बे' शब्द पर जोर दे रहा हूं, आप देखेंगे कि एक मिनट में क्यों है)। आप स्केल और घुमाव के साथ हरे आयत में पहचाने जा सकने वाले नमूने को नीचे देख सकते हैं ।
परियोजना पर कुछ अड़चनें:
- पृष्ठभूमि बहुत शोर हो सकता है।
- कर सकते हैं किसी भी हो सकता था पैमाने या रोटेशन या यहाँ तक कि अभिविन्यास (उचित सीमा के भीतर)।
- छवि में कुछ हद तक फ़िज़नेस हो सकती है (आकृति पूरी तरह से सीधी नहीं हो सकती है)।
- वहाँ छवि में कोका कोला की बोतलों हो सकता है, और कलन विधि केवल का पता लगा लेगा कर सकते हैं !
- छवि की चमक बहुत भिन्न हो सकती है (ताकि आप रंग पहचान पर "बहुत अधिक" भरोसा नहीं कर सकते)।
- कर सकते हैं आंशिक रूप से पक्ष या मध्यम पर छिपा हो सकता है और संभवतः आंशिक रूप से एक बोतल के पीछे छिपा हुआ।
- कोई हो सकता है कर सकते हैं छवि में सभी पर, जिस स्थिति में आप कुछ भी नहीं पाते हैं और इसलिए कह संदेश लिखना पड़ा।
तो आप इस तरह से मुश्किल चीजों के साथ समाप्त हो सकते हैं (जो इस मामले में मेरा एल्गोरिथ्म पूरी तरह से विफल था):
मैंने इस परियोजना को कुछ समय पहले किया था, और इसे करने में बहुत मज़ा आया था, और मेरे पास एक अच्छा कार्यान्वयन था। यहाँ मेरे कार्यान्वयन के बारे में कुछ विवरण हैं:
भाषा : OpenCV लाइब्रेरी का उपयोग करके C ++ में किया गया ।
प्री-प्रोसेसिंग : इमेज प्री-प्रोसेसिंग के लिए, यानी एल्गोरिदम को देने के लिए इमेज को और कच्चे रूप में बदलना, मैंने 2 तरीके इस्तेमाल किए:
- आरजीबी से एचएसवी में रंग डोमेन को बदलना और "लाल" रंग के आधार पर फ़िल्टरिंग करना, नारंगी जैसे रंगों से बचने के लिए एक निश्चित सीमा से ऊपर संतृप्ति, और अंधेरे टन से बचने के लिए कम मूल्य का फ़िल्टर करना। अंतिम परिणाम एक द्विआधारी काले और सफेद छवि थी, जहां सभी सफेद पिक्सेल इस सीमा से मेल खाने वाले पिक्सल का प्रतिनिधित्व करेंगे। स्पष्ट रूप से छवि में अभी भी बहुत अधिक बकवास है, लेकिन यह उन आयामों की संख्या को कम करता है जिनके साथ आपको काम करना है।
- शोर को कम करने के लिए माध्य फ़िल्टरिंग (सभी पड़ोसियों के माध्य पिक्सेल मूल्य और पिक्सेल को इस मान से प्रतिस्थापित करें) का उपयोग करके शोर फ़िल्टरिंग।
- 2 पूर्ववर्ती चरणों के बाद सभी वस्तुओं के आकृति प्राप्त करने के लिए कैनी एज डिटेक्शन फ़िल्टर का उपयोग करना ।
एल्गोरिथम : इस कार्य के लिए जिस एल्गोरिथ्म को मैंने स्वयं चुना था, उसे फीचर निष्कर्षण की इस भयानक पुस्तक से लिया गया था और इसे सामान्यीकृत हूप ट्रांसफ़ॉर्म (नियमित हफ़ ट्रांसफ़ॉर्म से अलग) कहा जाता है। यह मूल रूप से कुछ बातें कहता है:
- आप इसके विश्लेषणात्मक समीकरण (जो यहाँ मामला है) को जाने बिना अंतरिक्ष में किसी वस्तु का वर्णन कर सकते हैं।
- यह स्केलिंग और रोटेशन जैसी छवि विकृति के लिए प्रतिरोधी है, क्योंकि यह मूल रूप से स्केल फैक्टर और रोटेशन कारक के हर संयोजन के लिए आपकी छवि का परीक्षण करेगा।
- यह एक बेस मॉडल (एक टेम्प्लेट) का उपयोग करता है जिसे एल्गोरिथ्म "सीखेगा"।
- समोच्च छवि में शेष प्रत्येक पिक्सेल दूसरे पिक्सेल के लिए मतदान करेगा, जो निश्चित रूप से मॉडल से सीखी गई बातों के आधार पर आपकी वस्तु का केंद्र (गुरुत्वाकर्षण के संदर्भ में) होगा।
अंत में, आप वोटों के एक हीट मैप के साथ समाप्त होते हैं, उदाहरण के लिए, कैन के समोच्च के सभी पिक्सेल इसके गुरुत्वाकर्षण केंद्र के लिए वोट करेंगे, इसलिए आपके पास एक ही पिक्सेल में बहुत सारे वोट होंगे केंद्र, और नीचे के रूप में गर्मी के नक्शे में एक चोटी देखेंगे:
आपके पास एक बार ऐसा करने के लिए, एक साधारण सीमा-आधारित हेयुरिस्टिक आपको केंद्र पिक्सेल का स्थान दे सकता है, जिसमें से आप स्केल और रोटेशन को प्राप्त कर सकते हैं और फिर इसके चारों ओर अपनी छोटी आयत की साजिश कर सकते हैं (अंतिम पैमाने और रोटेशन का कारक स्पष्ट रूप से आपके सापेक्ष होगा) मूल टेम्पलेट)। सिद्धांत में कम से कम ...
परिणाम : अब, जबकि यह दृष्टिकोण बुनियादी मामलों में काम करता था, कुछ क्षेत्रों में इसकी कमी थी:
- यह बहुत धीमी है ! मैं इस पर जोर नहीं दे रहा हूं। 30 परीक्षण छवियों को संसाधित करने के लिए लगभग पूरे दिन की आवश्यकता थी, जाहिर है क्योंकि मेरे पास रोटेशन और अनुवाद के लिए बहुत उच्च स्केलिंग कारक था, क्योंकि कुछ डिब्बे बहुत छोटे थे।
- यह पूरी तरह से खो गया था जब बोतलें छवि में थीं, और किसी कारण से लगभग हमेशा बोतल को कैन के बजाय पाया गया (शायद क्योंकि बोतलें बड़ी थीं, इस प्रकार अधिक पिक्सेल थे, इस प्रकार अधिक वोट)
- फ़ज़ी छवियां भी अच्छी नहीं थीं, क्योंकि केंद्र के आसपास के यादृच्छिक स्थानों पर पिक्सेल में वोट समाप्त हो गए थे, इस प्रकार बहुत शोर गर्मी के नक्शे के साथ समाप्त हुआ।
- अनुवाद और रोटेशन में अंतर को प्राप्त किया गया था, लेकिन अभिविन्यास में नहीं, जिसका अर्थ है कि कैमरा उद्देश्य का सीधे सामना नहीं कर सकने वाली मान्यता प्राप्त नहीं थी।
क्या आप चार विशिष्ट मुद्दों को हल करने के लिए, विशेष रूप से OpenCV सुविधाओं का उपयोग करके, मेरे विशिष्ट एल्गोरिथ्म को बेहतर बनाने में मेरी मदद कर सकते हैं ?
मुझे उम्मीद है कि कुछ लोग इससे बाहर भी कुछ सीखेंगे, आखिरकार मुझे लगता है कि सवाल पूछने वाले लोगों को ही नहीं सीखना चाहिए। :)