Algorithm 自动跟踪算法
我正在尝试编写一个简单的跟踪例程来跟踪电影中的一些点 基本上我有一系列100帧长的电影,在黑暗的背景上显示一些亮点。 我每帧有大约100-150个点,它们会在电影的整个过程中移动。我想跟踪它们,所以我正在寻找一些有效的(但可能不是过度的)例程来实现这一点 更多信息:Algorithm 自动跟踪算法,algorithm,language-agnostic,graphics,image-processing,tracking,Algorithm,Language Agnostic,Graphics,Image Processing,Tracking,我正在尝试编写一个简单的跟踪例程来跟踪电影中的一些点 基本上我有一系列100帧长的电影,在黑暗的背景上显示一些亮点。 我每帧有大约100-150个点,它们会在电影的整个过程中移动。我想跟踪它们,所以我正在寻找一些有效的(但可能不是过度的)例程来实现这一点 更多信息: 斑点的大小只有几个(5倍)像素 运动规模不大。光斑通常不会从其原始位置移动超过5-10个像素。动作一般都很流畅 这些斑点的“形状”通常是固定的,它们不会增长或收缩,但随着电影的发展,它们变得不那么明亮 斑点不会朝特定方向移动。它们
- 斑点的大小只有几个(5倍)像素
- 运动规模不大。光斑通常不会从其原始位置移动超过5-10个像素。动作一般都很流畅
- 这些斑点的“形状”通常是固定的,它们不会增长或收缩,但随着电影的发展,它们变得不那么明亮
- 斑点不会朝特定方向移动。它们可以左右移动
- 用户将在每个点周围选择一个区域,然后跟踪该区域,因此我不需要自动查找点
尼科这一定是一个研究得很好的话题,我怀疑不会有任何100%准确的解决方案 一些可能有用的链接: 。麻省理工学院的两个人写的论文 。特别是计算机视觉部分 。一个学生项目,其中也有代码和样本视频,我相信
当然,这对你来说可能有些过分,但希望它能帮助你找到其他线索。简单就是好的。我会开始做这样的事情: 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 1) 在围绕一个点的小矩形上: 2) 应用区域中所有像素坐标的加权平均值 3) 将平均的X和Y值称为对象位置 4) 扫描这些像素时,请执行一些操作以近似边界框的大小 5) 使用稍微放大的边界框重复下一帧,这样就不会剪辑移动的点 对于低于某个阈值的像素,平均值的权重应为零。数字4可以像跟踪比同一阈值更亮的任何对象的最小/最大位置一样简单
这当然会有重叠或交叉点的问题。但出于某种原因,我一直认为你在用未知的摄像机运动跟踪恒星,在这种情况下,这应该没问题。对我来说听起来像是一项工作。我担心斑点跟踪并不简单,如果你想做好这项工作的话就不简单了 正如genpfault所说,从水滴检测开始 现在,每一帧上都有斑点,需要将它们连接起来。如果水滴独立移动,可以使用某种对应算法将它们连接起来。例如,见 现在可能会发生碰撞。您可以使用混合高斯来尝试分离它们,放弃并让轨迹交叉,使用任何其他前后信息来解决碰撞(例如,如果A和B碰撞,A在碰撞之前更亮,之后也会更亮,您可以跟踪A;如果A和B沿着可预测的轨迹移动,您也可以使用该信息) 或者你可以和一个一直在做这类事情的实验室合作。我建议。使用模型(可以是任何模板图像),可以测量模板与帧的任何部分的相关性 结果是确定样本与模板相关性的概率因子。它特别适用于二维情况。 它的优点是独立于样本绝对值,因为结果取决于与样本平均值相关的协方差 一旦检测到高概率,就可以跟踪原始位置附近的连续帧,并选择最佳相关因子 然而,模板的大小和旋转很重要,但我能理解的不是这种情况。您可以使用任何形状自定义检测,因为模板图像可以表示任何配置 这是一个,我已经使用并正确工作。Zdenek Kalal的捕食者(TLD算法)也适用于自动跟踪 见此: 及
这些形状独特吗?如果没有,您可能会在精度方面有问题,尤其是当形状彼此之间的距离在10像素以内时。@Anon:您的观点很好。我想你可以说这些斑点彼此都不一样,但在像这样的小事上,你知道差异不可能如此巨大。我已经有了一个“手动跟踪”例程,它允许用户在一段时间内手动移动区域,因此在这些困难区域的情况下,用户可能必须手动操作,这不是问题。我只是不想手动跟踪每张图像的所有150个区域……是的,你是对的,这是一个很好的研究,甚至可能太多,因为我可以找到大量关于它的论文。问题是,如果你不知道从哪里看,从哪里开始,那么太多的信息往往会让人困惑。你提供的链接似乎是一个有趣的起点,我想我会在周末读一些东西。。。特别是卡尔曼滤波器,似乎是一个好东西。我正在跟踪荧光显微镜图像,但你的想法无论如何都适用+我同意。听起来像是我参与的自适应后视镜控制项目。我通过斑点分析找到了“点”的原始位置。然后以每秒1000帧的速度运行,我有一个自定义算法,根据简单的质量“质心”查找点位置的微小变化