logo

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)
  • *מתחת לרשימה של סוגי סף ניתנת. תמונת קלט מקור' title= תמונת RGB הקלט מומר תחילה לתמונת אפור לפני סיום הסף. OpenCV: פילוח באמצעות סף' title= סוגי סף
      סף בינארי (סוג int = 0) 0_130' title= מבין שתי הקבוצות שהושגו קודם לכן בקבוצה עם חברים בעוצמת פיקסל הגדולה מהסף שנקבע הם הקצאה max_value או במקרה של אפור אפור ערך של 255 (לבן). לחברי הקבוצה שנותרה עוצמות הפיקסלים שלהם מוגדרות ל- 0 (שחור). EQ1' title= אם ערך עוצמת הפיקסלים ב (x y) בתמונת המקור גדול מסף הערך בתמונה הסופית מוגדר ל- maxval. סף בינארי הפוך (סוג int = 1) 1_130' title= Inv. סף בינארי זהה לסף בינארי. ההבדל המהותי היחיד הוא בסף הבינארי של הקבוצה עם עוצמות פיקסלים גדולות יותר מאשר סף מוגדר מקבלים '0' ואילו הפיקסלים הנותרים בעלי עוצמות פחות מהסף מוגדר למקסוואל. EQ2' title= אם ערך עוצמת הפיקסלים ב (x y) בתמונת המקור גדול מסף הערך בתמונה הסופית מוגדר ל -0 אחר הוא מוגדר למקסוואל. גזז סף (סוג int = 2) 2_150' title= הקבוצה בעלת עוצמות פיקסלים גדולות יותר מסף הסט נקבעת לסף הסט או במילים אחרות, ערכי הפיקסלים מוגדרים להיות זהים לסף הסט. כל הערכים האחרים נשארים זהים. EQ3' title= אם ערך עוצמת הפיקסלים ב (x y) בתמונת המקור גדול מסף הערך בתמונה הסופית מוגדר לסף אחר הוא ללא שינוי. סף לאפס (סוג int = 3) OpenCV: פילוח באמצעות סף' title= טכניקת סף פשוטה מאוד בה אנו קובעים את עוצמת הפיקסלים ל'- 0 'עבור כל הפיקסלים של הקבוצה בעלי ערך עוצמת הפיקסלים פחות מהסף. EQ4' title= אם ערך עוצמת הפיקסלים ב (x y) בתמונת המקור גדול מסף הערך ב (x y) בתמונה הסופית לא משתנה. כל הפיקסלים הנותרים מוגדרים כ- '0'. סף לאפס הפוך (סוג int = 4) OpenCV: פילוח באמצעות סף' title= בדומה לטכניקה הקודמת כאן, קבענו את עוצמת הפיקסלים ל'0 'עבור כל הפיקסלים של הקבוצה בעלי ערך עוצמת הפיקסלים העולה על הסף. EQ5' title= אם ערך עוצמת הפיקסלים ב (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);  } }