我是计算机视觉世界的新手,目前我正在做一个项目,比较两个图像,看看是否有匹配。我读到过AKAZE的表现比SIFT更好,但我发现情况并非如此。我使用的是openCV的Java实现,我发现SIFT产生了更好的特征点,因此与AKAZE相比更好地匹配。下面是我用来检测关键点、计算描述符和查找匹配的代码:
MatOfKeyPoint objectKeyPoints1 = new MatOfKeyPoint();
MatOfKeyPoint objectKeyPoints2 = new MatOfKeyPoint();
FeatureDetector featureDetector1 = FeatureDetector.create(FeatureDetector.SIFT);
FeatureDetector featureDetector2 = FeatureDetector.create(FeatureDetector.SIFT);
featureDetector1.detect(image1, objectKeyPoints1);
featureDetector2.detect(image2, objectKeyPoints2);
DescriptorExtractor descriptorExtractor = DescriptorExtractor.create(DescriptorExtractor.SIFT);
MatOfKeyPoint objectDescriptors1 = new MatOfKeyPoint();
descriptorExtractor.compute(image1, objectKeyPoints1, objectDescriptors1);
MatOfKeyPoint objectDescriptors2 = new MatOfKeyPoint();
descriptorExtractor.compute(image2, objectKeyPoints2, objectDescriptors2);
MatOfDMatch mtd=new MatOfDMatch();
DescriptorMatcher descriptorMatcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE)
descriptorMatcher.match(objectDescriptors1,objectDescriptors2 , mtd);
AKAZE的代码也是一样的,只是我在代码中用AKAZE代替了SIFT。在900个关键点中,我得到了大约178个SIFT匹配,但只有10-20个AKAZE匹配。
您能否帮助我确定此问题的可能原因?这可能与openCV的Java Package 器有关吗?
谢谢
1条答案
按热度按时间yi0zb3m41#
IEEE的这篇分析论文表明,SIFT的性能优于KAZE和AKAZE。
https://ieeexplore.ieee.org/document/8346440
AKAZE通常比KAZE检测更多的特征。
KAZE检测到的特征点数量最少。
和/或
SIFT被发现是最准确的特征检测器描述符的规模,旋转和仿射变化(整体)。
BRISK在缩放和旋转变化的精度方面处于第二位。
AKAZE的准确度与BRISK在40%到400%范围内的图像旋转和缩放变化相当。超过这个范围,它的准确度就会下降。
和/或
SIFT和BRISK的整体精度被认为是最高的所有类型的几何变换和SIFT的结论是最准确的算法。
我建议,如果你正在寻找整体准确性和更高的特征点,坚持使用SIFT,如果计算成本不是一个因素。
很抱歉在你发布问题7年后回答这个问题。