"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > إتقان تجزئة الصور: كيف لا تزال التقنيات التقليدية تتألق في العصر الرقمي

إتقان تجزئة الصور: كيف لا تزال التقنيات التقليدية تتألق في العصر الرقمي

تم النشر بتاريخ 2024-09-14
تصفح:471

مقدمة

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

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

مجموعة بيانات الصور MIVIA HEp-2

مجموعة بيانات الصور MIVIA HEp-2 هي مجموعة من الصور للخلايا المستخدمة لتحليل نمط الأجسام المضادة للنواة (ANA) من خلال خلايا HEp-2. وهو يتألف من صور ثنائية الأبعاد تم التقاطها من خلال الفحص المجهري الفلوري. وهذا ما يجعله مناسبًا جدًا لمهام التجزئة، وأهمها المهام المتعلقة بتحليل الصور الطبية، حيث يكون الكشف عن المنطقة الخلوية هو الأهم.

الآن، دعنا ننتقل إلى تقنيات التجزئة المستخدمة لمعالجة هذه الصور، ومقارنة أدائها بناءً على نتائج F1.


1. تجزئة العتبة

العتبة هي العملية التي يتم من خلالها تحويل الصور ذات التدرج الرمادي إلى صور ثنائية بناءً على شدة البكسل. في مجموعة بيانات MIVIA HEp-2، تعد هذه العملية مفيدة في استخراج الخلايا من الخلفية. إنها بسيطة وفعالة إلى مستوى كبير نسبيًا، خاصة مع طريقة أوتسو، حيث أنها تحسب ذاتيًا العتبة المثلى.

طريقة أوتسو هي طريقة عتبة تلقائية، حيث تحاول العثور على أفضل قيمة عتبة للحصول على الحد الأدنى من التباين داخل الفئة، وبالتالي فصل الفئتين: المقدمة (الخلايا) والخلفية. تقوم الطريقة بفحص الرسم البياني للصورة وتحسب العتبة المثالية، حيث يتم تقليل مجموع تباينات كثافة البكسل في كل فئة.

# Thresholding Segmentation
def thresholding(img):
    # Convert image to grayscale
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)

    # Apply Otsu's thresholding
    _, thresh = cv.threshold(gray, 0, 255, cv.THRESH_BINARY   cv.THRESH_OTSU)

    return thresh

Mastering Image Segmentation: How Traditional Techniques Still Shine in the Digital Age


2. تجزئة كشف الحافة

يتعلق اكتشاف الحافة بتحديد حدود الكائنات أو المناطق، مثل حواف الخلايا في مجموعة بيانات MIVIA HEp-2. من بين الطرق العديدة المتاحة لاكتشاف التغيرات المفاجئة في الشدة، يعد Canny Edge Detector الطريقة الأفضل وبالتالي الأنسب لاستخدامها في اكتشاف الحدود الخلوية.

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

# Edge Detection Segmentation
def edge_detection(img):
    # Convert image to grayscale
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)

    # Apply Gaussian blur
    gray = cv.GaussianBlur(gray, (3, 3), 0)

    # Calculate lower and upper thresholds for Canny edge detection
    sigma = 0.33
    v = np.median(gray)
    lower = int(max(0, (1.0 - sigma) * v))
    upper = int(min(255, (1.0   sigma) * v))

    # Apply Canny edge detection
    edges = cv.Canny(gray, lower, upper)

    # Dilate the edges to fill gaps
    kernel = np.ones((5, 5), np.uint8)
    dilated_edges = cv.dilate(edges, kernel, iterations=2)

    # Clean the edges using morphological opening
    cleaned_edges = cv.morphologyEx(dilated_edges, cv.MORPH_OPEN, kernel, iterations=1)

    # Find connected components and filter out small components
    num_labels, labels, stats, _ = cv.connectedComponentsWithStats(
        cleaned_edges, connectivity=8
    )
    min_size = 500
    filtered_mask = np.zeros_like(cleaned_edges)
    for i in range(1, num_labels):
        if stats[i, cv.CC_STAT_AREA] >= min_size:
            filtered_mask[labels == i] = 255

    # Find contours of the filtered mask
    contours, _ = cv.findContours(
        filtered_mask, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE
    )

    # Create a filled mask using the contours
    filled_mask = np.zeros_like(gray)
    cv.drawContours(filled_mask, contours, -1, (255), thickness=cv.FILLED)

    # Perform morphological closing to fill holes
    final_filled_image = cv.morphologyEx(
        filled_mask, cv.MORPH_CLOSE, kernel, iterations=2
    )

    # Dilate the final filled image to smooth the edges
    final_filled_image = cv.dilate(final_filled_image, kernel, iterations=1)

    return final_filled_image

