我正在尝试使用 OpenCV 创建简单的斑点跟踪。我已经使用 findcontours 检测到了斑点。我想给这些斑点一个恒定的 ID。
我收集了前一帧和当前帧中的斑点列表。然后我计算了前一帧和当前帧中每个斑点之间的距离。我想知道还需要什么来跟踪斑点并给它们一个 ID。我只是获取了前一帧和当前帧 blob 之间的距离,但是如何使用测量的 blob 之间的距离为 blob 分配一致的 ID?
在第一帧中,您可以以任何方式分配 id,1 代表您找到的第一个,2 代表第二个......或者只是根据它们在集合中的位置给它们 ID。
然后在下一帧中您将必须使用最佳匹配。找到斑点,计算当前斑点与前一个图像的所有斑点之间的所有距离,并将每个先前的 ID 分配给最近的斑点。刚刚进入该字段的 Blob 将获得新的 ID。
现在你有了两帧,你可以对下一帧进行运动预测。只需计算 blob 的先前位置和当前位置之间的 deltaX 和 deltaY 即可。您可以使用此信息来猜测未来的位置。与这个未来的位置相匹配。
如果您没有太多重叠的斑点,并且每帧之间的运动不是太快且不稳定,那么这应该可行。
通过多个图像使用评分系统可能会更准确:
获取前 3 或 5 个图像的位置。对于第一帧的任何斑点,寻找第 2 帧上最接近的斑点,计算速度 (deltaX deltaY),寻找最接近第 3、4、5 帧的预测位置...总结预测位置和最近斑点之间的所有距离是分数。使用第 2 帧上第二个最接近的位置执行相同操作(它将向另一个方向寻找)。分数越低,最有可能是好的斑点。
如果你有很多斑点,你应该使用四叉树来加速处理。计算平方距离;它将避免大量的 sqrt 计算。
了解斑点通常如何移动以调整算法非常重要。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)