תיאוריה נוספת
מטרות ראייה
מתכנני משחקי ה-FRC לעתים קרובות ממקמים "מטרות ראייה" מחזירות אור בנקודות אסטרטגיות בשדה המשחק. מטרות ראייה אלו בדרך כלל עשויות מסרט מחזיר אור. לרוב, אלמנטי ניקוד עיקריים כוללים מטרות ראייה שניתן להשתמש בהן לכיוון אוטומטי. להלן ניתן לראות שתי דוגמאות למטרות ראייה ממשחקי ה-FRC של 2016 ו-2017.
למטרות ראייה מחזירות אור אלו יש תכונה שימושית מאוד: כאשר מאירים עליהן אור, הוא יוחזר ישירות למקור האור. זו הסיבה שללימלייט יש נורות LED ירוקות בהירות סביב עדשת המצלמה שלה. על ידי הגדרת חשיפת המצלמה לרמה נמוכה מאוד תוך פליטת אור ירוק בהיר לכיוון המטרה, אנו יכולים לקבל תמונה שהיא ברובה שחורה עם מטרת ראייה ירוקה בהירה. זה הופך את משימת זיהוי המטרה לקלה יחסית.
כאן ניתן לראות דוגמה לתמונה אידיאלית. שימו לב כיצד כמעט כל הפרטים בתמונה נעלמים בגלל הגדרת החשיפה הנמוכה, אך הסרט מחזיר האור בולט בבהירות.
סיפיות (Thresholding)
סיפיות היא המרכיב הקריטי הבא ברוב אלגוריתמי מעקב הראייה של FRC. זוהי הפעולה של לקיחת תמונה וזריקת כל הפיקסלים שאינם בטווח צבעים מסוים. התוצאה של סיפיות היא בדרך כלל תמונה חד-ממדית שבה פיקסל הוא או "דלוק" או "כבוי". סיפיות עובדת היטב על תמונות שנלכדו באמצעות האסטרטגיה שתוארה לעיל (חשיפה נמוכה, תמונה כהה מאוד עם מטרת ראייה מוארת בבהירות).
לימלייט מבצעת סיפיות במרחב הצבעים HSV (גוון-רוויה-ערך). ייתכן שאתם רגילים לחשוב על צבעים במרחב הצבעים RGB (אדום-ירוק-כחול). HSV היא רק דרך נוספת לייצג צבע, בדומה לאופן שבו ניתן להשתמש בקואורדינטות קרטזיות או קוטביות לתיאור מיקומים. הסיבה שאנו משתמשים במרחב הצבעים HSV היא שניתן להשתמש בגוון כדי לבחור בצורה מדויקת מאוד את הצבע הירוק שנורות ה-LED ש ל לימלייט פולטות.
חשוב מאוד לכוונן את הגדרות הסיפיות שלכם כדי לסלק כמה שיותר מהתמונה. תקבלו את התוצאות הטובות ביותר אם תמטבו כל שלב בצינור הראייה שלכם לפני שתעברו לשלב הבא. התמונה הבאה מציגה את ההבדל בין סיפיות לא נכונה לסיפיות נכונה:
לפעמים דברים כמו תאורת תקרה או חלונות בזירה יכולים להיות קשים להסרה מהתמונה באמצעות סיפיות, מה שמביא אותנו לשלב הבא.
סינון קונטורים
לאחר הסיפיות, צינור הראייה של לימלייט מייצר סט של קונטורים עבור התמונה. קונטור הוא עקומה המקיפה קבוצה רציפה של פיקסלים. לפעמים דברים כמו תאורת תקרה, לוחות תוצאות בזירה, חלונות ודברים אחרים יכולים לעבור את שלב הסיפיות. כאן סינון הקונטורים הופך לשימושי. המטרה היא לסלק כל קונטור שאנחנו יודעים שאינו המטרה שאנו מעוניינים בה.
מסנן הקונטורים הראשון והקל ביותר הוא להתעלם מכל הקונטורים שהם קטנים יותר ממה שמטרת הראייה שלנו נראית ממרחק הניקוד שלנו. כל דבר קטן יותר מגודל זה הוא כנראה משהו רחוק יותר ויש להתעלם ממנו. זה נקרא סינון שטח.
למטרות הראייה של FRC יש לעתים קרובות תכונה גיאומטרית שניתן לנצל כדי לעזור לנו לסנן קונטורים. לדוגמה, אם למטרת הראייה יש יחס רוחב-גובה רחב, אנחנו יכולים לסנן כל קונטור שאינו רחב:
עם זאת, זכרו שהמצלמה שלכם עשויה להסתכל על המטרה מזווית מוזרה. זה יכול להשפיע באופן דרסטי על יחס הרוחב-גובה של הקונטור שלה. הקפידו לבדוק את ההגדרות שלכם ממגוון זוויות כדי להבטיח שאינכם מסננים בצורה אגרסיבית מדי ומתעלמים ממטרת הראייה!
מטרת התמונה הבאה מעניינת מאוד. זו אחת ממטרות הראייה המתוכננות הטוב ביותר ב-FRC (לדעתנו). לימלייט מחשבת אוטומטית ערך הנקרא מלאות של קונטור. מלאות היא היחס בין שטח הפיקסלים של הקונטור לשטח הקמור שלו. לצורה מסוימת זו יש מלאות נמוכה מאוד וכמעט אף פעם לא רואים תאורת תקרה, חלונות וכו' עם מלאות כה נמוכה. לכן ניתן לסנן ביעילות רבה את הקונטורים הלא רצויים אם מטרת הראייה שלכם נראית כמו זו.
ללימלייט יש אפשרויות רבות לסינון קונטורים. ניתן להשתמש באפשרויות אלה יחד עם מה שאתם יודעים על התכונות הגיאומטריות של מטרת הראייה המסוימת שאתם מנסים לעקוב אחריה.
כרגע, אם מספר קונטורים עוברים את אפשרויות הסינון שלכם, נבחר הקונטור הגדול ביותר. בנוסף, הצינור מעדיף "להינעל" על קונטורים באמצעות היסטרזיס. זוהי תכונה שעוזרת למנוע הבהוב בין מטרות דומות.
מפיקסלים לזוויות
התוצאה הסופית של צינור הראייה היא מיקום פיקסל של הקונטור הטוב ביותר בתמונה. ברוב המשחקים, אנחנו יכולים פשוט לכוון למרכז הקונטור. לפעמים שימושי גם לכוון למרכז העליון או לנקודה אחרת, אבל בעיקרון יש לנו קואורדינטת פיקסל לאן שאנחנו רוצים לכוון. כדי לחשב את הזוויות למטרה זו, עלינו להשתמש בקצת טריגונומטריה.
ראשית אנו מניחים שיש לנו מצלמת "חור סיכה" מושלמת. בפועל זה יכול להיות רחוק מהאמת, אבל המצלמה של לימלייט קרובה מאוד לכך. (עדשת עין הדג תהיה רחוקה מאוד מאידיאל זה כדוגמה נגדית.)
למצלמת לימלייט יש שדה ראייה אופקי של 54 מעלות ושדה ראייה אנכי של 41 מעלות. היא לוכדת תמונות ברזולוציה של 320x240. אנו מניחים שמרכז התמונה הוא הציר האופטי של המצלמה (כך שזוויות ה-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 = vph/2 * ny;
זכ