2

我可以使用下面显示的代码找到匹配的功能。我想计算两个图像之间的百分比相似度。我是 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);

是否有任何其他可用的图书馆服务于同样的目的?

4

2 回答 2

2

我不认为你可以通过使用特征点来计算百分比本身。但是您可以计算“相似度得分”。

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

例如,您可以简单地将您拥有的匹配项之间的汉明距离相加。您还可以使用特征点的位置:假设图像A上的特征点Ai与图像B上的对应BiAi的坐标为( Xa, Ya)Bi的坐标为(Xb, Yb)。为了使您的图像相似,您可能希望(Xa, Ya)尽可能接近(Xb, Yb)。然后分数将类似于:

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

当然,您可能希望在HammingDist或 上增加重量DistanceBetween;你需要试验。

于 2013-05-03T05:50:45.847 回答
1

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

于 2013-05-10T11:53:03.023 回答