我正在使用opencv的camshift算法进行物体跟踪。输入来自网络摄像头,物体在连续帧之间被跟踪。如何使跟踪更强?如果我以快速速度移动物体,则跟踪会失败。当物体不在画面中时,会出现虚假检测。我该如何改进?
物体跟踪是计算机视觉中一个活跃的研究领域。有许多算法可以实现它,但没有一种算法能够100%的成功。如果您需要实时跟踪,则需要使用简单快速的方法。我假设您已经有了一种从背景中分离移动物体的方法。然后,您可以计算出物体的表示,例如颜色直方图,并将其与下一帧中找到的物体进行比较。您还应该检查物体在帧之间是否移动得太远。如果您想尝试更高级的运动跟踪,则应查找卡尔曼滤波器。确定物体不在帧中也是一个大问题。首先,您要跟踪什么样的物体?人?汽车?狗?您可以构建一个物体分类器,它将告诉您当前帧中移动的物体是否是您感兴趣的对象,而不是噪声或其他类型的物体。分类器可以是非常简单的东西,例如对大小的限制,或者它可以非常复杂。在后一种情况下,您需要了解可以计算的特征、分类算法(如支持向量机),并且您需要收集训练图像来对其进行训练。总之,一个可靠的跟踪器并不容易构建。
假设您在前两帧中找到了对象。通过这些信息,您可以推断出在第三帧中期望的对象位置。不要使用通用的查找对象算法,而是使用更慢、更复杂(因此希望更可靠)的算法,通过限制检查预测的附近区域来实现。它可能不会正好在您的预期位置(也许速度向量正在改变),但您肯定可以减少检查的区域。这应该有助于减少其他部分被错误地识别为对象的次数(因为您正在查看较小的帧部分,并且因为您正在使用更好的特征检测器)。根据您发现的内容更新外推,并迭代下一帧。如果对象超出帧范围,则退回到通用特征检测器,就像处理前两帧一样,并在对象返回视图时再次尝试“锁定”。此外,如果可能,请尽可能多地照亮物理场景。如果场景昏暗,网络摄像头将使用较长的曝光时间,导致移动物体上的运动模糊增加。运动模糊可能会使特征检测器非常困难(尽管它可以提供有关方向和速度的信息)。