我是计算机视觉领域的新手,目前我正在做一个比较两幅图像的项目,看看是否有匹配。我读到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/8346440AKAZE通常比KAZE检测到更多的特征。
KAZE检测到最少数量的特征点。
和
SIFT是最准确的特征检测器描述符尺度、旋转和仿射变化(总体)。
BRISK在scale和旋转变化。
AKAZE在图像旋转和缩放方面的精度与BRISK相当变化范围在40%到400%之间。超出这个范围,它的精度就不高了减少。
和
发现SIFT和BRISK的总体准确性最高几何变换类型和SIFT被总结为最多精确算法。
我建议如果你正在寻找整体精度和更高的特征点,如果计算成本不是一个因素,坚持使用SIFT。
很抱歉在7年后才回复这个问题。