与openCV Java中的SIFT相比,AKAZE没有产生好的结果



我是计算机视觉领域的新手,目前我正在做一个比较两幅图像的项目,看看是否有匹配。我读到AKAZE比SIFT表现更好,但我发现情况并非如此。我正在使用openCV的Java实现,我发现与AKAZE相比,SIFT产生了更好的特征点,因此更好的匹配。下面是我用来检测关键点、计算描述符和查找匹配的代码:

     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匹配,但AKAZE只有10-20个匹配。

你能帮我找出这个问题可能的原因吗?这可能与openCV的Java包装器有关吗?

谢谢

这篇IEEE分析论文表明SIFT的性能优于KAZE和AKAZE。

https://ieeexplore.ieee.org/document/8346440

AKAZE通常比KAZE检测到更多的特征。

KAZE检测到最少数量的特征点。

SIFT是最准确的特征检测器描述符尺度、旋转和仿射变化(总体)。

BRISK在scale和旋转变化。

AKAZE在图像旋转和缩放方面的精度与BRISK相当变化范围在40%到400%之间。超出这个范围,它的精度就不高了减少。

发现SIFT和BRISK的总体准确性最高几何变换类型和SIFT被总结为最多精确算法。

我建议如果你正在寻找整体精度和更高的特征点,如果计算成本不是一个因素,坚持使用SIFT。

很抱歉在7年后才回复这个问题。

相关内容

  • 没有找到相关文章

最新更新