小白看跟踪算法

目标跟踪是什么

假想自己是一个花痴,在篮球场看到有一场球赛,期间有一个小哥哥受到你的关注,然后,你的眼神紧随他的脚步转动,为的是不错过他任何美好的画面。


OK,刚才眼神配合大脑,关注篮球小哥哥的场景,类似于图像领域的目标跟踪。我们习惯在找到感兴趣对象后,持续关注它的行踪,从而做出一定判断:要不要追
哈哈~~~
典型的目标跟踪算法:Meanshift,粒子滤波,卡尔曼滤波等,现在常用的核相关滤波的跟踪算法,如KCF跟踪等。
本文主要介绍这几种:粒子滤波,KCF滤波,卡尔曼滤波。

粒子滤波

粒子滤波是一种基于粒子分布统计的方法。

  • 首先对跟踪对象建立模型,
  • 并定义相似度匹配函数。

在跟踪目标的过程中,它会按照一定的空间分布撒例子。常规可知,目标下一帧位置在当前帧检测到位置附近可能性更大,因此在当前位置附近撒更多粒子,以求真实位置被撒例子的概率更大;而在远离区域撒较少例子。这个可以用高斯模型或者其他完成。

播撒完粒子后,计算每个被撒点区域的图像特征和跟踪对象的模型相似度。

  • 在目标附近区域,相似度比较高;
  • 而远离目标位置,相似度就会比较低。

然后,对所有被撒点位置求取权值重心,以相似度为权重,该重心即为目标下一帧最可能出现的区域。

KCF滤波

这是一种判别式滤波器,中文名为基于核相关的概率滤波。首先,初始位置的目标训练出一个特征模型,可以采用HOG特征或者其他。
常识可知,

  • 目标在前后帧特征相似度会比较高;
  • 目标下一帧出现的位置会在前帧检测位置附近。

基于这个常识,KCF在跟踪过程中一直在更新模型,并且每次在扩大当前区域几倍后搜索,然后将相应最强的位置作为目标新的位置。
基本原理是这样,很多更新后的算法,主要在做运算提速的事,毕竟,跟踪对实时性要求性很高。

卡尔曼滤波

卡尔曼滤波不提取目标的特征模型,而仅仅把运动特征作为跟踪模型。根据瞬时速度、位置,预测下一帧最可能出现的位置。我们知道,任何曲线运动在被瞬时放大后,都可以看作是线性运动
因此,直接将瞬时速度作为位移变量,预测下一帧最可能出现的位置。
由于卡尔曼滤波没有添加目标特征,所以一般被称为辅助跟踪
在目标快速运动的场景,直接调用KCF会比较费时间,因为要扩大搜索区域;如果把卡尔曼滤波添加进去,先根据运动规律预测下一帧目标最可能位置,然后再其预测位置附近搜索特征最佳匹配位置。
图是一个卡尔曼滤波的流程,来源网络。

这里写图片描述

大概只了解这么点,后续学习不断更新。

猜你喜欢

转载自blog.csdn.net/weixin_39437164/article/details/82700298