logo

OpenCV: التقسيم باستخدام العتبة

في هذه المقالة تسمى التقنية الأساسية لتجزئة الكائنات العتبة . ولكن قبل الانتقال إلى المزيد من التفاصيل أدناه، إليك نظرة عامة موجزة عن OpenCV. OpenCV (Open Source Computer Vision) هي مكتبة مفتوحة المصدر عبر الأنظمة الأساسية لوظائف البرمجة تهدف إلى أداء مهام رؤية الكمبيوتر في الوقت الفعلي في مجموعة واسعة من المجالات مثل:
  • التعرف على الوجه
  • أنظمة التعرف على القزحية
  • التعرف على الإيماءات
  • التفاعل بين الإنسان والحاسوب (HCI)
  • الروبوتات المتنقلة
  • تحديد الكائن
  • التقسيم والاعتراف
  • رؤية مجسمة: إدراك العمق من كاميرتين
  • الواقع المعزز
ويتضمن أيضًا مكتبة إحصائية قوية للتعلم الآلي تحتوي على عدد من المصنفات المختلفة المستخدمة لدعم المجالات المذكورة أعلاه. لاستخدام OpenCV، ما عليك سوى استيراد المكتبات المطلوبة أو تضمينها والبدء في الاستفادة من عدد لا يحصى من الوظائف المتاحة. العتبة هي تقنية تجزئة شائعة جدًا تستخدم لفصل كائن عن خلفيته. في المقالة أدناه قمت بوصف التقنيات المختلفة المستخدمة في العتبة الصور ذات التدرج الرمادي (8 بت) . عملية العتبة يتضمن مقارنة كل قيمة بكسل للصورة (كثافة البكسل) إلى حد محدد. يؤدي هذا إلى تقسيم جميع وحدات البكسل الخاصة بالصورة المدخلة إلى مجموعتين:
  1. وحدات البكسل ذات قيمة كثافة أقل من العتبة.
  2. وحدات البكسل التي لها قيمة كثافة أكبر من العتبة.
يتم الآن إعطاء هاتين المجموعتين قيمًا مختلفة اعتمادًا على أنواع التجزئة المختلفة. يدعم OpenCV 5 أنظمة عتبة مختلفة على الصور ذات التدرج الرمادي (8 بت) باستخدام الوظيفة: عتبة مزدوجة (InputArray src OutputArray dst درس مزدوج نوع maxval int) حدود:
  • InputArray src: صورة الإدخال (Mat 8 بت أو 32 بت)
  • OutputArray dst: صورة الإخراج (نفس حجم الإدخال)
  • الدرس المزدوج: تعيين قيمة العتبة
  • الحد الأقصى المزدوج: الحد الأقصى المستخدم في النوعين 1 و2
  • int type* : يحدد نوع العتبة المراد استخدامها. (0-4)
  • *ترد أدناه قائمة بأنواع العتبات. صورة الإدخال أصل' title= يتم أولاً تحويل صورة RGB المدخلة إلى صورة ذات تدرج رمادي قبل الانتهاء من تحديد العتبة. OpenCV: التقسيم باستخدام العتبة' title= أنواع العتبة
      العتبة الثنائية (نوع int=0) 0_130' title= من المجموعتين اللتين تم الحصول عليهما في وقت سابق، المجموعة التي تضم أعضاء بكثافة بكسل أكبر من العتبة المحددة هي تعيين Max_Value أو في حالة التدرج الرمادي بقيمة 255 (أبيض). تم ضبط شدة البكسل الخاصة بأعضاء المجموعة المتبقية على 0 (أسود). معادل 1' title= إذا كانت قيمة كثافة البكسل عند (x y) في الصورة المصدر أكبر من العتبة، فسيتم تعيين القيمة في الصورة النهائية على maxVal. العتبة الثنائية المقلوبة (نوع int=1) 1_130' title= الجرد. العتبة الثنائية هي نفس العتبة الثنائية. يتمثل الاختلاف الأساسي الوحيد في عتبة Inv.Binary، حيث يتم تعيين المجموعة التي لها شدة بكسل أكبر من العتبة المحددة على "0" بينما يتم تعيين وحدات البكسل المتبقية ذات الشدة الأقل من العتبة على maxVal. مكافئ2' title= إذا كانت قيمة كثافة البكسل عند (x y) في الصورة المصدر أكبر من العتبة، فسيتم تعيين القيمة في الصورة النهائية على 0 وإلا فسيتم ضبطها على maxVal. اقتطاع العتبة (نوع int = 2) 2_150' title= يتم اقتطاع المجموعة التي لها شدة بكسل أكبر من العتبة المحددة إلى العتبة المحددة أو بمعنى آخر يتم تعيين قيم البكسل لتكون نفس العتبة المحددة. تظل جميع القيم الأخرى كما هي. مكافئ3' title= إذا كانت قيمة كثافة البكسل عند (x y) في الصورة المصدر أكبر من العتبة، فسيتم تعيين القيمة في الصورة النهائية على العتبة وإلا فلن تتغير. العتبة إلى الصفر (نوع int = 3) OpenCV: التقسيم باستخدام العتبة' title= تقنية عتبة بسيطة جدًا حيث نقوم بضبط كثافة البكسل على "0" لجميع وحدات البكسل في المجموعة التي لها قيمة كثافة بكسل أقل من العتبة. مكافئ4' title= إذا كانت قيمة كثافة البكسل عند (x y) في الصورة المصدر أكبر من العتبة، فلن تتغير القيمة عند (x y) في الصورة النهائية. تم ضبط جميع وحدات البكسل المتبقية على "0". عتبة الصفر المقلوب (نوع int = 4) OpenCV: التقسيم باستخدام العتبة' title= على غرار التقنية السابقة، قمنا هنا بتعيين كثافة البكسل على "0" لجميع وحدات البكسل في المجموعة التي لها قيمة كثافة بكسل أكبر من العتبة. مكافئ5' 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);  } }