בס"ד זיהוי לוח שחמט נתן מייזלס ושי קרני ראם מבוא שחמט הוא ענף ספורט ומשחק לוח אסטרטגי המיועד לשני שחקנים .זהו אחד מהמשחקים השכיחים והמורכבים ביותר הקיימים בתרבות האנושית; ההערכות למספר המצבים החוקיים בשחמט נעות בין 01^34ל .01^34 מסמך זה מתאר אפליקציית אנדרואיד שמזהה לוח שחמט ,את הכלים השונים ואת מיקומם על הלוח .ניתן להגיד שהאפליקציה ממירה תמונה של לוח שחמט לייצוג הדיגיטלי שלו. ממשק ממשק האפליקציה הינו פשוט ואינטואיטיבי .מהמסך הראשי של האפליקציה מצלמים תמונה של לוח השחמט ומקבלים תוך זמן קצר חזרה תמונה של הלוח – שהוא מיושר ועם זיהוי הכלים ומיקומם. תמונה – מסך ראשי. צילום לוח של האפליקציה התמונה המוחזרת מהאפליקציה. מימוש בהתחלה אנו מקבלים תמונה של הלוח מהאפליקציה .באמצעות קוד c++אנו עושים את הפעולות הבאות: .1יישור התמונה רעיון כללי: ע"מ ליישר את התמונה מטרתנו למצוא את ארבעת הפינות של לוח שחמט ,וכך נוכל ליישר את התמונה של הלוח באמצעות הומוגרפיה. שלבים: א .הרצת canny edge detectorעל התמונה .אנו משנים את התמונה לגוונים של אפור ומריצים את האלגוריתם של ה. canny edge detectorזהו אלגוריתם לזיהוי קצוות בתמונה .על תמונה זו יותר נוח לעבוד בשלבים הבאים. תמונת מקור תמונה אחרי הרצת canny edge detector ב .אנו מריצים אלגוריתם .Hough Lines Transformאלגוריתם זה מוצא קווים ישרים בתמונה. ג .אנו ממזגים קווים קרובים – .לפעמים האלגוריתם מוצא כמה קווים קרובים מדי – שאנו יודעים שהם לא יכולים להיות כל כך קרובים בגלל מבנה לוח השחמט .ולכן נמזג את הקווים הקרובים. ד .ממיינים את הקווים לקווים אופקיים ואנכיים. תמונה של הקווים האופקיים והאנכיים ה .ע"פ כמות הקווים שמצאנו ,עושים יוריסטיקה פשוטה ע"מ לבחור את הקווים החיצוניים הנכונים. אם יש 9קווים אופקיים /אנכיים נבחר את הראשון ואת האחרון .אם יש 00קווים אופקיים /אנכיים נבחר את הקו השני והאחד לפני אחרון. ההיגיון הוא שלפעמים אנו מזהים הלוח החיצוני ולפעמים לא. תמונה לדוגמא של בחירת הקווים של לוח השחמט ישנם גם עוד יוריסטיקות ליתר מצבי הקצה. הקווים שבחרנו הם קווי המסגרת של לוח השחמט. ו .מוצאים את נקודות החיתוך של קווי המסגרת של לוח השחמט – אלו ארבעת הפינות של הלוח. ז .מיישרים את הלוח ע"פ ארבעת הפינות. תמונה מיושרת .2זיהוי כלים: מאגר :templates יצרנו מאגר של 43תמונות הכוללות את כל התמונות של הכלים (השחורים והלבנים) ואת התמונות של כל הכלים מסובבות ב 081-מעלות .את התמונות "גזרנו" במחשב מתמונת המקור של הכלים שממנה הדפסנו את הכלים בסופו של דבר. חיתוך הלוח למשבצות: כשלב מקדים לזיהוי הכלים על הלוח ,חילקנו את התמונה של הלוח (לאחר ביצוע הומוגרפיה ,וחיתוך המסגרת של הלוח) ל 43-תמונות קטנות ,כאשר כל אחת מהם מייצגת משבצת בלוח. תמונה של חלוקת הלוח לקוביות הסבר על אלגוריתם הזיהוי: האלגוריתם בו השתמשנו לשם זיהוי הכלים הוא .template matching הרעיון הכללי העומד מאחורי האלגוריתם הזה הוא למצוא תמונה קטנה ( )templateבתוך תמונת מקור גדולה יותר. דרך הפעולה של האלגוריתם הוא זה" :החלקת" תמונת ה template-על תמונת המקור ,כלומר :השוואת תמונת ה template-על כל אזור בתמונת המקור (ע"י הזזה בפיקסל אחד כל פעם) ובכל אזור מחושב ערך שמייצג את טיב הזיהוי שמחושב בעזרת המטריצה ( ,)a.ובעצם חוזרת מטריצה שמייצגת את טיב הזיהוי בכל נקודה. a. method=CV_TM_CCOEFF_NORMED כעת כל שנותר כדי למצוא את הנקודה עם הזיהוי הטוב ביותר זה למצוא את הנקודה במטריצה עם הערך המקסימלי ,כאשר ישנו thresholdשניתן דרכו לדעת גם את רמת הזיהוי. זיהוי הכלים עצמו מתבצע על כל אחת מהתמונות הקטנות בנפרד ,כלומר :על כל משבצת בלוח בפני עצמה. דרך הפעולה של האלגוריתם שלנו הוא :ראשית אנו הופכים את התמונות לגוונים של אפור על מנת לשפר את זיהוי הכלים ולהנמיך את השפעת הסביבה (כגון תאורה על הזיהוי) .על כל משבצת אנו מריצים את ה- template matchingשל כל אחד מהכלים ( ,)templatesעם ערך thresholdנמוך יחסית .לאחר שסיימנו ,אנו בודקים אם יש יותר מזיהוי יחיד. עבור יותר מזיהוי יחיד :אנו מעלים את ה threshold-ומריצים שוב את כל ה templates-על המשבצת עד לקבלת מקסימום זיהוי יחיד. עבור זיהוי יחיד :אנו מחזירים ערך המייצג את הכלי הספציפי שזוהה ומסמנים על התמונה את הכלי שזוהה או במקרה שלא זוהה אף כלי-ערך המסמן שלא נמצא שום זיהוי. לבסוף ,על פי המיפוי בין הערך שמייצג כל כלי אנו מחליפים את הערכים שהחזרנו לכל משבצת בשמות הכלים עצמם ומציגים אותם על המשבצת. תוצאות (מקור ותוצאה) תוצאה רעה ההמוגרפיה לא תעבוד ולכן זיהוי.כפי שניתן לראות כאשר אנו בזווית חדה אנו לא מזהים את קווי לוח השחמט .הכלים והלוח לא יעבדו ביבליוגרפיה /http://docs.opencv.org באינטרנטopencv תיעוד פרוייקט שחמט http://www.nandanbanerjee.com/index.php?option=com_content&view=article&id=71:buttercupchess-robot&catid=78&Itemid=470 http://codebazaar.blogspot.co.il/2011/08/chess-board-recognition-project-part-1.html פרוייקט שחמט נספחים ניסיונות ליישר תמונה .0בהתחלה ניסינו להשתמש באלגוריתם המובנה של opencvלקליברציה ,המזהה לוח שחמט. מסתבר כי הפונקציה מזהה לוח בגודל 4X4או 9X9וכו' כך שהיא לא התאימה לצרכים שלנו .כמו כן ברגע שהנחנו כלים על הלוח ,הפונקציה הפסיקה לעבוד כנראה בגלל שהיא מזהה משבצות שחורות ולבנות ,וכך מכיילת את המצלמה. .4ניסינו להשתמש באלגוריתם .Shi–Tomasiאלגוריתם זה מזהה פינות .חשבנו שנוכל לקחת את הפינות הכי קיצוניות ועל פיהם לזהות את פינות הלוח הגדרנו שיהיו רק מקסימום 011פינות על מנת להימנע מתוצאות מזבלות. בפועל האלגוריתם לא היה שימושי .האלגוריתם מצא פינות גם על הכלים ,כך שהושפענו ישירות מכמות הכלים שהיו על הלוח ולא יכולנו להשתמש באלגוריתם.
© Copyright 2024