Mastering Image Segmentation: How Traditional Techniques Still Shine in the Digital Age


3. التقسيم على أساس المنطقة

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

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

# Region-Based Segmentation
def region_based(img):
    # Convert image to grayscale
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)

    # Apply Otsu's thresholding
    _, thresh = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV   cv.THRESH_OTSU)

    # Apply morphological opening to remove noise
    kernel = np.ones((3, 3), np.uint8)
    opening = cv.morphologyEx(thresh, cv.MORPH_OPEN, kernel, iterations=2)

    # Dilate the opening to get the background
    sure_bg = cv.dilate(opening, kernel, iterations=3)

    # Calculate the distance transform
    dist_transform = cv.distanceTransform(opening, cv.DIST_L2, 5)

    # Threshold the distance transform to get the foreground
    _, sure_fg = cv.threshold(dist_transform, 0.2 * dist_transform.max(), 255, 0)
    sure_fg = np.uint8(sure_fg)

    # Find the unknown region
    unknown = cv.subtract(sure_bg, sure_fg)

    # Label the markers for watershed algorithm
    _, markers = cv.connectedComponents(sure_fg)
    markers = markers   1
    markers[unknown == 255] = 0

    # Apply watershed algorithm
    markers = cv.watershed(img, markers)

    # Create a mask for the segmented region
    mask = np.zeros_like(gray, dtype=np.uint8)
    mask[markers == 1] = 255

    return mask

Mastering Image Segmentation: How Traditional Techniques Still Shine in the Digital Age


4. التقسيم القائم على المجموعات

تميل تقنيات التجميع مثل K-Means إلى تجميع وحدات البكسل في مجموعات متشابهة، وهو ما يعمل بشكل جيد عند الرغبة في تقسيم الخلايا في بيئات متعددة الألوان أو معقدة، كما هو موضح في صور خلايا HEp-2. بشكل أساسي، يمكن أن يمثل هذا فئات مختلفة، مثل المنطقة الخلوية مقابل الخلفية.

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

# Clustering Segmentation
def clustering(img):
    # Convert image to grayscale
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)

    # Reshape the image
    Z = gray.reshape((-1, 3))
    Z = np.float32(Z)

    # Define the criteria for k-means clustering
    criteria = (cv.TERM_CRITERIA_EPS   cv.TERM_CRITERIA_MAX_ITER, 10, 1.0)

    # Set the number of clusters
    K = 2

    # Perform k-means clustering
    _, label, center = cv.kmeans(Z, K, None, criteria, 10, cv.KMEANS_RANDOM_CENTERS)

    # Convert the center values to uint8
    center = np.uint8(center)

    # Reshape the result
    res = center[label.flatten()]
    res = res.reshape((gray.shape))

    # Apply thresholding to the result
    _, res = cv.threshold(res, 0, 255, cv.THRESH_BINARY   cv.THRESH_OTSU)

    return res

Mastering Image Segmentation: How Traditional Techniques Still Shine in the Digital Age


تقييم التقنيات باستخدام نتائج F1

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

قمنا بحساب درجة F1 لكل طريقة تجزئة من خلال تسطيح كل من الحقيقة الأرضية والصورة المجزأة وحساب درجة F1 الموزونة.

def calculate_f1_score(ground_image, segmented_image):
    ground_image = ground_image.flatten()
    segmented_image = segmented_image.flatten()
    return f1_score(ground_image, segmented_image, average="weighted")

قمنا بعد ذلك بتصور نتائج الفورمولا 1 بطرق مختلفة باستخدام مخطط شريطي بسيط:

Mastering Image Segmentation: How Traditional Techniques Still Shine in the Digital Age


خاتمة

على الرغم من ظهور العديد من الأساليب الحديثة لتجزئة الصور، إلا أن تقنيات التجزئة التقليدية مثل العتبة، واكتشاف الحواف، والأساليب القائمة على المنطقة، والتجميع يمكن أن تكون مفيدة جدًا عند تطبيقها على مجموعات البيانات مثل مجموعة بيانات الصور MIVIA HEp-2.

]

كل طريقة لها قوتها:

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

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


شكرا على القراءة! آمل أن يكون هذا الاستكشاف لتقنيات تجزئة الصور التقليدية مصدر إلهام لمشروعك القادم. لا تتردد في مشاركة أفكارك وتجاربك في التعليقات أدناه!

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/ahmedmbutt/mastering-image-segmentation-how-traditional-techniques-still-shine-in-the-digital-age-36fa?1 إذا كان هناك أي انتهاك، من فضلك اتصل بـ [email protected]
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3