单人跟踪视频序列

时间:2012-02-02 15:04:45

标签: image-processing opencv computer-vision tracking

作为论文工作的一部分,我需要构建一个人类跟踪程序,从视频或图像序列开始,如KTHIXMAS数据集,并假设:

  • 照明保持不变
  • 场景中只出现一个人

该程序需要实时执行

我搜索了很多但仍然无法找到一个好的解决方案。

请建议一个合适的方法或现有的方案。

4 个答案:

答案 0 :(得分:11)

案例1 - 如果相机静止

如果相机是静态的,跟踪一个人非常简单。

您可以应用一种称为背景减法的方法。

  1. 在这里,为了获得更好的效果,您需要来自相机的裸图像,其中没有人。这是背景。 (它也可以完成,即使你没有这个背景图像。但如果你有它,那就更好了。如果没有背景图像,我会告诉你该做什么)

  2. 现在从相机开始捕捉。拍摄第一帧,将两者都转换为灰度,平滑两张图像以避免噪点。

  3. 从帧中减去背景图像。

  4. 如果框架背景图像没有变化(即没有人),则会出现黑色图像(当然会有一些噪点,我们可以将其删除)。如果有变化,即人走进画面,你会得到一个人和背景为黑色的图像。

  5. 现在将图像阈值设为合适的值。

  6. 施加一些侵蚀以去除小颗粒噪音。之后进行扩张。

  7. 现在找到轮廓。最有可能会有一个轮廓,即人。

  8. 查找质心或您想要跟踪此人的任何内容。

  9. 现在假设您没有背景图片,可以使用cvRunningAvg功能找到它。它会从您用于跟踪的视频中查找帧的运行平均值。但你可以明白,如果你得到背景图像,第一种方法会更好。

    使用cvRunningAvg。

    的上述方法的

    Here is the implementation

    案例2 - 相机不静止

    这里背景减法不会给出好的结果,因为你无法获得固定的背景。

    然后OpenCV附带一个人体检测样本样本。使用它。

    这是文件:peopledetect.cpp

    我还建议您访问此SOF,它处理几乎相同的问题:How can I detect and track people using OpenCV?

答案 1 :(得分:3)

一种可能的解决方案是使用特征点跟踪算法。 看看这本书: Laganiere Robert - OpenCV 2计算机视觉应用程序设计手册 - 2011 页。 266

本书已经使用opencv实现了完整算法。

答案 2 :(得分:3)

上述方法:简单的帧差异,然后扩张和侵蚀将起作用,如果是简单的干净场景,只有行走的人的运动,绝对没有其他运动或光照变化。此外,您每帧都会进行检测,而不是跟踪。在这种特定情况下,跟踪它们可能并不困难。移动方向和速度:你可以在不同的图像上运行Lucas Kanade。

在它的核心,你需要的是一个人物探测器,跟着一个跟踪器。跟踪器可以是基于点的(Lucas Kanade或Horn和Schunck),也可以使用卡尔曼滤波器或任何类型的跟踪来获取边界框或斑点。

许多视力问题都是不适当的,一些结构/约束,有助于更快地解决它。很少问的问题是这些:

  1. 相机是否移动:不是很容易,是的:更难,确切地说是有效取决于其他条件。
  2. 除了人
  3. 外,场景是否恒定
  4. 此人在大多数时间面向/面向前方:使用中提琴或使用中提琴(使用Haar或类似功能进行训练)进行侧面检测。
  5. 你需要它在空间上是否准确,边界框是否会这样做,或者你需要一个轮廓:边界框:只需在SAD(Abs差异之和)附近搜索(智能:))。轮廓:更坚韧,使用基于轮廓的跟踪器。
  6. 您是否需要“tracklet”或仅需要每个帧的人员位置,时间准确度?
  7. 我们在这里谈到了什么决议,因为你需要实时:
  8. 场景是否像序列一样稀疏,还是会混乱?
  9. 序列中还有其他动作吗?
  10. 离线还是在线?

答案 3 :(得分:2)

如果您使用.NET开发,则可以使用Aforge.NET框架。

http://www.aforgenet.com/

我是论坛的常客,我似乎记得有很多人用它来跟踪人。

我还将该框架用于其他非相关目的,可以说我强烈推荐它的易用性和强大的功能。