如何使用特征(ORB)在对象周围绘制矩形

时间:2017-03-17 09:34:20

标签: opencv tracking orb

大家好:)我只是openCV的初学者。

我一直在尝试使用 ORB 开发跟踪程序。 我只想在检测到的物体周围绘制矩形。

这是其中的一部分 result跟踪计划。 “黑车”是我想跟踪的(感兴趣的对象)。如您所见,“黑车”周围有许多不必要的功能和检测到的功能。

为了在检测到的物体周围画画,我认为有两种方法。

1)查找特征密度:如您所见,“黑车”周围的功能比其他功能更密集。所以...如果我可以计算它们的密度,(可能是“黑车”周围的区域密度最大......?)那么我可以更容易地绘制矩形。

2)删除不必要的功能:如果只剩下必要的功能,我可以计算它们的中心。

从现在开始,我一直在使用'所有功能的中心'。但它没有我想象的那么有效。因为当我用这种方式时,矩形被绘制得远离'黑车'。

如果有与上述两种方式相关的功能或算法,请告诉我!如果你们知道更好的方式,那么它对我来说也很有帮助。

提前谢谢你,希望你们有美好的一天:)

2 个答案:

答案 0 :(得分:1)

如果您想坚持关键点,可以执行以下操作:

  1. 检测并描述两个图像中的所有关键点
  2. 计算关键点的匹配
  3. 计算最佳RANSAC单应性
  4. 选择所有inlier作为一个可能是背景的对象
  5. 来自所有非内部关键点的
  6. 计算下一个最好的RANSAC单应性
  7. 选择所有inlier作为另一个对象
  8. ......等等
  9. 直到关键点太少或者无法计算出良好的单应性。
  10. 相反或者另外,您可以使用许多其他方法(背景减法,概率跟踪,大小假设等)。总而言之,如果你期望取得好成绩,这不是一项微不足道的任务。

答案 1 :(得分:0)

首先回答你的问题 - 使用功能来检测一个对象,你需要知道你正在尝试将它们匹配,或者确保该对象总是会呈现比背景更多的功能。在你的情况下,情况都不是这样。

当您开始使用真实数据时,使用自己的功能来确定汽车的位置将被证明是非常不可靠的,因为背景可能被证明是嘈杂的并且包含比汽车本身更多的角落。

首先:尽快收集真实数据。使用您提供的假图像开发算法是没有意义的,特别是因为您没有使用OpenCV的经验并且无法预见未来的问题。

其次:开发视频与开发静态图像有点不同。查看this tutorial,因为它可能对您的情况非常有用。

对于您的问题,最基本的管道看起来像这样:

perform some preprocessing (blurring for example)
calculate difference between 2 consecutive frames, to obtain the moving objects; 
perform some filtering and binarization; 
find contours of the objects; 
decide if any of them is a car based on shape and size; 
find out it's color; 
draw a rectangle around it if it's black.

当然,您可以在此算法的每个步骤中使用更多高级技术,但我建议从简单的方法开始。