1

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

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

4

2 回答 2

12

我不确定 LK 是不是最好的算法,因为它计算一组稀疏的角状点的运动,并且跟踪通常从密集的光流结果(例如 Farneback 或 Horn Schunck)中表现得更好。在计算流程之后,作为第一步,您可以对其范数进行一些阈值处理(以保留移动部分),并尝试从该结果中提取连接区域。但请注意,如果您没有要跟踪的对象的模型,您的任务将不会轻松。

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

- - 编辑 - -

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

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

--- 编辑 2 ---

将单像素检测加入大对象是一项称为连接组件标记的任务。有一个快速算法,在 OpenCV 中实现。所以这给了你一个管道,它是:

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

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

于 2012-04-26T08:04:26.870 回答
0

您可以使用 TLD 或 CLM 进行对象跟踪(它松散地基于光流跟踪和模型学习同时进行的思想)。您可以找到以下有用的链接 https://www.gnebehay.com/tld/ https://www.gnebehay.com/cmt/

于 2017-05-01T18:39:40.883 回答