template_matching.py
# هذا العمل مرخص بموجب ترخيص MIT.
# حقوق النشر (c) 2013-2023 OpenMV LLC. جميع الحقوق محفوظة.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# مثال مطابقة القالب - الارتباط المتقاطع المعياري (NCC)
#
# يوضح هذا المثال كيفية استخدام ميزة NCC في كاميرا OpenMV الخاصة بك لمطابقة
# أجزاء من الصورة (patches) مع أجزاء أخرى من صورة... توقع ذلك فقط في بيئات محكومة للغاية
# NCC ليست مفيدة بشكل كبير.
#
# تحذير: دعم NCC بحاجة إلى إعادة عمل! في الوقت الحالي، تحتاج هذه الميزة
# الكثير من العمل لتصبح مفيدة. سيبقى هذا السكربت لإظهار
# أن هذه الوظيفة موجودة، لكنها في حالتها الحالية غير كافية.
import time
import csi
import image
from image import SEARCH_EX
csi0 = csi.CSI()
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)
# تحميل القالب (template).
# يجب أن يكون القالب صورة رمادية صغيرة (مثلاً 32x32 بكسل).
template = image.Image("template.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)، استخدم خطوة أكبر لجعلها أسرع.
# يكون البحث إما image.SEARCH_EX للبحث الشامل أو image.SEARCH_DS للبحث الماسي (diamond search)
#
# ملاحظة1: يجب أن تكون ROI أصغر من الصورة وأكبر من القالب.
# ملاحظة2: في البحث الماسي (diamond search)، يتم تجاهل كل من step و ROI.
r = img.find_template(
template, 0.70, step=4, search=SEARCH_EX
) # , roi=(10, 0, 60, 60))
if r:
img.draw_rectangle(r)
print(clock.fps())