תוכן עניינים:

ספירת אובייקט פטל פי: 5 שלבים
ספירת אובייקט פטל פי: 5 שלבים

וִידֵאוֹ: ספירת אובייקט פטל פי: 5 שלבים

וִידֵאוֹ: ספירת אובייקט פטל פי: 5 שלבים
וִידֵאוֹ: ממכר SCP-261 פאן-ממדי וניסוי התחבר 261 מודעות + שלם De + 2024, יולי
Anonim
ספירת אובייקטים של פטל פי
ספירת אובייקטים של פטל פי

ראיית מחשב, ללא ספק, היא דבר פנטסטי! באמצעות זה, מחשב צובר את היכולת "לראות" ולחוש טוב יותר את הסביבה שמסביב, מה שמאפשר פיתוח יישומים מורכבים, שימושיים ומגניבים. יישומים כגון זיהוי וזיהוי פנים, מעקב אחר אובייקטים וזיהוי עצמים נוכחים יותר ויותר בפעילויות היום-יומיות שלנו, הודות להתקדמות ראיית המחשב.

בהתחשב עד כמה מסגרות וכלים לראיית מחשבים מתקדמים ונגישים, היישום המתואר במאמר זה מתאים היטב: שימוש ב- Raspberry PI פשוט ובמסגרת ראיית מחשב ללא עלות וקוד פתוח הנקראת OpenCV לספירת אובייקטים בתנועה, ליתר דיוק כמה אובייקטים נכנסים ויוצאים מאזור פיקוח מסוים.

שלב 1: להתעמק: כיצד ניתן לזהות תנועת אובייקטים בזרם תמונות?

הולכים ומתעמקים: כיצד ניתן לזהות תנועת אובייקטים בזרם תמונות?
הולכים ומתעמקים: כיצד ניתן לזהות תנועת אובייקטים בזרם תמונות?

עכשיו הגיע הזמן להעמיק בענייני עיבוד תמונה:

איך להשיג כמה תמונות זרם מצלמות אינטרנט ולזהות שמשהו זז לשם

הוא מורכב מחמישה שלבים:

שלב 1: להדגיש את האובייקט בתנועה

כפי שהוגדר בפיסיקה הקלאסית, יש צורך בהתייחסות למראה שמשהו זז או שהוא עומד במקום. כאן, כדי לקבוע אם משהו זז, זה פחות או יותר אותו דבר: כל מסגרת שצולמה בזרם מצלמת רשת תשוות למסגרת הפניה. אם משהו שונה, משהו הועבר. זה פשוט כמו שזה נשמע.

יש ללכוד את מסגרת ההתייחסות הזו בתנאים המושלמים ביותר (שום דבר לא זז, למשל). בעולם עיבוד התמונה, השוואה זו בין מסגרת שנלכדה למסגרת התייחסות מורכבת מטכניקה הנקראת חיסור רקע. חיטוב רקע מורכב מממש להפחית מידע צבעוני של פיקסל לפיקסל מהמסגרת שצולמה ומסגרת ההתייחסות. לכן, התמונה המתקבלת מהתהליך הזה תדגיש / תציג עם פרטים נוספים רק את ההבדל בין שתי המסגרות הללו (או, מה הניע / קיבל תנועה) וכל השאר יהיה שחור בתמונה (הצבע בעל ערך אפס על אפור פיקסל בקנה מידה). חשוב: תנאי תאורה ואיכות תמונת מצלמת האינטרנט (בשל איכות חיישני הלכידה) יכולים להשתנות מעט ממסגרת למסגרת. זה מרמז ש"החלקים השווים "ממסגרת ההתייחסות ומסגרות נוספות לא יהיו שחורות מוחלטות לאחר חיסור רקע. למרות התנהגות זו, אין השלכות חמורות בשלבים הבאים של עיבוד תמונות בפרויקט זה.

על מנת למזער את זמן עיבוד התמונה, לפני ביצוע תת -משנה ברקע, מסגרת שצולמה ומסגרת הפניה מומרים לתמונה בקנה מידה אפור. אבל למה? זו בעיה של יעילות מחשוב: לתמונה המציגה מספר צבעים (תמונת צבע) יש שלושה מידע לפיקסל: רכיבי צבע אדום, כחול וירוק (תקן RGB הישן אך הזהוב). אז, מבחינה מתמטית, ניתן להגדיר כל פיקסל כמערך בעל שלושה ערכים, כל אחד מייצג רכיב צבע. לכן, בהרחבתה לכל התמונה, התמונה הסופית תהיה למעשה תמהיל של שלושה רכיבי תמונה: רכיבי תמונה אדומים, כחולים וירוקים.

כדי לעבד אותו, נדרשת עבודה רבה! עם זאת, בתמונות בקנה מידה אפור, לכל פיקסל יש רק מידע צבע אחד. אז העיבוד של תמונת צבע איטי פי שלוש מאשר במקרה של תמונות בקנה מידה אפור (לפחות שלוש פעמים, תלוי באיזו טכניקה מדובר). ויש עוד: למטרות מסוימות (כמו פרויקט זה), עיבוד כל הצבעים אינו הכרחי או חשוב כלל. לכן הגענו למסקנה: מומלץ מאוד להשתמש בתמונות בקנה מידה אפור למטרות עיבוד תמונה. לאחר חיתור רקע, יש צורך ליישם מסנן טשטוש גאוסי.

