عتبة OpenCV التكيفية في Python مع cv2.adaptiveThreshold () PlatoBlockchain Data Intelligence. البحث العمودي. عاي.

حد تكيف OpenCV في Python مع cv2.adaptiveThreshold ()

المُقدّمة

العتبة هي تقنية بسيطة وفعالة لإجراء تجزئة أساسية في صورة ما ، ولترجمتها (تحويلها إلى صورة ثنائية) حيث تكون وحدات البكسل إما 0 or 1 (أو 255 إذا كنت تستخدم الأعداد الصحيحة لتمثيلها).

عادةً ، يمكنك استخدام العتبة لإجراء تقسيم بسيط للمقدمة الخلفية في صورة ما ، ويتلخص ذلك في المتغيرات في تقنية بسيطة لكل بكسل:

if pixel_value > threshold:
    pixel_value = MAX
else:
    pixel_value = 0

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

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

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

بالنسبة للتطبيقات الأكثر دقة التي تتطلب السياق ، فمن الأفضل لك استخدام تقنيات أكثر تقدمًا ، بما في ذلك التعلم العميق ، الذي يقود التطورات الأخيرة في رؤية الكمبيوتر.

عتبة التكيف مع OpenCV

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

img = cv2.imread('book.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img)

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

img = cv2.imread('book.jpg')


gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (7, 7), 0)

ret, mask = cv2.threshold(blurred, 0, 255, cv2.THRESH_OTSU)
print(f'Threshold: {ret}')

fig, ax = plt.subplots(1, 2, figsize=(12, 5))
ax[0].imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
ax[1].imshow(cv2.cvtColor(mask, cv2.COLOR_BGR2RGB))

دعنا نلقي نظرة على النتيجة:

عتبة OpenCV التكيفية في Python مع cv2.adaptiveThreshold () PlatoBlockchain Data Intelligence. البحث العمودي. عاي.

أوتش. الجزء الأيسر من النص باهت بشكل أساسي ، والظل حول الحضيض قد أكل جزءًا من الصورة ، والنص مشبع جدًا! هذه صورة "في البرية" ، والقواعد الشاملة مثل العتبة العامة لا تعمل بشكل جيد. ماذا يجب أن تكون العتبة؟ هذا يعتمد على جزء الصورة!

cv2.adaptiveThreshold() تسمح لنا الطريقة بالقيام بذلك بالضبط:

cv2.adaptiveThreshold(img, 
                      max_value, 
                      adaptive_method, 
                      threshold_method, 
                      block_size, 
                      C)

adaptive_method يمكن أن يكون cv2.ADAPTIVE_THRESH_MEAN_C or cv2.ADAPTIVE_THRESH_GAUSSIAN_C، حيث C هي الحجة الأخيرة التي حددتها. تحسب كلتا الطريقتين الحد الأدنى وفقًا لجيران البكسل المعني ، حيث يكون ملف block_size يحدد عدد الجيران المراد اعتبارهم (منطقة الحي).

ADAPTIVE_THRESH_MEAN_C يأخذ يعني الجيران ويخصم C، في حين ADAPTIVE_THRESH_GAUSSIAN_C يأخذ المبلغ المرجح غاوسي للجيران ويخصم C.

تحقق من دليلنا العملي العملي لتعلم Git ، مع أفضل الممارسات ، والمعايير المقبولة في الصناعة ، وورقة الغش المضمنة. توقف عن أوامر Googling Git وفي الواقع تعلم ذلك!

كما يسمح لك بتعيين إستراتيجية ثنائية ، ولكنها تقتصر على THRESH_BINARY و THRESH_BINARY_INV، وسيؤدي التغيير بينهما إلى التبديل الفعال بين "الخلفية" و "المقدمة".

تقوم الطريقة بإرجاع القناع للصورة فقط - وليس رمز الإرجاع والقناع. دعنا نحاول تقسيم الأحرف في نفس الصورة كما كان من قبل ، باستخدام العتبة التكيفية:


