المشاركات

مقدمة عن تقسيم الصور (Image Segmentation)

رؤية الحاسب (Computer Vision) هو علم يختص بقدرة الحاسوب على فهم وتحليل الصور والفديوهات. وبصورة عامه محاولة محاكاة نظام الرؤية عند الانسان.

تستخدم تقنيات رؤية الحاسب في العديد من تطبيقات حياتنا اليومية بصورة كبيرة جداً، من كاميرات المراقبة (Security Cameras)، بصمة الوجه في الهاتف (Face ID)، التصوير الطبي (Medical Imaging) و الاكثر اذهالاً السيارة ذاتية القيادة (Self Driving Cars).

تقنيات رؤية الحاسب (Computer Vision Techniques)

  1. تصنيف الصور (Image Classification)

  2. تحديد الكائنات (Object Detection)

  3. متابعة الكائنات (Object Tracking)

  4. تقسيم الصور (Image Segmentation)

سنتعرض في هذا المقال مقدمة عن تقسيم الصور، إذا أردت تفاصيل أكثر عن بقية التقنيات اضغط على هذا الرابط.

تقسيم الصور (Image Segmentation)

استناداً على تعريف ويكيبيديا:

هي عملية تقسيم الصورة الرقمية إلى أجزاء أو مجموعة من البكسلات (أصغر وحدة في تكوين الصورة). الهدف من تقسيم الصورة إلى اجزاء هو تغيير تمثيلها وجعلها أبسط وأسهل للعمليات التحليلية.

استخدمات تقنية تقسم الصور عديدة جداً أشهرها في السيارة ذاتية القيادة كما توضح صورة المقال، تم تقسيم الناس باللون الأحمر والسيارات باللون الأرزق والطريق بلون بنفسجي، وغيرها. هذه التقسيمات تسهل على الحاسب أو البرنامج عملية تحليل الكائنات داخل الصورة أو الفديو.

بعض تقنيات تقسم الصور (Image Segmentation Techniques)

  • أسهل وأبسط طريقة لتقسيم الصور تسمى التقسيم الحدّي (Thresholding) نقوم فيها بتعرف قيمة معينة إذا تخطت قيمة البكسل ذاك الحد المعين نعطية القيمة 1 مثلاً، وقيم البكسل الأدنى تأخذ 0. ويكون المخرج الناتج صورة ثنائية في هذه الحالة، كما في الصورة الموضحة بالاسفل.

thresolding

  • طريقة التجميع (Clustering Method).
  • خوارزميات التعلم العميق مثل: YOLO, Region Based Segmentation, U-Net سنتطرق لها في مقال آخر.

سنتحدث عن طريقة التجميع (Clustering Method)

عملية التجميع (Clustering) هي عملية تقسيم البيانات إلى مجموعات، بحيث كل مجموعة تحتوي عن بيانات متشابهة أو تمتلك صفات متشابهة. أشهر أنواع خوارزميات التجميع تعرف بـ K-Means.

الحرف K يمثل عدد المجموعات التي نريد تقسيمها. تعد خوارزمية K-Means إحدى أنواع خوارزميات التعلم غير موجَّه (Unsupervised Learning).

طريقة عمل خوارزمية K-Means

  1. نحدد قيمة لـ K
  2. نقوم بتوزيع البيانات (في حالة الصورة تكون بكسلات الصورة) على أي نقطة من النقاط K
  3. نقوم بحساب نقطة المنتصف لكل من المجموعات (K)
  4. نقوم بحساب المسافة لكل نقطة من البيانات إلى النقاط K
  5. اعتماداً على المسافة المحسوبة نقوم بتوزيع نقاط البيانات على أقرب المجموعات لها
  6. نقوم بحساب قيمة نقطة المنتصف من جديد
  7. نكرر الخطوات 4، 5 و 6 إلى أن لا يحدث تغير كبير في قيمة نقطة المنتصف

لتنفيذ الخوارزمية سنتسخدم مكتبة OpenCV، وهي مكتبة متخصصة في برامج وخوارزميات رؤية الحاسب.

OpenCV تحتوي على دالة خاصة تنفذ k-means بعد أن تستقبل عدة متغيرات:

  1. الصورة في شكل مصفوفة ثنائية الأبعاد
  2. قيمة العدد K، أو قيمة المجموعات التي نريد تقسيمها
  3. العلامات وقيمتها تكون None
  4. شرط التوقف (criteria)
  5. عدد المحاولات
  6. اختيار نقطة المنتصف الأولى

شرح الدالة على موقع OpenCV.

الكود

import cv2
import numpy as np
import matplotlib.pyplot as plt

# read the image
img = cv2.imread('../caf.jpg')

# make a copy
img_copy = np.copy(img)

# convert it to RGB
img_copy = cv2.cvtColor(img_copy, cv2.COLOR_BGR2RGB)

# reshape it to 2D array to feed it to kmean
pixel_vals = img_copy.reshape((-1, 3))
pixel_vals = np.float32(pixel_vals)

# define stopping criteria
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)

# number of clusters
k = 3
# try to change the number of k to see different result
# perform kmean
retval, labels, centers = cv2.kmeans(pixel_vals, k, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS)

# convert data into 8-bit values
centers = np.uint8(centers)
segmented_data = centers[labels.flatten()]

#reshape the data to the original shape
segmented_image = segmented_data.reshape((img_copy.shape))
labels_reshape = labels.reshape(img_copy.shape[0], img_copy.shape[1])

# show the images
plt.subplot(121),plt.imshow(img_copy)
plt.title('Original Image'), plt.xticks([]), plt.yticks([])

plt.subplot(122),plt.imshow(segmented_image)
plt.title('Segmented Image K'), plt.xticks([]), plt.yticks([])

plt.show()

segmented image

المصادر

الوسوم
اظهر المزيد

Mohammed Galalen

مطور برمجيات، مهتم في مجال التعلم العميق وروؤية الحاسب

مقالات ذات صلة

4 آراء على “مقدمة عن تقسيم الصور (Image Segmentation)”

  1. ماهو المقصود بصورة ثنائية (ويكون المخرج الناتج صورة ثنائية في هذه الحالة، كما في الصورة الموضحة بالاسفل.)

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

شاهد أيضاً

إغلاق
إغلاق