2

I'm currently using the SIFT features to find a measure of similarity between images. But I want to add more features to it so that the similarity measure can be improved. Right now, for a similar image it shows a value for len(good) around 500 and for an image of a board game and a dog the value is around 275. What are some other features that I could look into, maybe global features? And how do I add it with SIFT?

   def feature_matching():

    img1 = cv2.imread('img1.jpeg', 0)          # queryImage

    img2 = cv2.imread('img2.jpeg', 0)

    # Initiate SIFT detector
    sift = cv2.SIFT()

    # find the keypoints and descriptors with SIFT
    kp1, des1 = sift.detectAndCompute(img1,None)
    kp2, des2 = sift.detectAndCompute(img2,None)

    # BFMatcher with default params
    bf = cv2.BFMatcher()
    matches = bf.knnMatch(des1,des2, k=2)

    # Apply ratio test
    good = []
    for m,n in matches:
        if m.distance < 0.75*n.distance:
            good.append(m)

    print(len(good))


    #gray1 = cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)
    #gray2 = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)
    # cv2.drawMatchesKnn expects list of lists as matches.
    img3 = drawMatches(img1,kp1,img2,kp2,good)
akrama81
  • 341
  • 1
  • 7
  • 18

1 Answers1

0

You could also try cross check matching as explained here in C++. In python, you just need to change the following line:

bf = cv2.BFMatcher(cv2.NORM_L2, crossCheck=True)
xiawi
  • 1,772
  • 4
  • 19
  • 21