opencv如何在光流后跟踪物体?

时间:2012-04-26 07:56:44

标签: opencv

在视频上进行光流(lk)后,根据这些数据找到对象并跟踪它们的最佳方法是什么?

这可能听起来非常苛刻,但我希望能够在物体周围定义清晰的轮廓,所以如果它是一个奇怪形状的瓶子或能够检测到边缘的东西。

2 个答案:

答案 0 :(得分:11)

我不确定LK是最好的算法,因为它计算稀疏角点类的运动,并且跟踪通常在密集的光流结果(例如Farneback或Horn Schunck)中表现得更好。计算流程后,作为第一步,您可以对其规范进行一些阈值处理(以保留运动部件),并尝试从此结果中提取连接区域。但是要注意,如果你没有想要跟踪的对象模型,那么你的任务就不容易了。

另一方面,如果您主要对跟踪感兴趣并且可以接受一些交互性,则可以查看camshift示例代码,以了解如何根据图像区域的外观选择和跟踪图像区域。

---编辑---

如果您的相机是静态的,请改用背景减法。使用OpenCV 2.4 beta,您必须在视频模块文档中查找BackgroundSubtractor类及其子类。

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

---编辑2 ---

将单像素检测加入大对象是一项名为connected component labelling的任务。在OpenCV中实现了一种快速算法。所以这给你一个管道:

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

但是我们必须停在这里,因为我们很快就会超出你最初问题的范围; - )

答案 1 :(得分:0)

您可以使用TLD或CLM进行对象跟踪(它主要基于光流跟踪和模型学习的概念)。 您可以找到以下链接 https://www.gnebehay.com/tld/ https://www.gnebehay.com/cmt/