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