I need to get the similarity score of two images, I'm using the SIFT Comparison, I've followed the tutorial Feature Matching but It's missing the score calculation. You'll find below the code That I used for the sift comparison :
import numpy as np
import cv2
from matplotlib import pyplot as plt
img1 = cv2.imread('C:/Users/Akhou/Desktop/ALTRAN Tech.jpg',0) # queryImage
img2 = cv2.imread('rect.png',0) # trainImage
# Initiate SIFT detector
sift=cv2.xfeatures2d.SIFT_create()
# find the keypoints and descriptors with SIFT
kp1, des1 = sift.detectAndCompute(img1,None)
kp2, des2 = sift.detectAndCompute(img2,None)
# FLANN parameters
FLANN_INDEX_KDTREE = 0
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))]
# ratio test as per Lowe's paper
for i,(m,n) in enumerate(matches):
if m.distance < 0.7*n.distance:
matchesMask[i]=[1,0]
draw_params = dict(matchColor = (0,255,0),
singlePointColor = (255,0,0),
matchesMask = matchesMask,
flags = 0)
img3 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,matches,None,**draw_params)
plt.imshow(img3,),plt.show()
and I also found a part of a code that calculates the score:
# Apply ratio test
good = []
for m,n in matches:
if m.distance < 0.75*n.distance:
good.append([m])
a=len(good)
print(a)
percent=(a*100)/kp1
print("{} % similarity".format(percent))
if percent >= 75.00:
print('Match Found')
break;
but when I add it to the comparison code I get this error :
percent=(a*100)/kp1
TypeError: unsupported operand type(s) for /: 'int' and 'list
Thank you