مطابقة القوالب المتعددة NCC
الدرس المرئي 8 - مطابقة القوالب NCC:https://singtown.com/learn/49598/
طريقة مطابقة القوالب المتعددة مشابهة أساسًا لمطابقة القالب الواحد. كل ما عليك فعله هو تخزين عدة قوالب والوصول إليها مسبقًا. يمكنك استخدام الكود التالي.

# Template Matching Example - Normalized Cross Correlation (NCC)
#
# يوضح هذا المثال كيفية استخدام وظيفة NCC في كاميرا OpenMV لمطابقة جزء صغير من الصورة
# مع أجزاء مختلفة من الصورة... ما لم تكن البيئة قابلة للتحكم الشديد، فإن NCC ليست مفيدة دائمًا.
#
# تحذير: دعم NCC بحاجة إلى إعادة عمل! حتى الآن، تتطلب هذه الوظيفة الكثير من العمل لتصبح مفيدة.
# سيوضح هذا السكربت وجود الوظيفة، لكنها في حالتها الحالية غير كافية.
import csi
import time, csi, image
csi0 = csi.CSI()
from image import SEARCH_EX, SEARCH_DS
#استيراد SEARCH_EX وSEARCH_DS من وحدة image. استخدام from import يستورد فقط الجزأين
#المطلوبين SEARCH_EX وSEARCH_DS، دون استيراد وحدة image بالكامل.
# إعادة تعيين المستشعر
csi0.reset()
# ضبط إعدادات المستشعر
csi0.contrast(1)
csi0.gainceiling(16)
# أقصى دقة لمطابقة القوالب باستخدام SEARCH_EX هي QQVGA
csi0.framesize(csi.QQVGA)
# يمكنك ضبط النافذة (windowing) لتقليص صورة البحث.
#csi0.window(((640-80)//2, (480-60)//2, 80, 60))
csi0.pixformat(csi.GRAYSCALE)
# تحميل القالب.
# يجب أن يكون القالب صورة رمادية صغيرة (مثلاً 32x32 بكسل).
templates = ["0.pgm", "1.pgm", "2.pgm", "6.pgm"] #تخزين عدة قوالب
#تحميل صور القوالب
clock = time.clock()
# تشغيل مطابقة القوالب
while (True):
clock.tick()
img = csi0.snapshot()
# find_template(template, threshold, [roi, step, search])
# ROI: صف القيم (tuple) الذي يمثل منطقة الاهتمام (x, y, w, h).
# Step: خطوة الحلقة المستخدمة (y+=step, x+=step)، استخدم خطوة أكبر لجعلها أسرع.
# Search إما image.SEARCH_EX للبحث الشامل أو image.SEARCH_DS للبحث الماسي (diamond search)
#
# ملاحظة 1: يجب أن يكون ROI أصغر من الصورة وأكبر من القالب.
# ملاحظة 2: في البحث الماسي (diamond search)، يتم تجاهل كل من step وROI.
for t in templates:
template = image.Image(t)
#المرور على كل قالب وإجراء مطابقة القوالب عليه
r = img.find_template(template, 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
#find_template(template, threshold, [roi, step, search])، القيمة 0.7 في
#threshold هي عتبة التشابه، وroi هي منطقة إجراء المطابقة (المستطيل الذي رأسه العلوي الأيسر عند (10، 0)، بطول 80 وعرض 60)،
#لاحظ أن حجم roi يجب أن يكون أكبر من صورة القالب وأصغر من إطار الصورة (framebuffer).
#وضع علامة على الصورة المطابقَة
if r:
img.draw_rectangle(r)
print(t) #طباعة اسم القالب
#print(clock.fps())
تأثير التشغيل كما هو موضح في الشكل:

الإخراج في الطرفية (Terminal):
