אלגוריתמים של ראייה ממוחשבת תפסו תאוצה בשנים האחרונות בעקבות התפתחות מערכות חישוב מתקדמות. קיימות היום שיטות רבות ומגוונות שמטרתן לאפשר למחשב להבין התרחשות או פעולה המוצגות בתמונה. בפוסט זה נדון באחת מאבני הבניין של הראייה הממוחשבת: כיצד ניתן למצוא גבולות של עצמים בתוך תמונה, כבסיס לפענוחם וסיווגם. על יכולת זו מתבססות, למשל, שיטות המאפשרות נהיגה אוטונומית והתמצאות במרחב על ידי מערכת ממוחשבת.
בשנת 1975, מהנדס חשמל אמריקאי בשם סטיבן ששון המציא את המצלמה הדיגיטלית הראשונה בזמן שעבד בחברת איסטמן קודאק [1]. היא שקלה בערך 3.5 ק"ג וצילמה ברזולוציה נמוכה מאוד. היום אנו יכולים ליצור ולשמור תמונות ברזולוציה גבוהה, ולשמור אותן בזכרונות קטנים והולכים. התקדמנו מאכסון של 30 תמונות על קלטת דיגיטלית שלמה לאכסון אלפי תמונות על כרטיס זכרון בגודל ציפורן אנושית. בצמוד לשיפור יכולות הצילום והגדלת האכסון, התפתחו יכולות העיבוד הממוחשב של התמונות והיכולת של מחשבים ״להבין״ מה יש בהן, בקצב מסחרר. לא רק שאנו מסוגלים לייצר תמונות דיגיטליות צבעוניות ברזולוציה גבוהה, אלא גם יש בידינו תוכנות המסוגלות לנתח אותן בעזרת אלגוריתמים מתקדמים. כיום, מחשב למעשה מסוגל להבין סצנות מורכבות ולזהות מספר רב של עצמים בתוכן.
מהי למעשה תמונה ממוחשבת? בפוסט קודם בנושא [2] הסברנו כי תמונה ממוחשבת בנויה מטבלאות של מספרים השמורות בזכרון, כאשר כל מספר מייצג פיקסל (ריבוע קטן) בתמונה, כאשר הערכים המספריים מתארים את עוצמת האור בכל פיקסל (וכאשר מדובר בתמונות צבע, יש לנו למעשה כמה טבלאות כאלו, אחת לכל ״ערוץ״). הקובץ שיש לכם במחשב או בטלפון, הוא אותה רשימה של מספרים. כשפותחים תמונה, המכשיר יודע לתרגם את המספרים לצבעים שונים ועוצמות שונות על המסך.
אחד הצעדים הראשונים להבנת תמונה, הוא לאתר בתוכה עצמים. קודם כל מנסים ״לגדר״ כל עצם, או יותר נכון, למצוא את הגבול בין הפיקסלים ששייכים לעצם אחד לבין פיקסלים שלא שייכים לו. מה הופך משהו לשפה? למשל, שינוי חד בצבע , או כמות האור (תארו לכם תמונה שלכם עומדים ליד קיר לבן, או שמיים כחולים). שפה יכולה להיווצר לאו דוקא בגלל שהעצם ״נגמר״. למשל, שינוי צבע יכול להגרם על ידי שינוי מקומי בתאורה (כמו אלומת אור או סינוור נקודתי), שינוי מרקמים, וכדומה [3]. ומאחר ובסופו של דבר מה שהמחשב באמת קורא אלה המספרים בקובץ, על כל תוכנה לזיהוי גבולות מוטלת המשימה לבצע פעולות מתמטיות כידי למצוא את הגבולות (או שפות) בין העצמים השונים, בתוך אותה רשימת מספרים.
אם נתייחס אל התמונה כהתפלגות מספרים במרחב דו ממדי אז השפה מתארת אזור בתמונה בו קיימים שינויים חדים (שינוי גדול בערך המספרי בין פיקסל לשכנו). האלגוריתם הקלאסי המשמעותי ביותר למציאת שפות נקרא Canny, והוא משלב מספר שיטות [4]: ראשית, טשטוש התמונה במטרה להדגיש את השפות החזקות שבו: בשלב זה, נפטר מכל מיני ״גבולות״ שנוצרים בגלל שינויים קטנים מאוד, ונישאר רק עם ההבדלים הגדולים, שכנראה אכן מתרחשים בגלל שאנחנו עוברים מעצם לעצם. לאחר מכן מחשבים את הגרדיאנט (קצב השינוי בצבע או בתאורה) בכל אזור ואזור בתמונה. השלב הבא הוא מציאת ״השפה האמיתית״ בכל אזור הנקראת non max suppression - זאת אומרת דיכוי של שפות לא אמיתיות. השפה עצמה עלולה להיות מורכבת ממספר רב של פיקסלים, ואלו המתאפיינים בשינויים החזקים ביותר הם אלה שמייצגים את בצורה הטובה ביותר את מיקום השפה. לעומתם, שינויים אחרים, נמוכים יותר, מייצגים רעש או שפות חלשות יותר (כמו למשל שיער של אדם, כל קווצת שיער מתאפיינת בהפרשי צבע חזקים בקצוותיה בינה לבין קווצת שיער אחרת, אך רק אלו הקיצוניים ביותר מהווים הפרש בין צבע השיער לבין רקע התמונה ולכן הם אלה שייצגו את השפה החיצונית של הדמות).
כיום Canny הינו אחד מאלגוריתמי מציאת השפות השימושיים ביותר, ועל אף שקיימות שיטות עדכניות המשתמשות בלמידה עמוקה [5], מדובר באחד האלגוריתמים הנפוצים ביותר לפתרון משימה זו.
מציאת השפות של עצמים שונים בתמונה מהווים בסיס להבנה מתמטית עמוקה של המשמעות של התמונה וההתרחשות בה, אך שפות לבדן אינן מספיקות כדי לאפיין סצנות והתרחשויות מורכבות בתמונה. לשם כך נדרש להשתמש בשיטות מתקדמות המאפשרות חילוץ פרמטרים מורכבים יותר.. איתור ואפיון מתמטי של עצמים בתמונה מאפשר ביצוע פעולות כמו השוואה בין תמונות, הבנת המרחב של התמונה (כמו למשל כאשר מצלמים תמונת פנורמה), ויצירת מודל תלת ממדי של הסצנה המצולמת.
הערות, קישורים וקריאה נוספת:
[1] על המצאת המצלמה הדיגיטלית הראשונה
[2] תמונה דיגיטלית בעולם אנלוגי, מתוך מדע גדול בקטנה
[3] העולם הוא המסך הירוק שלך, מתוך מדע גדול בקטנה
[4] על התפתחות אלגוריתמי זיהוי שפות
[5] למידה עמוקה, מתוך מדע גדול בקטנה