使用OpenCV计算两个图像的百分比相似度

时间:2013-05-03 05:22:53

标签: java opencv image-processing

我可以使用bewlow显示的代码找到匹配的功能。我想计算两个图像之间的百分比相似度。我是OpenCV的新手。任何形式的帮助都将受到高度赞赏。

    FeatureDetector detector = FeatureDetector.create(FeatureDetector.ORB);
    DescriptorExtractor extractor = DescriptorExtractor
            .create(DescriptorExtractor.ORB);

    detector.detect(image1, keypoints1);
    detector.detect(image2, keypoints2);

    extractor.compute(image1, keypoints1, descriptors1);
    extractor.compute(image2, keypoints2, descriptors2);

    DescriptorMatcher matcher = DescriptorMatcher
            .create(DescriptorMatcher.BRUTEFORCE_HAMMING);

    MatOfDMatch matches = new MatOfDMatch();
    matcher.match(descriptors1, descriptors2, matches);

是否有其他图书馆可用于同一目的?

2 个答案:

答案 0 :(得分:2)

我认为您不能使用要素点计算本身的百分比。但是你可以计算出“相似度”。

首先,你想以某种方式过滤掉你所拥有的不良匹配(我会使用单应性转换来几何验证匹配)。然后,您可以建立自己的方法来计算这种“相似度”。

例如,您可以简单地将您所拥有的比赛之间的汉明距离相加。您还可以使用要素点的位置:假设图像 A 上的要素点 Ai 在图像上具有对应关系 Bi Ai 的坐标是(Xa,Ya) Bi 的坐标是(Xb,Yb)。为了使您的图像相似,您可能希望(Xa,Ya)尽可能接近(Xb,Yb)。那么得分就像是:

Score = HammingDist / DistanceBetween(Point(Xa, Ya), Point(Xb, Yb))

当然,您可能希望更加重视HammingDistDistanceBetween;你需要试验。

答案 1 :(得分:1)

我发现了两个图书馆pHashpdiff提供了我正在寻找的东西。我将评估它们的性能以及与我的代码的兼容性,并选择最好的代码。