টেমপ্লেট ম্যাচিং হল একটি কৌশল, যার মাধ্যমে একটি প্যাচ বা টেমপ্লেট একটি বাস্তব চিত্র থেকে মেলানো যায়। এটি মূলত একটি প্যাটার্ন ম্যাচিং মেকানিজম।
পাইথনে OpenCV মডিউল আছে। OpenCV ব্যবহার করে, আমরা সহজেই মিল খুঁজে পেতে পারি। তাই এই সমস্যায়, OpenVC টেমপ্লেট ম্যাচিং কৌশল ব্যবহার করা হয়।
OpenCV কার্যকারিতা ব্যবহার করতে, আমাদের pip ব্যবহার করে সেগুলি ডাউনলোড করতে হবে .
sudo pip3 install opencv-python
টেমপ্লেট ম্যাচিং টাস্কের জন্য, একটি নির্ভুলতা ফ্যাক্টর আছে, এই ফ্যাক্টরটি থ্রেশহোল্ড হিসাবে পরিচিত। উদাহরণ হিসাবে, আমরা বলতে পারি যে আমরা এই টেমপ্লেট ম্যাচিং সমাধান ব্যবহার করে সহজেই মুখ শনাক্তকরণ স্কিম তৈরি করতে পারি। আমরা চোখ বা মুখের অন্য কোনো অংশের কিছু ছবি দিতে পারি, তারপর সেই ছবিগুলোকে টেমপ্লেট হিসেবে ব্যবহার করলে সহজেই মিল খুঁজে পাওয়া যায়, কিন্তু চোখের ভিন্নতা রয়েছে। তাই যদি আমরা নির্ভুলতা স্তর 50% সেট করি, তাহলে এটি নির্ভুলতা স্তর 100% থেকে ভাল সনাক্ত করবে৷ সাধারণত, বিভিন্ন ক্ষেত্রে নির্ভুলতা স্তর 80% হয়৷
টেমপ্লেট মেলানোর ধাপগুলি
-
প্রকৃত চিত্রটি নিন এবং এটিকে একটি ধূসর স্কেল ছবিতে রূপান্তর করুন৷
৷ -
ধূসর স্কেল চিত্র হিসাবে টেমপ্লেট নিন
-
টেমপ্লেটটি প্রকৃত চিত্রের উপর স্লাইড করে এবং সেই অবস্থানটি খুঁজে বের করে যেখানে নির্ভুলতার স্তর মেলে।
-
ফলাফল নির্ভুলতা স্তরের চেয়ে বেশি হলে, সেই অবস্থানটিকে সনাক্ত করা হিসাবে চিহ্নিত করুন৷
প্রথম ক্ষেত্রে ইনপুট ইমেজ এবং টেমপ্লেট হল −
প্রধান ছবি
<কেন্দ্র>
টেমপ্লেট
<কেন্দ্র>
উদাহরণ কোড
import cv2
import numpy as np
#open the main image and convert it to gray scale image
main_image = cv2.imread('main_image.png')
gray_image = cv2.cvtColor(main_image, cv2.COLOR_BGR2GRAY)
#open the template as gray scale image
template = cv2.imread('template1.png', 0)
width, height = template.shape[::-1] #get the width and height
#match the template using cv2.matchTemplate
match = cv2.matchTemplate(gray_image, template, cv2.TM_CCOEFF_NORMED)
threshold = 0.8
position = np.where(match >= threshold) #get the location of template in the image
for point in zip(*position[::-1]): #draw the rectangle around the matched template
cv2.rectangle(main_image, point, (point[0] + width, point[1] + height), (0, 204, 153), 0)
cv2.imshow('Template Found', main_image)
cv2.waitKey(0)
আউটপুট
<কেন্দ্র>
উপরের কোডটি মাল্টি-স্কেলিং সমর্থন করে না। তাই টেমপ্লেটের আকার একই না হলে, এটি সনাক্ত করা হবে না। তাই পরবর্তী অংশে, আমরা দেখব কিভাবে আমরা টেমপ্লেট সনাক্ত করতে মাল্টি-স্কেলিং বৈশিষ্ট্য ব্যবহার করতে পারি।
এই পদ্ধতিতে, প্রকৃত চিত্রটি বিভিন্ন আকারে রূপান্তরিত হয়, প্রতিবার এটি প্যাটার্নের সাথে মেলে এবং মিলগুলি সনাক্ত করার জন্য বৃহত্তম পারস্পরিক সম্পর্ক সহগ খুঁজে পায়।
এখানে আসল চিত্রটি একই, টেমপ্লেটটি এখানে -
<কেন্দ্র>
উদাহরণ কোড
import imutils
import cv2
import numpy as np
#Open template and get canny
template = cv2.imread('template3.jpg')
template = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY)
template = cv2.Canny(template, 10, 25)
(height, width) = template.shape[:2]
#open the main image and convert it to gray scale image
main_image = cv2.imread('main_image.png')
gray_image = cv2.cvtColor(main_image, cv2.COLOR_BGR2GRAY)
temp_found = None
for scale in np.linspace(0.2, 1.0, 20)[::-1]:
#resize the image and store the ratio
resized_img = imutils.resize(gray_image, width = int(gray_image.shape[1] * scale))
ratio = gray_image.shape[1] / float(resized_img.shape[1])
if resized_img.shape[0] < height or resized_img.shape[1] < width:
break
#Convert to edged image for checking
e = cv2.Canny(resized_img, 10, 25)
match = cv2.matchTemplate(e, template, cv2.TM_CCOEFF)
(_, val_max, _, loc_max) = cv2.minMaxLoc(match)
if temp_found is None or val_max>temp_found[0]:
temp_found = (val_max, loc_max, ratio)
#Get information from temp_found to compute x,y coordinate
(_, loc_max, r) = temp_found
(x_start, y_start) = (int(loc_max[0]), int(loc_max[1]))
(x_end, y_end) = (int((loc_max[0] + width)), int((loc_max[1] + height)))
#Draw rectangle around the template
cv2.rectangle(main_image, (x_start, y_start), (x_end, y_end), (153, 22, 0), 5)
cv2.imshow('Template Found', main_image)
cv2.waitKey(0)
আউটপুট
<কেন্দ্র>