4

嗨,我已经为此工作了一段时间,但还没有好的解决方案。

我正在逐帧阅读视频并使用背景减法来识别存在移动的区域并使用 cvFindContours() 来获取移动对象的矩形边界。

假设程序保持简单,则只能有 2 个人。

这些物体以它们可以重叠的方式移动,并以一定的间隔转动和移开。

我怎样才能正确标记这个人 x 2。

cvFindContour 可以随机返回边界。对于 Frame1,Frame2,Frame3....FrameN

我最初可以比较矩形边界质心以正确标记人类。一旦人类重叠并离开,这种方法就会失败。

我试图跟踪原始 obj 的像素颜色(但是人类非常相似,并且某些区域具有相似的颜色,例如手、腿、头发),因此不够好。

我正在考虑使用 Image Statistic,例如:

CountNonZero(), SumPixels() Mean() Mean_StdDev () MinMaxLoc () Norm ()

以唯一区分这两个对象。我相信这将是一个更好的方法。

4

3 回答 3

16

这是一个难题,任何解决方案都不会完美。计算机视觉被戏称为“AI-complete”学科:如果你解决了计算机视觉并且你已经解决了所有的人工智能。

背景减法是检测物体的好方法。如果您需要改善背景减除结果,您可以考虑使用MRF。据推测,您可以根据 blob 的大小判断何时存在单个对象以及两个 blob 何时合并。如果在 blob 合并期间轨迹没有快速变化,您可以进行卡尔曼跟踪并在之后使用一些启发式方法来消除 blob 的歧义。

即使两个对象之间的颜色相似,您也可以考虑尝试使用均值偏移跟踪器。您可能需要进行一些粒子过滤来跟踪关于谁是谁的多个假设。

还有一些更复杂的技术称为分层跟踪Jojic 和 FreyWinnZhou 和 Tao以及其他人最近的一些作品。这些技术中的大多数都带有非常强的假设和/或需要大量工作才能正确实施。

如果您总体上对这个主题感兴趣,我强烈建议您参加计算机视觉课程和/或阅读Ponce 和 Forsyth等教科书。

于 2008-12-20T15:09:12.187 回答
1

您可以尝试记住每一帧的一个角(例如左上角)。然后,当您收到新的一组帧时,您将它们的角与之前保存的角的距离进行比较。这当然不是完美的解决方案。

  • 如果两个 blob 在某个时间点交叉其路径,则不确定其结果是什么。
  • 如果两个 blob 移动得太快,也会导致不需要的结果。
于 2008-12-20T11:57:41.323 回答
1

听起来很难,尤其是在视频中有很多噪音的情况下。

也许确定两个人会互动的不同情况。一些例子:

  1. 两个人相遇,然后改变方向或继续前进
  2. 两个人相遇,然后只有一个人改变方向或继续前进
  3. 两个人相遇,然后一个人留下来,另一个人沿着与相机视图“正常”的方向行进,即远离或朝向相机

计算机视觉教科书可以帮助确定其他情况。

考虑测量您为视频中的每一帧列出的所有这些函数,然后绘制它们的结果。从中确定是否有一种方法可以匹配边界框中像素颜色的标准偏差之类的东西,在他们穿过路径之后,人类所在的边界框中。

于 2008-12-20T13:21:48.253 回答