【问题标题】:Calculate percentage similarity of two images using OpenCV使用 OpenCV 计算两幅图像的百分比相似度
【发布时间】:2018-05-07 21:33:48
【问题描述】:

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

是否有其他可用的库用于相同目的?

【问题讨论】:

  • 我的回答有帮助吗?你能找到更好的方法吗?
  • 我对图像处理有点陌生,所以理解某些术语需要时间。然而,当我探索 pHash 和 pdiff 等其他库时,我需要实现这一点。
  • @SorryBoss:你能告诉我你是怎么做图像比较的吗?我也在尝试同样的方法,你能在 android 中给出一些线索或代码吗

标签: java opencv image-processing


【解决方案1】:

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

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

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

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

当然,您可能希望更重视HammingDistDistanceBetween;你需要尝试一下。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我知道那是几年前的事了,但请问您解决了您的问题吗?我需要的正是你所需要的。你能分享你的进步吗?
    • 嘿 ftb,我不记得我们最终使用了什么,不幸的是,我无法再访问该代码库了
    猜你喜欢
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 2018-03-08
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 2023-04-03
    • 2012-06-16
    相关资源
    最近更新 更多