Template Matching

จาก Morange Wiki

Template Matching

วัตถุประสงค์

  • ในบทนี้ จะเรียนรู้เกี่ยวกับ
    • การหาวัตถุในรูปภาพโดยใช้ เทมเพจแมซชิง
    • ทดลองการใช้งานฟังก์ชั่นนี้โดยคำสั่ง : cv2.matchTemplate(), cv2.minMaxLoc()

ทฤษฏี

  • โดยการใช้ Template Matching นั้นคือฟังก์ชั่นการค้นหา และ ตรวจพบ ตำแหน่งของเทมเพจในรูปภาพใหญ่ๆ โดย OpenCV จะมีฟังก์ชั่น cv2.matchTemplate() มาช่วยในด้านนี้ โดยวิธีใช้งานง่ายๆนั้น คือ นำรูปภาพเข้ามาแล้วนำไป Compare ให้เข้ากับ Template และ Patch ภาพที่นำเข้ามาให้อยู่ใต้เทมเพจของภาพ โดยวิธีการเปรียบได้หลายวิธีการ โดยใน OpenCV นั้น จะทำการกลับภาพให้เป็นสีเท่ก่อน ซึ่งแต่ละพิกเซลนั้นมีเท่าไหร่ และการพบนั้นมีเท่าไหร่ เมื่อเทียบกับแม่แบบ
  • หากภาพที่นำเข้ามานั้น มีขนาดเท่ากับ (WxH) และแม่แบบของขนาดรูปภาพนั้น (wxh) โดยจะมีค่าผลลัพธ์ที่จะสามารถนำไปใช้ต่อกับฟังก์ชั่น cv2.minMaxLoc() โดยจะใช้ฟังก์ชั่นนี้หาค่า maximum/minimum โดยจะเป็นมุมบนซ้ายของรูปสี่เหลี่ยมผืนผ้าและใช้ (w,h) แทน Width และ Height ของสี่เหลี่ยมผืนผ้า และนั้นคือภาพแม่แบบ

Template Matching in OpenCV

  • ตอนนี้จะทดลองหาแม่แบบมาทดลองเขียน Code แบบง่ายๆ สำหรับการค้นหาวัตถุในรูปภาพกัน
แม่แบบวัตถุ

Result

ผลลัพธ์

Template Matching with Multiple Objects

  • ในส่วนของก่อนหน้านี้จะค้นหาภาพหน้า โดยตรวจจับแค่ 1 จุด แต่สำหรับการค้นหาแบบหลายๆจุดนั้นจะสามารถใช้ฟังก์ชั่น cv2.minMaxLoc() แต่จะไม่ให้ตำแหน่งทั้งหมดดังนั้นเราจะใช้การ thresholding โดยต่อไปนี้จะเป็นยกตัวอย่างแบบง่ายๆ

CODE Example

import cv2
import numpy as np
from matplotlib import pyplot as plt

img_rgb = cv2.imread('Calcedit.jpg')
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
template = cv2.imread('Calcedit_tem.jpg',0)
w, h = template.shape[::-1]

res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)
threshold = 0.8
loc = np.where( res >= threshold)
for pt in zip(*loc[::-1]):
   cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0,0,255), 2)

cv2.imwrite('res.png',img_rgb)

Result

มีข้อผิดพลาดในการสร้างรูปย่อ: ไฟล์สูญหาย
ผลลัพธ์