اذهب إلى المحتوى
  • 0

التعتيب المتكيف "Adaptive Thresholding" في OpenCV

Ali Ismael

السؤال

Recommended Posts

  • 1

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

cv2.adaptiveThreshold(src, dst, maxValue, adaptiveMethod, thresholdType, blockSize, C)

بحيث أن الوسيط الأول يمثل الصورة، أما الثانية فهي المصفوفة التي سنضع الخرج ضمنها، أما المتغير الثالث يمثل القيمة التي سيتم إعطاءها للبكسل في حال كانت قيمته أكبر أو تساوي قيمة العتبة، أما الوسيط الرابع فهو خوارزمية التكييف وهي الطريقة التي سيتم من خلالها حساب قيمة العتبة (أي أن هذا الوسيط ستمثل قيمة خرجه العتبة)، وهناك طريقتان لذلك:
cv2.ADAPTIVE_THRESH_MEAN_C: وهنا يتم حساب قيمة العتبة على أساس متوسط مجموع البكسلات المجاورة (مثلاً إذا حددنا ال blockSize على 15 فهذا يعني أن قيمة العتبة ستكون مجموع قيم البكسلات في الجوار 15*15  مقسومة على عددها ومطروحاً منها قيمة الوسيط C) وهكذا من أجل كل بكسل في الصورة.

Threshold Value = (Mean of the neighbourhood area values – constant value

cv2.ADAPTIVE_THRESH_GAUSSIAN_C: وهنا يتم حساب قيمة العتبة عن طريق حساب المجموع الغاوصي الموزون للبكسلات المتجاورة مطروحاً منه قيمة C:

Threshold Value = (Gaussian weighted sum of the neighbourhood values – constant value

أما الوسيط الخامس فهو نوع التعتيب المستخدم (تماماً كما في التعتيب البسيط). بينما Block Size فهي كما أشرنا حجم النافذة التي سيتم اعتمادها لحساب العتبة من أجل كل بكسل. و C هي الثابت التي سيتم طرحه. انظر إلى المثال التالي:

import cv2
import numpy as np
from matplotlib import pyplot as plt
# قراءة الصورة
img = cv2.imread(r'C:\Users\Windows.10\Desktop\1.jpeg',0)
# تطبيق التعتيب البسيط
_,th1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
# ADAPTIVE_THRESH_MEAN_C تطبيق التعتيب التكيفي مع استخدام 
th2 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,\
cv2.THRESH_BINARY,11,10)
# ADAPTIVE_THRESH_GAUSSIAN_C وسنجرب أيضاً 
th3 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,\
cv2.THRESH_BINARY,11,10)
# إعطاء الصور أسماء توضيحية
titles = ['Original Image', 'Global Thresholding (v = 127)',
'Adaptive Mean Thresholding', 'Adaptive Gaussian Thresholding']
images = [img, th1, th2, th3]
# عرض النتائج
for i in range(4):
    plt.subplot(2,2,i+1),plt.imshow(images[i],'gray')
    plt.title(titles[i])
    plt.xticks([]),plt.yticks([])
fig =plt.gcf()
fig.set_size_inches(20.0, 20.0)
plt.show()

الخرج:
index.thumb.png.59bcca93561834d9f440741fb05039e1.png

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

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...