改进OpenCV中的CamShift算法

4

我正在使用opencv的camshift算法进行物体跟踪。输入来自网络摄像头,物体在连续帧之间被跟踪。如何使跟踪更强?如果我以快速速度移动物体,则跟踪会失败。当物体不在画面中时,会出现虚假检测。我该如何改进?


我认为仅凭Camshift算法无法解决这个问题。 - karlphillip
1
选择用于跟踪的算法强烈依赖于您要跟踪的对象类型。此外,您是在跟踪还是仅定位对象? - count0
3个回答

2
物体跟踪是计算机视觉中一个活跃的研究领域。有许多算法可以实现它,但没有一种算法能够100%的成功。
如果您需要实时跟踪,则需要使用简单快速的方法。我假设您已经有了一种从背景中分离移动物体的方法。然后,您可以计算出物体的表示,例如颜色直方图,并将其与下一帧中找到的物体进行比较。您还应该检查物体在帧之间是否移动得太远。如果您想尝试更高级的运动跟踪,则应查找卡尔曼滤波器。
确定物体不在帧中也是一个大问题。首先,您要跟踪什么样的物体?人?汽车?狗?您可以构建一个物体分类器,它将告诉您当前帧中移动的物体是否是您感兴趣的对象,而不是噪声或其他类型的物体。分类器可以是非常简单的东西,例如对大小的限制,或者它可以非常复杂。在后一种情况下,您需要了解可以计算的特征、分类算法(如支持向量机),并且您需要收集训练图像来对其进行训练。
总之,一个可靠的跟踪器并不容易构建。

1
假设您在前两帧中找到了对象。通过这些信息,您可以推断出在第三帧中期望的对象位置。不要使用通用的查找对象算法,而是使用更慢、更复杂(因此希望更可靠)的算法,通过限制检查预测的附近区域来实现。它可能不会正好在您的预期位置(也许速度向量正在改变),但您肯定可以减少检查的区域。
这应该有助于减少其他部分被错误地识别为对象的次数(因为您正在查看较小的帧部分,并且因为您正在使用更好的特征检测器)。
根据您发现的内容更新外推,并迭代下一帧。
如果对象超出帧范围,则退回到通用特征检测器,就像处理前两帧一样,并在对象返回视图时再次尝试“锁定”。
此外,如果可能,请尽可能多地照亮物理场景。如果场景昏暗,网络摄像头将使用较长的曝光时间,导致移动物体上的运动模糊增加。运动模糊可能会使特征检测器非常困难(尽管它可以提供有关方向和速度的信息)。

0
我发现如果你扩大camShift搜索窗口的边界,它会使算法对快速移动的物体更加适应,尽管可能会引入一些不规则性。试着将窗口的边界增加10%,看看会发生什么。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接