【目标跟踪】基于Meanshift的目标跟踪算法

【目标跟踪】基于Meanshift的目标跟踪算法

算法原理

Meanshift

概率密度估计方法主要分为参数密度估计和无参密度估计,参数密度估计方法要求特征空间服从一个已知的概率密度函数,在实际的应用中难以达到;而无参密度估计对先验知识要求少,完全依靠训练数据进行估计,并且可以用于任意形状的密度估计,常用的无参密度估计方法有:直方图法、最近邻法和核密度估计法。Meanshift算法是核密度估计的一种方法,它不需要任何先验知识,完全依靠特征空间中样本点计算其密度函数值。对于一组数据,直方图法通常把数据的值域分成若干个相等的区间,数据按区间分成若干组,每组数据的个数与总参数个数的比率就是每个单元的概率值。核密度估计法的原理相似于直方图法,只是多了一个用于平滑数据的核函数。采用核函数估计法,在采样充分的情况下,能够渐进收敛于任意的密度函数,即可以对服从任何分布的数据进行密度估计。

首先任选一个点,然后以这个点为圆心,h为半径做一个高维球。落在这个球内的所有点和圆心都会产生一个向量,向量是以圆心为起点,以落在球内的点位终点,然后把这些向量都相加,相加的结果就是下图中黄色箭头表示的MeanShift向量:
【目标跟踪】基于Meanshift的目标跟踪算法
然后再以这个MeanShift 向量的终点为圆心,继续上述过程,又可以得到一个MeanShift 向量。然后就这样从起点开始,一步步到达样本特征点的密度中心。

【目标跟踪】基于Meanshift的目标跟踪算法
但是单纯的将向量相加是不鲁棒的,在现实跟踪过程中,当跟踪目标出现遮挡等影响的时候,球体外层的像素值容易被遮挡或者受背景影响,所以目标模型中心附近的像素比靠外的像素更可靠,所以对于所有采样点,每个点的重要性,即权重应该是不同的,离中心点越远,其权值应该越小,所以引入核函数和权重系数来提高算法的鲁棒性。

核函数

XX代表一个dd维的欧氏空间,xx是该空间中的一个点,用一列向量表示,xx的模为x2=xTx||x||^2=x^TxRR表示实数域。如果一个函数K:XRK:X \rightarrow R存在一个剖面函数k:[0,]Rk:[0,\infty] \rightarrow R,即:
K(x)=k(x2)K(x)=k(||x||^2)
并且满足以下条件,那么K(x)K(x)就是核函数。

  1. kk是非负的
  2. kk是非增的
  3. kk是分段连续的并且0k(r)dr<\int_0^\infty k(r)dr<\infty

核函数在核密度估计中起到平滑的作用,常用的核函数有:

  1. Epannechnikov核函数KE(x)={c(1x2)x10elseK_E(x)=\begin{cases} c(1-||x||^2) & { ||x||\leq 1} \\ 0 & else \end{cases}
  2. Uniform核函数KU(x)={12x10elseK_U(x)=\begin{cases} \frac{1}{2} & { ||x||\leq 1} \\ 0 & else \end{cases}
  3. Gaussian核函数K(x)=12πexp(12x2)K(x) = \frac{1}{\sqrt{2\pi}}exp(-\frac{1}{2}||x||^2)

算法流程

  1. 目标模型描述
    目标模型指的是图像初始帧所确定的包含跟踪目标的区域,假设其中有n个像素,用zi,i=1,...,n{z_i},{i=1,...,n}表示位置,对选中的区域计算得到颜色空间直方图,在本程序中,我们将R、G、B三个通道各分为16个bin,得到4096个相等区间构成的直方图。目标模型的概率密度quq_u可以表示为:
    qu=Ci=1nK(zi2)δ[b(zi)u]q_u = C\sum_{i=1}^{n}K(||z_i^*||^2)\delta[b(z_i)-u]
    C=1/i=1nK(zi2)C=1/\sum_{i=1}^{n}K(||z_i^*||^2)
    zi=((xix0)2+(yiy0)2x02+y02)0.5z_i^*=(\frac{(x_i-x_0)^2+(y_i-y_0)^2}{x_0^2+y_0^2})^{0.5}
    其中,ziz_i^*表示以目标中心为原点的归一化像素位置,b(zi)b(z_i)表示ziz_i处像素属于哪个直方图区间,uu为直方图的颜色索引,C是归一化系数。
  2. 候选模型描述
    在第t帧时,根据第t-1帧的目标中心位置,得到候选目标的中心位置坐标,计算当前帧的候选目标区域直方图pup_u
  3. 相似性度量
    相似性函数用于描述目标模型和候选目标之间的相似程度,相似函数越大两个模型越相似,寻找是的相似函数最大的候选区域,就是在本帧中目标的位置。

实验环境

  1. 数据集:Basketball ????
  2. Python3.7
  3. OpenCV

实验结果

【目标跟踪】基于Meanshift的目标跟踪算法
【目标跟踪】基于Meanshift的目标跟踪算法

参考
[1] https://blog.csdn.net/jinshengtao/article/details/30258833
[2]https://blog.csdn.net/lk3030/article/details/84108765