نظرية إضافية
أهداف الرؤية
غالبًا ما يضع مصممو لعبة FRC "أهداف رؤية" عاكسة على الملعب في مواقع استراتيجية. عادة ما تُصنع أهداف الرؤية هذه من شريط عاكس للضوء. تحتوي عناصر التسجيل الرئيسية عمومًا على أهداف رؤية يمكن استخدامها للتصويب التلقائي. يمكنك رؤية مثالين لبعض أهداف الرؤية من ألعاب FRC لعامي 2016 و2017 أدناه.
تتمتع أهداف الرؤية العاكسة هذه بخاصية مفيدة جدًا: عند تسليط الضوء عليها، سينعكس الضوء مباشرة إلى مصدر الضوء. هذا هو السبب في أن Limelight لديها مصابيح LED خضراء ساطعة تحيط بعدسة الكاميرا. من خلال ضبط تعريض الكاميرا ع لى مستوى منخفض جدًا أثناء إصدار ضوء أخضر ساطع نحو الهدف، يمكننا الحصول على صورة معظمها أسود مع هدف رؤية أخضر ساطع. هذا يجعل مهمة الحصول على الهدف سهلة نسبيًا.
هنا يمكنك رؤية مثال للصورة المثالية. لاحظ كيف اختفت تقريبًا جميع التفاصيل في الصورة بسبب إعداد التعريض المنخفض ولكن الشريط العاكس يبرز بشكل ساطع.
العتبة
العتبة هي المكون الحاسم التالي في معظم خوارزميات تتبع الرؤية في FRC. إنها عملية أخذ صورة، والتخلص من أي بكسل ليس في نطاق لون محدد. نتيجة العتبة هي عمومًا صورة أحادية البعد حيث يكون البكسل إما "مفعل" أو "معطل". تعمل العتبة بشكل جيد جدًا على الصور التي يتم التقاطها باستخدام الاستراتيجية المذكورة أعلاه (تعريض منخفض، صورة مظلمة جدًا مع هدف رؤية مضاء بشكل ساطع).
يقوم Limelight بالعتبة في فضاء الألوان HSV (تدرج اللون-التشبع-القيمة). قد تكون معتادًا على التفكير في الألوان في فضاء الألوان RGB (أحمر-أخضر-أزرق). HSV هو مجرد طريقة أخرى لتمثيل اللون مشابهة للطريقة التي يمكن بها استخدام الإحداثيات الديكارتية أو القطبية لوصف المواقع. السبب في استخدامنا لفضاء الألوان HSV هو أن تدرج اللون يمكن استخدامه لاختيار اللون الأخضر الذي تنتجه مصابيح LED الخاصة بـ Limelight بدقة عالية.
من الضروري ضبط إعدادات العتبة الخاصة بك لإزالة أكبر قدر ممكن من الصورة. ستحصل على أفضل النتائج إذا قمت بتحسين كل مرحلة من مراحل خط أنابيب الرؤية الخاص بك قبل الانتقال إلى المرحلة التالية. توضح الصورة التالية الفرق بين العتبة غير الصحيحة والعتبة الصحيحة:
في بعض الأحيان، قد يكون من الصعب إزالة أشياء مثل أضواء السقف أو النوافذ في الساحة من الصورة باستخدام العتبة، مما يقودنا إلى المرحلة التالية.
تصفية الكفاف
بعد العتبة، ينشئ خط أنابيب الرؤية الخاص بـ Limelight مجموعة من الكفافات للصورة. الكفاف هو منحنى يحيط بمجموعة متصلة من البكسلات. في بعض الأحيان، يمكن لأشياء مثل أضواء السقف ولوحات النتائج في الساحة والنوافذ وأشياء أخرى أن تتجاوز خطوة العتبة. هنا يصبح تصفية الكفاف مفيدًا. الهدف هو إزالة أي كفافات نعرف أنها ليست الهدف الذي نهتم به.
أول وأسهل مرشح للكفاف هو تجاهل أي كفافات أصغر مما يبدو عليه هدف الرؤية الخاص بنا من مسافة التسجيل. أي شيء أصغر من ذلك الحجم هو بوضوح شيء أبعد ويجب تجاهله. هذا ما يسمى بتصفية المساحة.
غالبًا ما تحتوي أهداف رؤية FRC على بعض الخصائص الهندسية التي يمكن استغلالها لمساعدتنا في تصفية الكفافات. على سبيل المثال، إذا كان لهدف الرؤية نسبة عرض واسعة، يمكننا تصفية أي كفافات ليست عريضة:
ومع ذلك، ضع في اعتبارك أن الكاميرا الخاصة بك قد تنظر إلى الهدف من زاوية غريبة. يمكن أن يؤثر هذا بشكل كبير على نسبة أبعاد كفافه. تأكد من اختبار إعداداتك من مجموعة متنوعة من الزوايا للتأكد من أنك لا تقوم بالتصفية بشكل مفرط وتنتهي بتجاهل هدف الرؤية!
هذا الهدف التالي مثير للاهتمام للغاية. إنه أحد أفضل أهداف الرؤية المصممة في FRC (في رأينا). يقوم Limelight تلقائيًا بحساب قيمة تسمى الامتلاء للكفاف. الامتلاء هو النسبة بين المساحة البكسلية للكفاف إلى مساحته المحدبة. هذا الشكل المعين له امتلاء منخفض جدًا ونادرًا ما ترى أي أضواء سقف أو نوافذ وما إلى ذلك بمثل هذا الامتلاء المنخفض. لذلك يمكنك تصفية الكفافات غير المرغوب فيها بشكل فعال إذا كان هدف الرؤية الخاص بك يشبه هذا.
لدى Limelight العديد من الخيارات لتصفية الكفافات. يمكنك استخدام هذه الخيارات جنبًا إلى جنب مع ما تعرفه عن الخصائص الهندسية لهدف الرؤية المعين الذي تحاول تتبعه.
حاليًا، إذا مرت كفافات متعددة عبر خيارات التصفية الخاصة بك، يتم اختيار الكفاف الأكبر. بالإضافة إلى ذلك، يفضل خط الأنابيب "قفل" الكفافات باستخدام التباطؤ. هذه ميزة تساعد على منع الوميض بين الأهداف المتشابهة.
من البكسلات إلى الزوايا
النتيجة النهائية لخط أنابيب الرؤية هي موقع البكسل للكفاف الأفضل في الصورة. بالنسبة لمعظم الألعاب، يمكننا فقط التصويب على مركز الكفاف. في بعض الأحيان يكون من المفيد أيضًا التصويب على المركز العلوي أو نقطة أخرى ولكن في الأساس لدينا إحداثية بكسل للمكان الذي نريد التصويب إليه. من أجل حساب الزوايا لهذا الهدف، نحتاج إلى استخدام القليل من علم المثلثات.
أولاً نفترض أن لدينا كاميرا "ثقب الدبوس" مثالية. في الواقع، قد يكون هذا بعيدًا عن الحقيقة ولكن كاميرا limelight قريبة جدًا. (عدسة عين السمكة ستكون بعيدة عن هذا المثال المثالي كمثال مضاد.)
تتمتع كاميرا limelight بمجال رؤية أفقي يبلغ 54 درجة ومجال رؤية عمودي يبلغ 41 درجة. تلتقط الصور بدقة 320×240. نفترض أن مركز الصورة هو المحور البصري للكاميرا (لذا فإن زوايا x و y لهذا الموقع هي 0،0). بالنظر إلى هذه القيم المعروفة، يمكننا استخدام القليل من علم المثلثات لحساب الزوايا لأي بكسل في الصورة.
يوضح الرسم البياني أدناه نقطة هدف مثال نريد حساب الزوايا لها. تبدأ إحداثيات البكسل من الزاوية العلوية اليسرى للصورة وتكون موجبة إلى اليمين وللأسفل.
ستكون خطوتنا الأولى هي التحويل من إحداثيات البكسل إلى إحداثيات ثنائية الأبعاد مُطبَّعة حيث 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