【目标跟踪】基于Meanshift的目标跟踪算法
算法原理
Meanshift
概率密度估计方法主要分为参数密度估计和无参密度估计,参数密度估计方法要求特征空间服从一个已知的概率密度函数,在实际的应用中难以达到;而无参密度估计对先验知识要求少,完全依靠训练数据进行估计,并且可以用于任意形状的密度估计,常用的无参密度估计方法有:直方图法、最近邻法和核密度估计法。Meanshift算法是核密度估计的一种方法,它不需要任何先验知识,完全依靠特征空间中样本点计算其密度函数值。对于一组数据,直方图法通常把数据的值域分成若干个相等的区间,数据按区间分成若干组,每组数据的个数与总参数个数的比率就是每个单元的概率值。核密度估计法的原理相似于直方图法,只是多了一个用于平滑数据的核函数。采用核函数估计法,在采样充分的情况下,能够渐进收敛于任意的密度函数,即可以对服从任何分布的数据进行密度估计。
首先任选一个点,然后以这个点为圆心,h为半径做一个高维球。落在这个球内的所有点和圆心都会产生一个向量,向量是以圆心为起点,以落在球内的点位终点,然后把这些向量都相加,相加的结果就是下图中黄色箭头表示的MeanShift向量:
然后再以这个MeanShift 向量的终点为圆心,继续上述过程,又可以得到一个MeanShift 向量。然后就这样从起点开始,一步步到达样本特征点的密度中心。
但是单纯的将向量相加是不鲁棒的,在现实跟踪过程中,当跟踪目标出现遮挡等影响的时候,球体外层的像素值容易被遮挡或者受背景影响,所以目标模型中心附近的像素比靠外的像素更可靠,所以对于所有采样点,每个点的重要性,即权重应该是不同的,离中心点越远,其权值应该越小,所以引入核函数和权重系数来提高算法的鲁棒性。
核函数
代表一个维的欧氏空间,是该空间中的一个点,用一列向量表示,的模为。表示实数域。如果一个函数存在一个剖面函数,即:
并且满足以下条件,那么就是核函数。
- 是非负的
- 是非增的
- 是分段连续的并且
核函数在核密度估计中起到平滑的作用,常用的核函数有:
- Epannechnikov核函数
- Uniform核函数
- Gaussian核函数
算法流程
- 目标模型描述
目标模型指的是图像初始帧所确定的包含跟踪目标的区域,假设其中有n个像素,用表示位置,对选中的区域计算得到颜色空间直方图,在本程序中,我们将R、G、B三个通道各分为16个bin,得到4096个相等区间构成的直方图。目标模型的概率密度可以表示为:
其中,表示以目标中心为原点的归一化像素位置,表示处像素属于哪个直方图区间,为直方图的颜色索引,C是归一化系数。 - 候选模型描述
在第t帧时,根据第t-1帧的目标中心位置,得到候选目标的中心位置坐标,计算当前帧的候选目标区域直方图。 - 相似性度量
相似性函数用于描述目标模型和候选目标之间的相似程度,相似函数越大两个模型越相似,寻找是的相似函数最大的候选区域,就是在本帧中目标的位置。
实验环境
- 数据集:Basketball ????
- Python3.7
- OpenCV
实验结果
参考
[1] https://blog.****.net/jinshengtao/article/details/30258833
[2]https://blog.****.net/lk3030/article/details/84108765