用ORB检查重复的图像

时间:2016-01-28 10:29:27

标签: python-2.7 opencv opencv3.0 orb

目前我正在检查重复的图像,所以我正在使用ORB,第一部分几乎完成,我有两个图像的描述符向量,现在作为第二部分,我想知道我们如何计算使用汉明距离得分,以及说这些是重复的门槛应该是什么

    img1 = gray_image15
    img2 = gray_image25
    # Initiate STAR detector
    orb = cv2.ORB_create() 
    # find the keypoints with ORB
    kp1 = orb.detect(img1,None)
    kp2 = orb.detect(img2,None)
    # compute the descriptors with ORB
    kp1, des1 = orb.compute(img1, kp1)
    kp2, des2 = orb.compute(img2, kp2)

    matcher = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
    matches = matcher.match(des1, des2)
    # Sort them in the order of their distance.
    matches = sorted(matches, key = lambda x:x.distance)

我只想知道这个过程的下一步,以便最终我可以打印重复的是或否。我正在使用opencv3.0.0和python 2.7

1 个答案:

答案 0 :(得分:2)

  • 获得描述符后,您可以使用词袋模型聚类参考图像的描述符,即构建词汇表(视觉词)。
  • 然后将另一张图像的描述符投射到此词汇表上。
  • 然后你可以获得一个直方图,显示两个图像中每个视觉词的分布。
  • 使用直方图比较技术比较这两个直方图,并使用阈值来检测重复项。例如,如果您使用Bhattacharyya距离,则较低的值意味着匹配良好。

我没有这方面的python实现,但你可以在c ++ here中找到类似的东西。