img = cv2.imread('book.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (7, 7), 0)


mask = cv2.adaptiveThreshold(blurred, 
                              255, 
                              cv2.ADAPTIVE_THRESH_MEAN_C, 
                              cv2.THRESH_BINARY, 
                              31, 
                              10)


fig, ax = plt.subplots(1, 2, figsize=(12, 5))
ax[0].imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
ax[1].imshow(cv2.cvtColor(mask, cv2.COLOR_BGR2RGB))
plt.tight_layout()

ينتج عن هذا صورة أوضح بكثير:

عتبة OpenCV التكيفية في Python مع cv2.adaptiveThreshold () PlatoBlockchain Data Intelligence. البحث العمودي. عاي.

ملحوظة:block_size يجب أن تكون الحجة عددًا غير متساوٍ.

بالطريقة نفسها تقريبًا ، يمكننا تطبيق العتبة الغاوسية:

mask = cv2.adaptiveThreshold(blurred, 
                              255, 
                              cv2.ADAPTIVE_THRESH_GAUSSIAN_C, 
                              cv2.THRESH_BINARY, 
                              31, 
                              10)

والذي ينتج أيضًا صورة مرضية جدًا في النهاية:

عتبة OpenCV التكيفية في Python مع cv2.adaptiveThreshold () PlatoBlockchain Data Intelligence. البحث العمودي. عاي.

كل من حجم الكتلة (منطقة الجوار) و C هي hyperparameters لضبطها هنا. جرب قيمًا مختلفة واختر القيمة التي تناسب صورتك بشكل أفضل. بشكل عام ، تكون عتبة gaussian أقل حساسية للضوضاء وستنتج صورًا أكثر قتامة وأنظف ، لكن هذا يختلف ويعتمد على المدخلات.

حدود العتبة التكيفية

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

عتبة OpenCV التكيفية في Python مع cv2.adaptiveThreshold () PlatoBlockchain Data Intelligence. البحث العمودي. عاي.

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

عتبة OpenCV التكيفية في Python مع cv2.adaptiveThreshold () PlatoBlockchain Data Intelligence. البحث العمودي. عاي.

وفي الختام

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

بالنسبة إلى العتبة البسيطة أثناء التنقل ، يمكنك استخدام OpenCV ، ومحاربة بعض القيود باستخدام العتبة التكيفية بدلاً من استراتيجيات العتبة العالمية. لتقسيم دقيق على مستوى الإنتاج ، ستحتاج إلى استخدام الشبكات العصبية.

المضي قدمًا - التعلم العميق العملي لرؤية الكمبيوتر

طبيعتك الفضولية تجعلك ترغب في الذهاب إلى أبعد من ذلك؟ نوصي بالتحقق من الدورة: "التعلم العميق العملي لرؤية الكمبيوتر باستخدام Python".

عتبة OpenCV التكيفية في Python مع cv2.adaptiveThreshold () PlatoBlockchain Data Intelligence. البحث العمودي. عاي.

دورة أخرى في الرؤية الحاسوبية؟

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

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

ماذا يوجد في الداخل؟

  • المبادئ الأولى للرؤية وكيف يمكن تعليم أجهزة الكمبيوتر "الرؤية"
  • مهام وتطبيقات مختلفة للرؤية الحاسوبية
  • أدوات التجارة التي ستجعل عملك أسهل
  • البحث عن مجموعات البيانات وإنشائها واستخدامها للرؤية الحاسوبية
  • نظرية وتطبيق الشبكات العصبية التلافيفية
  • التعامل مع تحول المجال والتواجد المشترك والتحيزات الأخرى في مجموعات البيانات
  • نقل التعلم والاستفادة من وقت تدريب الآخرين والموارد الحسابية لصالحك
  • بناء وتدريب مصنف حديث لسرطان الثدي
  • كيفية تطبيق جرعة صحية من الشك على الأفكار السائدة وفهم الآثار المترتبة على التقنيات المعتمدة على نطاق واسع
  • تصور "الفضاء المفهوم" لـ ConvNet باستخدام t-SNE و PCA
  • دراسات حالة عن كيفية استخدام الشركات لتقنيات الرؤية الحاسوبية لتحقيق نتائج أفضل
  • تقييم النموذج المناسب ، تصور الفضاء الكامن وتحديد انتباه النموذج
  • إجراء بحث في المجال ومعالجة مجموعات البيانات الخاصة بك وإنشاء اختبارات نموذجية
  • أحدث البنيات ، تطور الأفكار ، ما الذي يجعلها فريدة من نوعها وكيفية تنفيذها
  • KerasCV - مكتبة العمل قيد التقدم لإنشاء خطوط الأنابيب والنماذج الحديثة
  • كيف تحلل وتقرأ الأوراق وتنفذها بنفسك
  • اختيار النماذج حسب التطبيق الخاص بك
  • إنشاء خط أنابيب تعلم آلي شامل
  • المناظر الطبيعية والحدس في اكتشاف الكائنات باستخدام شبكات R-CNN و RetinaNets و SSDs و YOLO أسرع
  • المثيل والتجزئة الدلالية
  • التعرف على الكائنات في الوقت الفعلي باستخدام YOLOv5
  • تدريب كاشفات الأجسام YOLOv5
  • العمل مع المحولات باستخدام KerasNLP (مكتبة WIP ذات قوة الصناعة)
  • دمج المحولات مع ConvNets لإنشاء تسميات توضيحية للصور
  • ديب دريم
  • تحسين نموذج التعلم العميق لرؤية الكمبيوتر

الطابع الزمني:

اكثر من ستاكابوز