يُعدّ عتبة التكيّف تقنية أساسية في معالجة الصور لتحويل الصور الرمادية إلى صور ثنائية (أسود وأبيض). وعكس العتبة البسيطة، التي تستخدم قيمة عتبة واحدة للصورة بأكملها، تحسب عتبة التكيّف ديناميكيًا عتبة مختلفة لمناطق الصورة المختلفة. وتُعدّ هذه القدرة على التكيّف مفيدة بشكل خاص عند التعامل مع الصور التي تُظهر إضاءة غير متساوية، حيث قد تفشل العتبة العالمية في فصل المقدمة عن الخلفية بدقة.
يكمن المبدأ الأساسي لعتبة التكيّف في مراعاة خصائص الصورة المحلية عند تحديد العتبة. وبدلاً من قيمة محددة عالميًا، يقسم الخوارزمي الصورة إلى مناطق أصغر (كتل أو بلاطات). وبالنسبة لكل منطقة، يتم حساب عتبة بناءً على شدة البكسل داخل تلك المنطقة. ويعوض هذا النهج الموضعي بفعالية عن اختلافات الإضاءة عبر الصورة. وتشمل الطرق الشائعة لحساب العتبة المحلية حساب متوسط شدة البكسل داخل المنطقة أو استخدام متوسط مرجح (غاوسي).
دالة عتبة التكيّف في OpenCV
يُبسّط OpenCV، وهي مكتبة قوية لرؤية الكمبيوتر، عتبة التكيّف باستخدام دالته cv2.adaptiveThreshold()
. وتقبل هذه الدالة العديد من المعلمات الرئيسية:
src
: صورة الإدخال الرمادية.maxValue
: القيمة القصوى المُعيّنة للبكسل التي تتجاوز العتبة (عادةً 255 للأبيض).adaptiveMethod
: طريقة حساب العتبة. تشمل الخيارات:cv2.ADAPTIVE_THRESH_MEAN_C
: يستخدم متوسط الجوار كعتبة.cv2.ADAPTIVE_THRESH_GAUSSIAN_C
: يستخدم متوسطًا مرجحًا (غاوسيًا) للجوار كعتبة.
thresholdType
: نوع العتبة.cv2.THRESH_BINARY
شائع، حيث يُعيّن البكسل فوق العتبة إلىmaxValue
وتلك التي تقل عنها إلى 0 (أسود).blockSize
: حجم الجوار (المنطقة) المستخدم لحساب العتبة. يجب أن يكون عددًا فرديًا.C
: ثابت يُطرح من المتوسط أو المتوسط المرجح، لضبط العتبة بدقة.
التنفيذ العملي باستخدام Python
فيما يلي مثال بلغة Python باستخدام OpenCV:
import cv2
import numpy as np
# تحميل الصورة الرمادية
img = cv2.imread('input.jpg', cv2.IMREAD_GRAYSCALE)
# تطبيق عتبة التكيّف
thresh = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)
# عرض النتائج
cv2.imshow('Original', img)
cv2.imshow('Adaptive Threshold', thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()
يقوم هذا الكود بتحميل صورة رمادية، ويطبق عتبة التكيّف باستخدام الطريقة الغاوسية (cv2.ADAPTIVE_THRESH_GAUSSIAN_C
)، وحجم كتلة 11، وثابت 2. ثم يعرض كل من الصورة الأصلية والصورة المعالجة بالعتبة. يُعدّ التجريب باستخدام blockSize
و C
أمرًا بالغ الأهمية للحصول على نتائج مثالية، وكذلك اختيار adaptiveMethod
المناسب بناءً على خصائص الصورة.
اختيار المعلمات الصحيحة
تعتمد فعالية عتبة التكيّف على اختيار المعلمات. يُراعي blockSize
الأكبر جوارًا أوسع، مما يؤدي إلى انتقالات أكثر سلاسة ولكن قد يفوّت تفاصيل دقيقة. وعكس ذلك، فإن blockSize
الأصغر أكثر حساسية للتغيرات المحلية ولكن قد يُدخِل ضوضاء. يساعد الثابت C
في ضبط حساسية العتبة؛ يؤدي C
الأكبر إلى عتبة أعلى.
يعتمد الاختيار بين cv2.ADAPTIVE_THRESH_MEAN_C
و cv2.ADAPTIVE_THRESH_GAUSSIAN_C
على خصائص ضوضاء الصورة. يُفضّل عمومًا cv2.ADAPTIVE_THRESH_GAUSSIAN_C
للصور التي تحتوي على ضوضاء كبيرة، حيث يُقلل الوزن الغاوسي من تأثير القيم الشاذة.
الخلاصة
توفر عتبة التكيّف حلاً قويًا لتحويل الصور ذات الإضاءة غير المتساوية إلى صور ثنائية، مما يُحسّن الدقة بشكل كبير مقارنة بالعتبة البسيطة. تُمكّن دالة cv2.adaptiveThreshold()
الفعّالة في OpenCV المستخدمين من تطبيق هذه التقنية بسهولة، وتحقيق نتائج مثالية من خلال ضبط المعلمات بعناية واختيار طريقة التكيّف المناسبة. وتُعدّ مرونتها وفعاليتها أداة لا غنى عنها في العديد من تطبيقات رؤية الكمبيوتر.
جدول المحتويات