使用ORB逐步检测对象

时间:2014-12-05 00:12:00

标签: android opencv kdtree orb opencv4android

我必须创建一个能够识别相机中某些物体(汽车方向盘,车轮)的Android应用程序。我尝试使用哈尔分类器,但没有成功,我的时间不多了(这是一个学校项目)。所以我决定寻找另一种方式。我为我的目标找到了一些其他方法 - ORB。我发现我应该在this answer做些什么。我的问题是事情搞得一团糟。你能否给我一步一步的答案,告诉我如何在我给出的链接中实现问题的答案:

从提取特征点到训练KD树并将其用于摄像机的每一帧。

奖金问题: 你能给出一个特征点的定义吗?这是我无法理解的。 使用ORB会慢慢检测吗?我知道OpenCV可以在原生android中使用,不会让事情变得更快吗?

我需要尽快创建此应用。请帮忙!

1 个答案:

答案 0 :(得分:6)

我目前正在开发类似的应用程序。我建议首先使用单个参考图像进行处理,原因有两个:

  1. 如果你刚刚开始做起来更容易理解,你可以稍后更改。
  2. 对于Android应用程序,您的处理能力有限,因此更多图像=更低的fps。
  3. 你应该看一下非常有用的OpenCV tutorials。一旦您浏览了“OpenCV for Android SDK”部分并了解了三个教程,您就可以非常轻松地添加允许您分析视频源的功能。

    制作应用时我建议遵循的基本逻辑路径是:

    1. 阅读参考图片。
    2. 创建并使用FeatureDetector,DescriptorExtractor和DescriptorMatcher。
    3. 使用上述方法检测关键点,然后描述关键点(前两个,不要忘记将其转换为垫子然后再转换为灰度)。
    4. 每次从相机中获取一帧时,重复步骤3.然后比较图像中的关键点(使用2的第三部分。)。
    5. 使用结果确定是否匹配(如果有匹配则在其周围画一个框)。
    6. 获取新框架。
    7. 尝试使其适用于单个对象,然后再添加其他对象。您可以添加的另一件事是一开始的屏幕,允许用户选择他们想要搜索的内容。

      ORB也相当快,特别是与SIFT和SURF相比。我在HTC One上获得了大约3fps的单个参考图像。