代码之家  ›  专栏  ›  技术社区  ›  nico

自动跟踪算法

  •  7
  • nico  · 技术社区  · 15 年前

    我想写一篇 简单的 跟踪程序跟踪电影上的一些点。

    基本上我有一系列100帧长的电影,在黑暗的背景上显示一些亮点。 我每帧有大约100-150个点,它们在整个电影过程中移动。我想跟踪他们,所以我正在寻找一些有效的(但可能不会过度杀戮)程序来实现这一点。

    更多信息:

    • 这些斑点是一些。5x5)像素大小
    • 运动不大。一个点通常不会从其原始位置移动超过5-10像素。运动通常是平稳的。
    • 这些斑点的“形状”通常是固定的,它们不会增长或收缩,但随着电影的发展,它们会变得不那么明亮。
    • 这些斑点不会朝特定的方向移动。它们可以左右移动
    • 用户将在每个点周围选择一个区域,然后跟踪该区域,因此我不需要自动查找点。

    因为录像是黑白的,所以我想我应该依靠强悍。例如,我认为我可以绕着区域移动,计算上一帧中区域面积与下一帧中不同位置区域面积的相关性。我知道这是一个非常幼稚的解决方案,但你认为它可能有效吗?有人知道具体的算法吗?它不需要超快,只要它是准确的,我很高兴。

    谢谢你

    尼科

    6 回复  |  直到 13 年前
        1
  •  2
  •   Luca    15 年前

    我建议 Pearson's product . 有了一个模型(可以是任何模板图像),您可以测量模板与帧的任何部分的相关性。

    结果是一个概率因子,它决定了样本与模板的相关性。特别适用于二维情况。 它的优点是不依赖于样本的绝对值,因为结果依赖于与样本均值相关的协方差。

    一旦检测到高概率,就可以跟踪原始位置附近的连续帧,并选择最佳相关系数。

    然而,模板的大小和旋转是很重要的,但我不能理解这种情况。您可以使用任何形状自定义检测,因为模板图像可以表示任何配置。

    这里是一个 single pass algorithm implementation ,我已经正确使用和工作了。

        2
  •  4
  •   genpfault    15 年前

    听起来像是工作 Blob detection 对我来说。

        3
  •  3
  •   Muhammad Shahab    13 年前

    Zdenek-Kalal的捕食者(TLD算法)也有利于自动跟踪。

    看到这个:

    http://www.youtube.com/watch?v=1GhNXHCQGsM

    http://bit.ly/shahab-vision

        4
  •  1
  •   Aryabhatta    15 年前

    这必须是一个重新研究的话题,我怀疑不会有任何100%准确的解决方案。

    一些可能有用的链接:

    Learning patterns of activity using real-time tracking . 两个麻省理工的人写的论文。

    Kalman Filter . 尤其是计算机视觉部分。

    Motion Tracker . 一个学生项目,其中也有代码和样本视频,我相信。

    当然,这对你来说可能是多余的,但希望它能帮助你找到其他线索。

        5
  •  1
  •   phkahler    15 年前

    简单就是好。我会开始做如下的事情:

    1) over a small rectangle, that surrounds a spot:
    2) apply a weighted average of all the pixel coordinates in the area
    3) call the averaged X and Y values the objects position
    4) while scanning these pixels, do something to approximate the bounding box size
    5) repeat next frame with a slightly enlarged bounding box so you don't clip spot that moves
    

    对于低于某个阈值的像素,平均值的权重应该为零。数字4可以简单地跟踪任何比相同阈值亮的物体的最小/最大位置。

    这当然会与重叠或交叉路径的点有关。但出于某种原因,我一直认为你在用一些未知的相机运动追踪恒星,在这种情况下,这应该是好的。

        6
  •  1
  •   Rex Kerr    15 年前

    我担心斑点跟踪并不简单,如果你想做得好的话就不简单。

    正如genpfault所说,从斑点检测开始。

    现在,每个帧上都有点,需要将它们链接起来。如果blob是独立移动的,可以使用某种对应算法将它们链接起来。例如,请参见 http://server.cs.ucf.edu/~vision/papers/01359751.pdf .

    现在你可能有碰撞。你可以使用高斯混合体来尝试分离它们,放弃并让轨迹交叉,使用任何其他前后信息来解决碰撞(例如,如果A和B碰撞,A在之前和之后更亮,你可以跟踪A;如果A和B沿着可预测的轨迹移动,你也可以使用它)。

    或者你可以和一个一直在做这种事情的实验室合作。