【问题标题】:Using SURF descriptors to detect multiple instances of an object. (in OpenCV)使用 SURF 描述符来检测对象的多个实例。 (在 OpenCV 中)
【发布时间】:2013-06-28 04:29:28
【问题描述】:

我正在用 OpenCV 编写一个程序,它应该检测场景中的物体,即超市中的产品。

我计划为此目的使用 SURF 描述符,但是到目前为止我发现的所有内容都与在场景中找到 1 个对象(通常使用最近邻匹配)有关,而且我完全没有发现关于检测对象在具有同一对象的多个实例的场景中(NN 显然不起作用,因为每个点的最佳匹配可能在不同的实例中)。

我还需要使用分类器,例如人工神经网络,它可能更有助于查找对象的多个实例,但是我不明白如何使用具有关键点的 ANN(或任何其他分类器)。

我应该使用 ¿64 吗?每个 SURF 点的值作为 ANN 的输入,每个,比如 5 个产品,作为输出?这意味着一个对象内的所有点(不相似)都会产生相同的输出。

我已经读到这是要走的路,但我不明白它是如何工作的,因为一个对象中的所有关键点可能(并且应该)具有不同的特征。但我想不出任何其他方法。

对不起,如果我没有很好地解释它,如果有什么不够清楚,我会尽力澄清。

【问题讨论】:

  • 因为显然不可能找到同一个对象的多个实例,所以让我问一个更简单的问题。使用 SURF 时,我应该使用什么作为 ANN 或 SVM 的训练数据?每个关键点都是训练数据?并且输出将是包含所述点的图像的标签?

标签: opencv neural-network surf


【解决方案1】:

我遇到了类似的问题。我所做的如下:

  • 使用滑动窗口。在整个图像中使用各种大小的 ROI 进行扫描。 ROI 的大小应该与预期对象的大小差不多。
  • 对于每个补丁,检测特征并进行匹配。如果检测到对象,则将主图像中的区域设置为零。
  • 转到下一个补丁并重复。

但是使用 SURF 可能会有点慢(如果你有很多 ROI 需要扫描),所以我使用了 FAST 特征检测器和 BRISK 描述符来加速这个过程。效果很好。

【讨论】:

  • 非常感谢您的回答。我想我会使用滑动窗口,但我试图避免它,因为我无法确定对象的大小。我不确定我是否理解第二品脱,您的意思是在图像中将匹配补丁的像素设置为零吗?你是如何进行比赛的?最近的邻居?你知道通过支持向量机、神经网络或其他分类器来匹配它们的方法吗?
  • 对于滑动窗口,尝试各种尺寸。对于匹配,我使用了 OpenCV2 Computer Vision Application Programming Cookbook 一书中的 RobustMatcher 类。它进行了稳健的匹配。您可以在此处获取代码:code.google.com/p/opencv-cookbook(第 9 章 > matcher.h)
  • 我不知道如何使用 NN 或 SVM,但我认为使用我提到的匹配器和一些过滤(例如,查看单应矩阵是否有意义,如果扭曲透视得到一个具有预期宽度和高度比例的合理矩形等),您可以获得很好的检测结果。
  • 好的,会尝试这样做。最后,您每次迭代移动窗口几个像素还是以等于其宽度的步长移动它?
  • 我移动的步长等于宽度的一半。就我而言,如果我在宽度上移动,有时对象会被切成两半(一个窗口中的一半对象和另一个窗口中的另一半)。因此,使用 step = width/2 可以提高检测到整个对象的机会。但它可能会有所不同,您可以调整步长值以在这种情况下获得最佳值。
猜你喜欢
  • 2011-11-09
  • 2011-06-22
  • 1970-01-01
  • 1970-01-01
  • 2012-04-16
  • 2012-06-14
  • 2014-05-07
  • 2013-04-16
  • 2013-09-05
相关资源
最近更新 更多