2012-04-26 77 views
1

对视频进行光流(lk)后,根据这些数据找到对象并追踪它们的最佳方式是什么?opencv如何追踪光流后的物体?

这可能听起来很不明显,但我希望能够定义清楚的物体周围的轮廓,所以如果它是一个奇怪的形状瓶或某些东西能够检测到边缘。

回答

10

我不确定LK是最好的算法,因为它计算了一组稀疏角点状的运动,并且通过密集的光流结果(例如Farneback或Horn Schunck)跟踪行为通常更好。在计算完流程后,作为第一步,您可以对其标准进行阈值处理(保留运动部件),并尝试从该结果中提取连接区域。但是要注意的是,如果你没有你想跟踪的对象模型,你的任务并不容易。另一方面,如果您主要对跟踪感兴趣并且可以接受一些交互性,则可以查看camshift示例代码,了解如何根据其外观选择和跟踪图像区域。

---编辑---

如果您的相机是静态的,则使用背景减法来代替。使用OpenCV 2.4测试版,您必须在视频模块文档中查找类BackgroundSubtractor及其子类。

还要注意,光流可以是实时(或不是很远),具有良好的参数选择以及GPU实现。在Windows上,您可以使用TU Graz/Gpu4Vision group的flowlib。 OpenCV也有一些GPU密集光流,例如类gpu :: BroxOpticalFlow。

--- EDIT 2 ---

加入单像素检测到大的物体是一个任务叫做connected component labelling。有一个快速的算法,在OpenCV中实现。因此,这给你一个管道是:

  • 运动检测(像素级)--->连接的补偿。标记--->对象跟踪(添加运动信息,卡尔曼滤波的可能轨迹......)。

但是,我们将不得不停止在这里,因为我们很快就会远远超过您最初的问题;-)

+0

明白了。给我几天实施它,这听起来不错。 – 2012-04-26 10:12:16

+0

快速追踪问题:是否有比光流更快的算法来检测视频中的移动位置,以便用户不必手动选择他感兴趣的部分进行camshift? (我想知道为什么你说凸轮轴,然后safari自动更正我的拼写) – 2012-04-26 10:16:57

+0

你的答案已经超过真棒。非常感谢!但我坚持如何从背景扣除的结果中检测出物体。有什么我可以用它来连接它们吗? – 2012-04-27 13:33:07