मुख्य कंटेंट तक स्किप करें

अतिरिक्त सिद्धांत

विज़न टारगेट

FRC गेम डिज़ाइनर अक्सर फील्ड पर रणनीतिक स्थानों पर रिफ्लेक्टिव "विज़न टारगेट" लगाते हैं। ये विज़न टारगेट आमतौर पर रेट्रो-रिफ्लेक्टिव टेप से बने होते हैं। प्रमुख स्कोरिंग एलिमेंट्स में आमतौर पर विज़न टारगेट होते हैं जिनका उपयोग स्वचालित रूप से निशाना लगाने के लिए किया जा सकता है। नीचे आप 2016 और 2017 FRC गेम्स के कुछ विज़न टारगेट के दो उदाहरण देख सकते हैं।

विज़न टारगेट उदाहरण

इन रेट्रो-रिफ्लेक्टिव विज़न टारगेट में एक बहुत उपयोगी गुण होता है: जब उन पर प्रकाश डाला जाता है, तो यह सीधे प्रकाश स्रोत की ओर वापस परावर्तित होता है। यही कारण है कि Limelight के कैमरा लेंस के चारों ओर चमकीले हरे LED होते हैं। कैमरा एक्सपोज़र को बहुत कम सेट करके और टारगेट की ओर एक चमकीली हरी रोशनी उत्सर्जित करके, हम एक ऐसी इमेज प्राप्त कर सकते हैं जो ज्यादातर काली होती है और एक चमकीले हरे विज़न टारगेट के साथ। इससे टारगेट को प्राप्त करने का काम अपेक्षाकृत आसान हो जाता है।

यहाँ आप आदर्श इमेज का एक उदाहरण देख सकते हैं। ध्यान दें कि कम एक्सपोज़र सेटिंग के कारण इमेज में लगभग सभी विवरण गायब हो गए हैं लेकिन रेट्रो-रिफ्लेक्टिव टेप चमकीले ढंग से दिखाई देती है।

विज़न टारगेट उदाहरण 2


थ्रेशोल्डिंग

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

Limelight HSV (Hue-Saturation-Value) कलरस्पेस में थ्रेशोल्डिंग करता है। आप RGB (Red-Green-Blue) कलरस्पेस में रंगों के बारे में सोचने के आदी हो सकते हैं। HSV रंग को दर्शाने का एक और तरीका है, जैसे कार्टेशियन कोऑर्डिनेट्स या पोलर कोऑर्डिनेट्स का उपयोग पोज़िशन का वर्णन करने के लिए किया जा सकता है। हम HSV कलरस्पेस का उपयोग इसलिए करते हैं क्योंकि Hue का उपयोग Limelight के LED द्वारा उत्सर्जित हरे रंग को बहुत सटीक रूप से चुनने के लिए किया जा सकता है।

HSV इमेज

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

थ्रेशोल्डिंग उदाहरण

कभी-कभी एरीना में सीलिंग लाइट्स या खिड़कियों जैसी चीज़ों को थ्रेशोल्डिंग का उपयोग करके इमेज से हटाना मुश्किल हो सकता है, जो हमें अगले चरण पर ले जाता है।


कंटूर फ़िल्टरिंग

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

पहला और सबसे आसान कंटूर फ़िल्टर किसी भी ऐसे कंटूर को अनदेखा करना है जो हमारी स्कोरिंग दूरी से हमारे विज़न टारगेट से छोटा दिखता है। उस आकार से छोटी कोई भी चीज़ स्पष्ट रूप से कुछ दूर है और उसे अनदेखा किया जाना चाहिए। इसे एरिया फ़िल्टरिंग कहा जाता है।

FRC विज़न टारगेट में अक्सर कुछ ज्यामितीय गुण होते हैं जिनका उपयोग कंटूर को फ़िल्टर करने में मदद के लिए किया जा सकता है। उदाहरण के लिए, यदि विज़न टारगेट का चौड़ा आस्पेक्ट रेशियो है, तो हम किसी भी ऐसे कंटूर को फ़िल्टर कर सकते हैं जो चौड़ा नहीं है:

टारगेट

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

टारगेट

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

टारगेट

Limelight में कंटूर फ़िल्टर करने के लिए कई विकल्प हैं। आप इन विकल्पों का उपयोग उस विशेष विज़न टारगेट के ज्यामिति गुणों के बारे में जो आप जानते हैं उसके साथ कर सकते हैं जिसे आप ट्रैक करने की कोशिश कर रहे हैं।

