【问题标题】:OpenCv Blob/Contour labelingOpenCv Blob/轮廓标记
【发布时间】:2010-09-27 20:21:36
【问题描述】:

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

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

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

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

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

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

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

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

我正在考虑使用 Image Statistic 之类的:

CountNonZero(), SumPixels() 意思是() 平均标准差 () 最小最大位置 () 范数()

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

【问题讨论】:

    标签: opencv blob contour background-subtraction


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • @2vision2:感谢您指出损坏的链接。我已经更新了它们。
    【解决方案2】:

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

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      • 如果两个 blob 在某个点交叉,则不确定结果是什么。
      • 如果两个 blob 移动得太快,也会导致不需要的结果。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-28
        • 1970-01-01
        • 2014-07-12
        • 2015-07-24
        • 2017-05-15
        • 2016-10-23
        相关资源
        最近更新 更多