2

我必须创建一个 Android 应用程序来识别来自相机的一些对象(汽车方向盘、车轮)。我尝试使用 Haar 分类器,但没有成功,而且我的时间不多了(这是一个学校项目)。所以我决定寻找另一种方式。我为我的目标找到了一些其他方法 - ORB。我发现我应该在这个答案中做什么。我的问题是我脑子里的事情搞砸了。您能否逐步回答我如何执行我给出的链接中问题的答案:

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

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

我需要尽快创建这个应用程序。请帮忙!

4

1 回答 1

6

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

  1. 如果您刚刚开始,则更容易操作和理解,并且您可以稍后进行更改。
  2. 对于 android 应用程序,您的处理能力有限,因此更多图像 = 更低 fps。

你应该看看OpenCV 教程,这些教程很有帮助。一旦你通过“OpenCV for Android SDK”部分并理解了这三个教程,你就可以很容易地添加允许你分析视频源的功能。

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

  1. 读入参考图像。
  2. 创建和使用您的 FeatureDetector、DescriptorExtractor 和 DescriptorMatcher。
  3. 使用上述方法检测关键点,然后描述关键点(前两个,不要忘记将其转换为垫子,然后再转换为灰度)。
  4. 每次从相机中获取帧时,重复步骤 3。然后比较图像中的关键点(与 2 的第三部分)。
  5. 使用结果来确定是否有匹配(如果有则在它周围画一个框或其他东西)。
  6. 获得一个新框架。

尝试使其适用于单个对象,然后再添加其他对象。您可以添加的另一件事是一开始的屏幕,允许用户选择他们想要搜索的内容。

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

于 2014-12-05T00:47:22.273 回答