OpenCV: פילוח באמצעות סף

OpenCV: פילוח באמצעות סף
במאמר זה טכניקה בסיסית לפילוח אובייקטים הנקראת סף ו אך לפני שעוברים לפרטים נוספים להלן סקירה קצרה של OpenCV. OpenCV (ראיית מחשב בקוד פתוח) היא ספריית פונקציות של קוד פתוח של פלטפורמה של פלטפורמה של פלטפורמה, שמטרתה לבצע משימות ראיית מחשב בזמן אמת במגוון רחב של שדות כמו:
  • זיהוי פנים
  • מערכות זיהוי איריס
  • הכרת מחוות
  • אינטראקציה אנושית למחשב (HCI)
  • רובוטיקה ניידת
  • זיהוי אובייקט
  • פילוח והכרה
  • חזון סטריאו סטריאופסיס: תפיסת עומק משתי מצלמות
  • מציאות מוגברת
זה כולל גם ספריית למידת סטטיסטיקה של מכונות סטטיסטיות שמכילה מספר מסווגים שונים המשמשים לתמיכה בתחומים לעיל. כדי להשתמש ב- OpenCV פשוט ייבא או לכלול את הספריות הנדרשות ולהתחיל להשתמש בשלל הפונקציות הזמינות. סף היא טכניקת פילוח פופולרית מאוד המשמשת להפרדת אובייקט מהרקע שלו. במאמר להלן תיארתי טכניקות שונות המשמשות לסף תמונות בגווני אפור (8 סיביות) ו התהליך של סף כרוך בהשוואה בין כל ערך פיקסל של התמונה (עוצמת פיקסל) לסף מוגדר. זה מחלק את כל הפיקסלים של תמונת הקלט לשתי קבוצות:
  1. פיקסלים בעלי ערך עוצמה נמוך מסף.
  2. פיקסלים בעלי ערך עוצמה גדול יותר מסף.
שתי קבוצות אלה מקבלות כיום ערכים שונים בהתאם לסוגי פילוח שונים. OpenCV תומך ב -5 תוכניות סף שונות בתמונות בגווני אפור (8 סיביות) באמצעות הפונקציה: סף כפול (inputArray SRC OutputArray DST סף כפול כפול מקסוואל int סוג) פרמטרים:
  • InputArray Src: תמונת קלט (מחצלת 8 סיביות או 32 סיביות)
  • OutputArray DST: תמונת פלט (גודל זהה לקלט)
  • סף כפול: הגדר ערך סף
  • Maxval כפול: maxval משמש בסוג 1 ו -2
  • סוג int*: מציין את סוג הסף שיש להשתמש בו. (0-4)
  • *מתחת לרשימה של סוגי סף ניתנת. תמונת קלט מקור תמונת RGB הקלט מומר תחילה לתמונת אפור לפני סיום הסף. OpenCV: פילוח באמצעות סף סוגי סף
      סף בינארי (סוג int = 0) 0_130 מבין שתי הקבוצות שהושגו קודם לכן בקבוצה עם חברים בעוצמת פיקסל הגדולה מהסף שנקבע הם הקצאה max_value או במקרה של אפור אפור ערך של 255 (לבן). לחברי הקבוצה שנותרה עוצמות הפיקסלים שלהם מוגדרות ל- 0 (שחור). EQ1 אם ערך עוצמת הפיקסלים ב (x y) בתמונת המקור גדול מסף הערך בתמונה הסופית מוגדר ל- maxval. סף בינארי הפוך (סוג int = 1) 1_130 Inv. סף בינארי זהה לסף בינארי. ההבדל המהותי היחיד הוא בסף הבינארי של הקבוצה עם עוצמות פיקסלים גדולות יותר מאשר סף מוגדר מקבלים '0' ואילו הפיקסלים הנותרים בעלי עוצמות פחות מהסף מוגדר למקסוואל. EQ2 אם ערך עוצמת הפיקסלים ב (x y) בתמונת המקור גדול מסף הערך בתמונה הסופית מוגדר ל -0 אחר הוא מוגדר למקסוואל. גזז סף (סוג int = 2) 2_150 הקבוצה בעלת עוצמות פיקסלים גדולות יותר מסף הסט נקבעת לסף הסט או במילים אחרות, ערכי הפיקסלים מוגדרים להיות זהים לסף הסט. כל הערכים האחרים נשארים זהים. EQ3 אם ערך עוצמת הפיקסלים ב (x y) בתמונת המקור גדול מסף הערך בתמונה הסופית מוגדר לסף אחר הוא ללא שינוי. סף לאפס (סוג int = 3) OpenCV: פילוח באמצעות סף טכניקת סף פשוטה מאוד בה אנו קובעים את עוצמת הפיקסלים ל'- 0 'עבור כל הפיקסלים של הקבוצה בעלי ערך עוצמת הפיקסלים פחות מהסף. EQ4 אם ערך עוצמת הפיקסלים ב (x y) בתמונת המקור גדול מסף הערך ב (x y) בתמונה הסופית לא משתנה. כל הפיקסלים הנותרים מוגדרים כ- '0'. סף לאפס הפוך (סוג int = 4) OpenCV: פילוח באמצעות סף בדומה לטכניקה הקודמת כאן, קבענו את עוצמת הפיקסלים ל'0 'עבור כל הפיקסלים של הקבוצה בעלי ערך עוצמת הפיקסלים העולה על הסף. EQ5 אם ערך עוצמת הפיקסלים ב (x y) בתמונת המקור גדול מסף הערך ב (x y) בתמונה הסופית מוגדר כ- 0 '. כל ערך הפיקסלים שנותר ללא שינוי.
    כדי להרכיב תוכניות OpenCV אתה צריך להתקין את ספריית OpenCV במערכת שלך. אני אפרסם הדרכה פשוטה לאותה בימים הקרובים. אם כבר התקנת OpenCV הפעל את הקוד שלהלן עם תמונת הקלט לבחירתך. CPP
       // CPP program to demonstrate segmentation   // thresholding.   #include         #include         #include         #include         using     namespace     cv  ;   int     main  (  int     argc       char  **     argv  )   {      if     (  argc     !=     2  )         {      cout      < <     ' Usage:  '      '   '      < <     endl  ;      return     -1  ;      }      int     threshold_value     =     0  ;      // Valid Values: 0 1 2 3 4      int     threshold_type     =     2  ;         // maxVal useful for threshold_type 1 and 2      int     maxVal     =     255  ;         // Source image      Mat     src     =     imread  (  argv  [  1  ]     1  );      cvNamedWindow  (  'Original'       CV_WINDOW_NORMAL  );      imshow  (  'Original'       src  );      Mat     src_gray       dst  ;      // Convert the image to GrayScale      cvtColor  (  src       src_gray       CV_BGR2GRAY  );      // Create a window to display results      cvNamedWindow  (  'Result'       CV_WINDOW_NORMAL  );      createTrackbar  (  'Threshold'       'Result'           &  threshold_value       255  );      while     (  1  )         {      threshold  (  src_gray       dst       threshold_value           maxVal       threshold_type  );      imshow  (  'Result'       dst  );      waitKey  (  1  );      }   }