מסנן הטשטוש הגאוסי המוחל על תמונה מופחתת רקע מחליק את כל קווי המתאר של האובייקט שזוהה בתנועה. מה שבטוח, זה יעזור בשלבים הבאים של עיבוד התמונה.

שלב 2: בינאריזציה

בינאריזציה
בינאריזציה

ברוב המקרים של עיבוד תמונה, בינאריזציה היא כמעט שלב חובה לאחר אובייקטים / מאפיינים של הדגשה בתמונה. סיבה: בתמונה בינארית, כל צבע פיקסל יכול להניח שני ערכים בלבד: 0x00 (שחור) או 0xFF (לבן). זה עוזר מאוד בעיבוד התמונה על מנת לדרוש אפילו פחות "כוח מחשוב" ליישום טכניקות עיבוד תמונה בשלבים הבאים. ניתן לבצע בינאריזציה בהשוואת כל צבע הפיקסלים של התמונה בקנה מידה אפור לסף מסוים. אם הערך של צבע הפיקסל גדול מהסף, צבע הפיקסל הזה יניח ערך לבן (0xFF), ואם ערך צבע הפיקסל נמוך מהסף, צבע הפיקסל הזה יניח ערך שחור (0x00). למרבה הצער, בחירת ערך הסף אינה כה פשוטה לביצוע. זה תלוי בגורמי סביבה, כגון תנאי תאורה. בחירה לא נכונה של ערך סף יכולה להרוס את כל השלבים הלאה. לכן, אני ממליץ בחום להתאים סף בפרויקט באופן ידני במקרה שלך לפני פעולות נוספות. ערך סף זה חייב להבטיח שהאובייקט הנע יופיע בתמונה בינארית. במקרה שלי, לאחר בחירה מספקת של סף, התוצאה היא מה שאתה רואה באיור 5.

איור 5 - תמונה בינארית

שלב 3: מרחיבים

עד עכשיו ניתן היה לזהות אובייקטים נעים, להדגיש אותם וליישם בינאריזציה, מה שמביא לתמונה די ברורה של אובייקט נע (= תמונה די ברורה של האובייקט למטרות עיבוד תמונה). ההכנה לספירת אובייקטים נעשית כמעט. ה"כמעט "כאן פירושו שיש כמה שינויים עדינים לבצע לפני שממשיכים הלאה. בשלב זה, קיימים סיכויים של נוכחות של "חורים" באובייקטים (המוני שחורים של פיקסלים לתוך האובייקט הלבן המודגש). חורים אלה יכולים להיות כל דבר, החל מתנאי תאורה מסוימים ועד לחלק כלשהו מצורת האובייקט. ברגע שחורים יכולים "לייצר" אובייקטים מזויפים בתוך אובייקטים אמיתיים (תלוי כמה הם גדולים ואיפה הם נמצאים), התוצאות של נוכחות חורים בתמונה עלולות להיות קטסטרופליות לספירת אובייקטים. דרך לחסל את החורים הללו היא באמצעות טכניקת עיבוד תמונה בשם Dilate. השתמש בזה וחורים נעלמים.

שלב 4: החיפוש אחר קווי המתאר (והצנטרואידים שלו)

החיפוש אחר קווי המתאר (והצנטרואידים שלו)
החיפוש אחר קווי המתאר (והצנטרואידים שלו)

בשלב זה, יש לנו את האובייקטים המודגשים, ללא חורים בתוכו ומוכנים להמשך: החיפוש אחר קווי המתאר (והצנטרואידים שלו). ישנם משאבים ב- OpenCV לזיהוי קווי מתאר אוטומטיים, אך יש לבחור בתבונה את הספירות שאובחנו (כדי לבחור את האובייקט האמיתי בלבד). לכן, הקריטריונים לזיהוי קווי המתאר הם שטח האובייקט, הנמדד בפיקסלים². אם למתאר יש שטח גבוה יותר ממגבלה (מוגדר בתוכנה), כך שהוא חייב להיחשב כאובייקט אמיתי שיש לספור אותו. הבחירה של מגבלת האזור/קריטריונים זו חשובה מאוד, ובחירה גרועה כאן פירושה ספירה לא נכונה. עליך לנסות כמה ערכי גבולות של ערכי שטח ולבדוק מה מתאים יותר לשימוש שלך. אל תדאג, הגבול הזה לא כל כך קשה למצוא / להתאים. לאחר שבוחרים את כל האובייקטים בתמונה, השלב הבא הוא לצייר עליו סיבוב (retangle זה חייב להכיל בתוכו אובייקט שלם). ומרכזו של המלבן הזה הוא…. מרכז האובייקט! אתה אולי חושב "מה הבעיה עם הצנטרואיד הזה?", נכון? להלן תשובתך: לא משנה כמה גדול או כיצד צורת האובייקט, תנועתו זהה לאותו צנטרואיד. במילים אחרות: נקודה פשוטה זו הנקראת centroid מייצגת את כל תנועת האובייקט. זה עושה את הספירה לפשוטה מאוד עכשיו, לא? עיין בתמונה למטה (איור 6), שבו מרכז האוביידר מיוצג כנקודה שחורה.

שלב 5: תנועת צנטוריד וספירת אובייקטים

הגמר הגדול: השווה את קואורדינטות המרכז של האובייקט לקואורדינטות קווי הכניסה והיציאה והחל את אלגוריתם הספירה שתואר קודם לכן. ויהיה ספירה של עצמים נעים!

התוצאה הסופית כפי שמוצג ממש בתחילת הפוסט הזה, הנה הפרויקט בפעולה:

מוּמלָץ: