আপনি বৈশিষ্ট্যটির মিলটি একবার দেখে নিতে পারেন। ধারণাটি দুটি চিত্রের বৈশিষ্ট্যগুলি সন্ধান এবং তাদের সাথে মেলে। এই পদ্ধতিটি সাধারণত অন্য ছবিতে একটি টেম্পলেট (একটি লোগো বলুন) সন্ধান করতে ব্যবহৃত হয়। সংক্ষেপে একটি বৈশিষ্ট্যটিকে এমন জিনিস হিসাবে বর্ণনা করা যেতে পারে যা কোনও চিত্রে যেমন মানুষ কোণে বা খোলা জায়গাগুলিতে আকর্ষণীয় দেখায়। ফিচার সনাক্তকরণ কৌশলগুলি অনেক ধরণের সেখানে রয়েছে তবে আমার প্রস্তাবটি স্কেল-ইনগ্রেন্ট ফিচার ট্রান্সফর্ম (SIFT) বৈশিষ্ট্য সনাক্তকরণ অ্যালগরিদম হিসাবে ব্যবহার করার জন্য। SIFT চিত্রের অনুবাদ, স্কেলিং, ঘূর্ণন, আলোকসজ্জার পরিবর্তনের জন্য আংশিকভাবে আক্রমণাত্মক এবং স্থানীয় জ্যামিতিক বিকৃতিতে শক্তিশালী। এটি আপনার স্পেসিফিকেশনের সাথে মিলছে বলে মনে হচ্ছে যেখানে চিত্রগুলিতে কিছুটা আলাদা অনুপাত থাকতে পারে।
আপনার দুটি সরবরাহিত চিত্র দেওয়া, এখানে এফএলএএনএন বৈশিষ্ট্য ম্যাচার ব্যবহার করে বৈশিষ্ট্যগুলি মেলাতে চেষ্টা করা হয়েছে । দুটি চিত্র একই কিনা তা নির্ধারণ করার জন্য, আমরা এটিকে কিছু পূর্বনির্ধারিত চৌম্বকটি বেইস করতে পারি যা ডেভিড জি লো এর দ্বারা স্কেল-ইনভেরিয়েন্ট কী-পয়েন্টগুলি থেকে স্বতন্ত্র চিত্র বৈশিষ্ট্যগুলিতে বর্ণিত অনুপাত পরীক্ষায় পাস হওয়া ম্যাচের সংখ্যা ট্র্যাক করে । পরীক্ষার একটি সহজ ব্যাখ্যা হ'ল অনুপাত টেস্ট পরীক্ষা করে যদি ম্যাচগুলি অস্পষ্ট হয় এবং তা সরানো উচিত, আপনি এটিকে বহিরাগত অপসারণ কৌশল হিসাবে বিবেচনা করতে পারেন। দুটি চিত্র একই কিনা তা নির্ধারণ করতে আমরা এই পরীক্ষায় পাস হওয়া ম্যাচের সংখ্যা গণনা করতে পারি। বৈশিষ্ট্যের সাথে মেলে ফলাফলগুলি এখানে:
Matches: 42
সবুজ রেখাগুলি "ভাল ম্যাচগুলি" উপস্থাপন করে যা অনুপাত পরীক্ষায় উত্তীর্ণ হয় এমন বিন্দুগুলি সনাক্ত করা সমস্ত ম্যাচের প্রতিনিধিত্ব করে। আপনি যদি অনুপাত পরীক্ষাটি ব্যবহার না করেন তবে সমস্ত পয়েন্ট অঙ্কিত হবে। এইভাবে, আপনি কেবল সেরা মিলিত বৈশিষ্ট্যগুলি রাখার জন্য এই ফিল্টারটিকে একটি প্রান্তিক হিসাবে ব্যবহার করতে পারেন।
আমি পাইথনে এটি প্রয়োগ করেছি, আমি রেলগুলির সাথে খুব বেশি পরিচিত নই। ভাগ্য ভালো, এই সাহায্য আশা করি!
কোড
import numpy as np
import cv2
# Load images
image1 = cv2.imread('1.jpg', 0)
image2 = cv2.imread('2.jpg', 0)
# Create the sift object
sift = cv2.xfeatures2d.SIFT_create(700)
# Find keypoints and descriptors directly
kp1, des1 = sift.detectAndCompute(image2, None)
kp2, des2 = sift.detectAndCompute(image1, None)
# FLANN parameters
FLANN_INDEX_KDTREE = 1
index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)
search_params = dict(checks=50) # or pass empty dictionary
flann = cv2.FlannBasedMatcher(index_params,search_params)
matches = flann.knnMatch(des1,des2,k=2)
# Need to draw only good matches, so create a mask
matchesMask = [[0,0] for i in range(len(matches))]
count = 0
# Ratio test as per Lowe's paper (0.7)
# Modify to change threshold
for i,(m,n) in enumerate(matches):
if m.distance < 0.15*n.distance:
count += 1
matchesMask[i]=[1,0]
# Draw lines
draw_params = dict(matchColor = (0,255,0),
# singlePointColor = (255,0,0),
matchesMask = matchesMask,
flags = 0)
# Display the matches
result = cv2.drawMatchesKnn(image2,kp1,image1,kp2,matches,None,**draw_params)
print('Matches:', count)
cv2.imshow('result', result)
cv2.waitKey()
compare
কমান্ড লাইন সরঞ্জামটিতে একটি-subimage-search
সুইচ রয়েছে।