OpenCV特征检测算法的比较

关于OpenCV的学习,敬请关注专栏一步步学习OpenCV2


=================分割线=================


原文地址:https://computer-vision-talks.com/post/2011-07-13-comparison-of-the-opencv-feature-detection-algorithms/


=================分割线=================

原文发布时间:2011年7月13日

我决定更新这个比较报告,因为发生了很多事情:OpenCV 2.3.1已经发布,并且引入了新型的特征检测器(ORB特征检测器)。ORB是Oriented-BRIEF的缩写,并且使用修改来计算定向FAST检测器用于检测阶段和简称为描述符提取。在本文中,我将使用最新的OpenCV build(2.3.1,修订版号:6016)在相同的测试用例(相同的硬件和输入图像)上测试新手。

=================分割线=================

测试图像

   

估算标准

  • 每帧速度 - 以单位毫秒为单位检测单帧的绝对总时间。
  • 每个关键点的速度 - 单个关键点的检测时间。评估为总时间除以检测到的关键点的数量。帮助我们估计实际检测的便宜程度。
  • 跟踪功能的百分比 - 从原始图像到已转换图像的成功跟踪功能的百分比在理想的情况下,这个标记的价值应该接近100%。
  • 平均跟踪误差 - 这是跟踪特征位置与其在变换帧上的计算位置之间的平均距离。该标记指示特征检测的准确性。较大的值表示帧之间大量的误报跟踪或特征点“漂移”。
  • 特征计数偏差 - 参考帧上的关键点数与经过转换的帧上检测到的关键点数之差除以参考帧上的关键点数。帮助估计轻微的曝光变化如何影响特征检测。
  • 平均检测误差 - 原始和变换帧上最近的关键点之间的平均距离。

=================分割线=================

结果

对于每个图像,我获得每个检测算法的五个测量。然后我计算每种测量的平均值,结果如下:


图1 - 检测到的关键点的平均数量

从图1中可以看到,FAST检测器像往常一样找到很多特征点。您可以通过调整检测阈值来控制检测点的数量。其他检测器检测的特征点少得多,但质量明显更好。ORB检测器似乎具有固定的最大检测数量,因为如果在每个图像上找到702个特征。


图2 - 跟踪功能的百分比

跟踪测试看起来非常奇怪 - 工作结果显示MSER检测器是可以预期的,因为它返回稳定极值区域的中心。但GoodFeaturesToTrack探测器与其他类型的探测器相比,也显示出非常糟糕的结果。这是令人讨厌的,因为我希望这个探测器是最好的,因为它的名字是“好功能追踪”。但这里是事实 - 追踪的最好结果可以用SURF,STAR和新的ORB特征检测器来实现。


图3 - 平均检测时间

像往常一样 - SIFT和SURF非常缓慢。其他探测器相对较快。使用ORB检测器进行特征检测对于512x512图像需要大约25 ms,这是很好的,因为它可以计算特征方向。


图4 - 平均特征点漂移

最后,我们通过测量跟踪点的实际位置与预先计算的预期位置之间的距离来估算跟踪的质量。我非常惊讶的ORB探测器显示的结果 - 它显示最小的漂移!这将在追踪长图像序列的同时降低系统误差。非常好!

==========================分割线=========================

与以前的结果比较

当我得到新的结果时,我决定将它们与之前的测试结果进行比较以防万一。我知道Willow车库里的人在feature2d模块上做了一些改变。我很好奇他们究竟做了什么。 

最重要的是,我对表演很好奇。从图5中可以看出,确实发生了一些变化。与2.2版本相比,SURF探测器变得非常慢,但GoodFeaturesToTrack变得更快。


图5 - 检测时间的变化

在图6中,您可以看到一个特征点的相同性能差异测试。这显示了在一个特征方面的昂贵检测。


图6 - 每个特征点的检测时间的改变

OpenCV 2.3.1中的SURF检测器变得比2.2版慢得多!我无法弄清楚这种性能下降的原因,因为我使用了与2.2测试相同的编译器设置。无论如何,这也是一个好消息 - GoodFeaturesToTrack探测器变得更快一点。


图6 - 特征点漂移的变化

在检测程序中似乎有些改变,因为对于每种类型的检测器,平均像素漂移是不同的。不知道这样的结果是什么原因。

========================分割线====================

而不是结论

我真的希望看到自动化构建系统完成的每个新的OpenCV版本的自动化回归测试。这将为开发者提供很大帮助,因为他们可以跟踪算法如何改变他们的行为以及为什么。

==========================END====================

猜你喜欢

转载自blog.csdn.net/sinat_36264666/article/details/78853561