वर्तमान में, यदि कई कंटूर आपके फ़िल्टरिंग विकल्पों से गुज़रते हैं, तो सबसे बड़ा कंटूर चुना जाता है। इसके अलावा, पाइपलाइन हिस्टेरेसिस का उपयोग करके कंटूर पर "लॉक" करना पसंद करती है। यह एक फीचर है जो समान टारगेट के बीच फ्लिकरिंग को रोकने में मदद करता है।

पिक्सेल से एंगल तक

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

पहले हम मानते हैं कि हमारे पास एक परफेक्ट "पिनहोल" कैमरा है। व्यवहार में यह सच्चाई से बहुत दूर हो सकता है लेकिन limelight का कैमरा बहुत करीब है। (एक फिशआई लेंस इस आदर्श से बहुत दूर होगा एक प्रति-उदाहरण के रूप में।)

Limelight कैमरे का हॉरिज़ॉन्टल फील्ड ऑफ व्यू 54 डिग्री और वर्टिकल फील्ड ऑफ व्यू 41 डिग्री है। यह 320x240 रेज़ोल्यूशन पर इमेज कैप्चर करता है। हम मानते हैं कि इमेज का केंद्र कैमरे की ऑप्टिकल एक्सिस है (इसलिए उस लोकेशन के लिए x और y एंगल 0,0 हैं)। इन ज्ञात मानों को देखते हुए, हम इमेज में किसी भी पिक्सेल के लिए एंगल की गणना करने के लिए थोड़ी त्रिकोणमिति का उपयोग कर सकते हैं।

नीचे दिया गया डायग्राम एक उदाहरण टारगेट पॉइंट दिखाता है जिसके लिए हम एंगल की गणना करना चाहते हैं। पिक्सेल कोऑर्डिनेट्स इमेज के ऊपरी बाएं कोने से शुरू होते हैं और दाईं ओर और नीचे पॉज़िटिव होते हैं।

पिक्सेल से एंगल

हमारा पहला कदम पिक्सेल कोऑर्डिनेट्स से नॉर्मलाइज़्ड 2D कोऑर्डिनेट्स में कन्वर्ट करना होगा जहां 0,0 इमेज का केंद्र है और 1.0:

(px, py) = पिक्सेल कोऑर्डिनेट्स, 0,0 ऊपरी-बाएं है, नीचे और दाईं ओर पॉज़िटिव

(nx, ny) = नॉर्मलाइज़्ड पिक्सेल कोऑर्डिनेट्स, 0,0 केंद्र है, दाईं ओर और ऊपर पॉज़िटिव

nx = (1/160) * (px - 159.5)

ny = (1/120) * (119.5 - py)

इसके बाद हम एक काल्पनिक व्यू प्लेन परिभाषित करते हैं और इसके आकार की गणना करते हैं। सरलता के लिए, हम इस प्लेन को कैमरा लोकेशन के सामने 1.0 यूनिट पर रखना चुन सकते हैं। यहाँ कैमरे पर ऊपर से देखने का एक दृश्य है। हमारा लक्ष्य व्यू प्लेन की चौड़ाई और ऊंचाई की गणना करना है क्योंकि उन मानों का उपयोग बाद में एंगल की गणना करने के लिए किया जाएगा:

पिक्सेल से एंगल नॉर्मलाइज़्ड कोऑर्ड्स

1.0 यूनिट की दूरी और ज्ञात हॉरिज़ॉन्टल और वर्टिकल fov को देखते हुए, हम निम्नलिखित फॉर्मूलों का उपयोग करके व्यू प्लेन रेक्टेंगल के आकार की गणना कर सकते हैं:

vpw = 2.0*tan(horizontal_fov/2)

vph = 2.0*tan(vertical_fov/2)

इन दो मानों का उपयोग करके, हम अब एक साधारण गुणा का उपयोग करके नॉर्मलाइज़्ड पिक्सेल कोऑर्डिनेट्स और व्यू प्लेन कोऑर्डिनेट्स के बीच कन्वर्ट कर सकते हैं।

x = vpw/2 * nx;

y = vph/2 * ny;

याद रखें कि हमने अपने व्यू प्लेन को 1.0 की दूरी पर रखना चुना था। अब हमारे पास टारगेट पॉइंट के एंगल की गणना करने के लिए आवश्यक सब कुछ है।

पिक्सेल से एंगल कैलकुलेशन

tan(ax) = x / 1

tan(ay) = y / 1

ax = atan2(x, 1)

ay = atan2(y, 1)