2017-03-17 81 views
1

大家好:)我只是openCV的初学者。如何使用特征绘制对象的矩形(ORB)

我一直在试图开发使用ORB跟踪程序。 我只想围绕检测到的对象绘制矩形。

这是跟踪程序的 result部分。 '黑车'就是我想跟踪的(感兴趣的对象)。正如您所看到的,“黑色汽车”周围存在许多不必要的功能和检测到的功能。

对于绘制检测对象,我认为有2种方法。

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

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

从现在开始,我一直在使用'所有功能的中心'。但这不是我想象的有效。因为矩形在我用这种方式时被画得离“黑车”很远。

如果有与上述2种方法有关的函数或算法,请告诉我!如果你们知道更好的方式,那么上面的事情也会对我有帮助。

预先感谢您,希望你们有美好的一天:)

回答

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. 

当然有,你可以使用这个算法的每一步更先进的技术,但我会建议先从简单的方法。

1

如果你想坚持的关键点,你可以做到以下几点:

  1. 两个图像中检测和描述所有的关键点
  2. 计算关键点的匹配
  3. 计算最佳RANSAC单应
  4. 选择所有inlier作为可能来自所有非内点关键点的背景的一个对象
  5. 计算下一个最佳RANSAC单应
  6. 选择所有inlier作为另一个对象
  7. ...等等
  8. 直到太少关键点离开或没有好的单应性可以计算。

取而代之,您可以使用许多其他方法(背景扣除,概率跟踪,尺寸假设等)。总而言之,如果你期待好的结果,这不是一项微不足道的任务。

+0

我不明白这是怎么回答的问题。他没有提到两幅图像之间的匹配特征。他在谈论“黑色汽车”,就像在探测类似黑色汽车的东西。我不认为他有任何训练数据或任何可以用作他试图将测试数据与之匹配的基本事实的工作。 – m3h0w

+1

这仍然回答这个问题。您仍然可以在两张图像之间匹配关键点。基本上可以考虑使用滤镜移动物体(在全景图中可以看到两次)的选项来进行图像拼接,但不要删除这些物体,而只是提取它们,因为它们是所需的结果。 – Micka