Blob跟踪算法

Moa*_*een 8 c++ opencv tracking computer-vision

我正在尝试使用OpenCV创建简单的blob跟踪.我使用findcontours检测到blob.我想给这些blob一个不变的ID.

我收集了前一帧和当前帧中的blob列表.然后我获取前一帧中每个blob与当前帧之间的距离.我想知道还有什么需要跟踪blob并给他们一个ID.我只是采用了前一帧和当前帧blob之间的距离,但是如何使用blob之间测量的距离为blob分配一致的ID?

bok*_*kan 6

在第一帧中,您可以任意方式分配id,第一个找到1,第二个为2 ......或者根据它们在集合中的位置简单地给它们ID.

然后在下一帧,你将不得不使用最佳匹配.找到斑点,计算当前斑点与前一图像的所有斑点之间的所有距离,并将每个先前的ID分配给最近的斑点.刚进入该字段的Blob将获得新ID.

现在你有两个框架,你可以为下一个框架进行运动预测.只需计算blob的前一个位置和当前位置之间的deltaX和deltaY.您可以使用此信息来猜测未来的位置.与未来的位置相匹配.

如果您没有很多重叠的斑点,并且每个帧之间的移动不是太快且不稳定,那么这应该有用.

通过几个图像使用评分系统可以更准确:
获取前3或5个图像的位置.对于第一帧的任何斑点,在第2帧上寻找最接近的,计算速度(deltaX deltaY),寻找第3,4,5帧的最接近预测位置...总结预测位置和最近斑点之间的所有距离它将得分.使用第2帧最近的第二个(它将在另一个方向寻找).分数越低,最有可能是好的斑点.

如果你有很多blob,你应该使用四叉树来加速进程.比较平方距离; 它会避免很多sqrt计算.

重要的是要知道你的blob如何调整你的algotrithm.