OpenCv Blob /轮廓标记

问题描述:

嗨,我一直在这个工作一段时间,但还没有很好的解决方案。OpenCv Blob /轮廓标记

我正在逐帧读取视频帧,并使用背景减法' 确定有移动的区域,并使用cvFindContours()获取移动对象的矩形边界。

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

这些物体以可以重叠的方式移动,在一定的时间间隔内转动并移开。

我如何正确地标记这个人x 2。

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

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

我试图跟踪原始obj的像素颜色(然而人类非常相似,某些区域具有类似于手,腿,头发的颜色),因此不够好。

我用图像统计考虑像:

CountNonZero(), SumPixels() 平均数() Mean_StdDev() MinMaxLoc() 范数()

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

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

  • 如果两个斑点都在某个点上穿过它们的路径,那么它不确定结果是什么。
  • 如果两个斑点移动得太快,也会导致不希望的结果。

听起来很困难,特别是如果视频中有很多噪音。

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

  1. 两个人见面,然后要么改弦易辙或继续他们的标题
  2. 两个人相遇,那么只有一个人逆转过程中或继续他们的标题
  3. 两个人见面,然后一个人仍然存在,另一个以相机视角“正常”的方向行进,即,远离或朝向相机

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

考虑测量您为视频中每个帧列出的所有功能,然后绘制其结果。从中判断是否有一种方法可以匹配某个边界框中像素颜色的标准偏差,而这个边界框在穿过路径后是人类所在的边界框。

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

背景减法可以是检测对象的好方法。如果您需要改善背景扣除结果,则可以考虑使用MRF。据推测,你可以根据blob的大小判断何时存在单个对象以及何时合并了两个blob。如果轨迹在合并斑点期间不会快速变化,则可以执行Kalman tracking并使用一些heuristics来消除之后的斑点歧义。

即使两个对象之间的颜色相似,也可以考虑尝试使用mean shift tracker。有可能你需要做一些particle filtering来跟踪关于谁是谁的多个假设。

还有一些更复杂的技术叫layered tracking。还有一些最近的作品Jojic and FreyWinnZhou and Tao,以及其他人。大多数这些技术都具有非常强大的假设和/或需要大量工作才能正确实施。

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

+0

很少有链接被破坏,请你更新! – 2vision2 2013-07-04 09:07:54