作为论文工作的一部分,我需要构建一个人类跟踪程序,从视频或图像序列开始,如KTH
或IXMAS
数据集,并假设:
该程序需要实时执行
我搜索了很多但仍然无法找到一个好的解决方案。
请建议一个合适的方法或现有的方案。
答案 0 :(得分:11)
案例1 - 如果相机静止
如果相机是静态的,跟踪一个人非常简单。
您可以应用一种称为背景减法的方法。
在这里,为了获得更好的效果,您需要来自相机的裸图像,其中没有人。这是背景。 (它也可以完成,即使你没有这个背景图像。但如果你有它,那就更好了。如果没有背景图像,我会告诉你该做什么)
现在从相机开始捕捉。拍摄第一帧,将两者都转换为灰度,平滑两张图像以避免噪点。
从帧中减去背景图像。
如果框架背景图像没有变化(即没有人),则会出现黑色图像(当然会有一些噪点,我们可以将其删除)。如果有变化,即人走进画面,你会得到一个人和背景为黑色的图像。
现在将图像阈值设为合适的值。
施加一些侵蚀以去除小颗粒噪音。之后进行扩张。
现在找到轮廓。最有可能会有一个轮廓,即人。
查找质心或您想要跟踪此人的任何内容。
现在假设您没有背景图片,可以使用cvRunningAvg
功能找到它。它会从您用于跟踪的视频中查找帧的运行平均值。但你可以明白,如果你得到背景图像,第一种方法会更好。
案例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),也可以使用卡尔曼滤波器或任何类型的跟踪来获取边界框或斑点。
许多视力问题都是不适当的,一些结构/约束,有助于更快地解决它。很少问的问题是这些:
答案 3 :(得分:2)
如果您使用.NET开发,则可以使用Aforge.NET框架。
我是论坛的常客,我似乎记得有很多人用它来跟踪人。
我还将该框架用于其他非相关目的,可以说我强烈推荐它的易用性和强大的功能。