OpenCv Blob / Contour标签

时间:2008-12-20 11:47:04

标签: opencv blob contour background-subtraction

嗨,我一直在研究这个问题,但却没有很好的解决方案。

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

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

这些物体以可重叠的方式移动,以特定间隔转弯并移开。

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

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

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

我试图跟踪原始物体的像素颜色(但人类非常相似,某些区域的颜色相似,如手,腿,头发)因此不够好。

我正在考虑使用Image Statistic:

CountNonZero(), SumPixels() 意思() Mean_StdDev() MinMaxLoc() Norm()

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

3 个答案:

答案 0 :(得分:15)

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

背景减法可以是检测物体的好方法。如果您需要改进背景减法结果,可以考虑使用MRF。据推测,您可以根据blob的大小判断何时存在单个对象以及两个blob何时合并。如果在合并斑点的时间内轨迹没有快速变化,您可以Kalman tracking并使用一些heuristics来消除斑点的消歧。

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

还有一些更复杂的技术称为layered trackingJojic and FreyWinnZhou and Tao以及其他人最近开展了一些工作。大多数这些技术都有很强的假设和/或需要做很多工作才能正确实现。

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

答案 1 :(得分:1)

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

  • 如果两个blob在某个时刻交叉路径,则不确定结果是什么。
  • 如果两个blob移动太快,也会导致不必要的结果。

答案 2 :(得分:1)

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

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

  1. 两个人相遇,然后是逆转或继续前进
  2. 两个人见面,然后只有一个人逆转过程或继续着手
  3. 两个人相遇,然后一个人类遗骸,另一个人朝着相机视线“正常”的方向行进,即离开或朝向相机
  4. 计算机视觉教科书可以帮助确定其他案例。

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