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

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

विज़न टारगेट

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

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

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

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

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


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

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

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

HSV छवि

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

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

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


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

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

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

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

टारगेट

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

टारगेट

यह अगला इमेज टारगेट बहुत दिलचस्प है। यह FRC में सबसे अच्छे डिज़ाइन किए गए विज़न टारगेट में से एक है (हमारी राय में)। 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 यूनिट की दूरी और ज्ञात क्षैतिज और ऊर्ध्वाधर फील्ड ऑफ व्यू के आधार पर, हम निम्नलिखित सूत्रों का उपयोग करके व्यू प्लेन आयताकार के आकार की गणना कर सकते हैं:

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)