Java 使用OpenCV计算两幅图像的相似度百分比
我可以使用下面显示的代码找到匹配的功能。我想计算两幅图像之间的相似度百分比。我是OpenCV的新手。我们将非常感谢您的任何帮助Java 使用OpenCV计算两幅图像的相似度百分比,java,opencv,image-processing,Java,Opencv,Image Processing,我可以使用下面显示的代码找到匹配的功能。我想计算两幅图像之间的相似度百分比。我是OpenCV的新手。我们将非常感谢您的任何帮助 FeatureDetector detector = FeatureDetector.create(FeatureDetector.ORB); DescriptorExtractor extractor = DescriptorExtractor .create(DescriptorExtractor.ORB); det
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);
是否有其他库可用于相同的目的?我认为您无法通过使用特征点来计算百分比本身。但你可以计算“相似性分数” 首先,您希望以某种方式过滤掉不好的匹配(我将使用单应变换从几何角度验证匹配)。然后,您可以建立自己的计算“相似性分数”的方法 例如,您可以简单地求和已匹配项之间的汉明距离。也可以使用特征点的位置:假设图像a上的特征点Ai在图像B上有对应的Bi。Ai的坐标是(Xa,Ya),Bi的坐标是(Xb,Yb)。为了使图像相似,您可能希望(Xa,Ya)尽可能接近(Xb,Yb)。然后,分数将类似于:
Score = HammingDist / DistanceBetween(Point(Xa, Ya), Point(Xb, Yb))
当然,您可能希望在
HammingDist
或DistanceBetween
上增加权重;你需要进行实验。我找到了两个库,提供了我想要的。我将评估它们的性能以及与我的代码的兼容性,并选择最好的。我的回答有帮助吗?你能找到更好的方法吗?我是图像处理的新手,所以理解某些术语需要时间。然而,我需要在探索其他库(如pHash和pdiff)时实现这一点。@SorryBoss:你能告诉我你是如何比较图像的吗?我也在尝试同样的方法,你能给出一些Android的线索或代码吗?我知道那是几年前的事了,但是我可以问一下你解决了你的问题吗?我需要的正是你需要的。你能分享你的进展吗?嘿,ftb,我想不起来我们最终使用了什么,不幸的是,我再也无法访问该代码库了