算法原理
Meanshift
概率密度估计方法主要分为参数密度估计和无参密度估计,参数密度估计方法要求特征空间服从一个已知的概率密度函数,在实际的应用中难以达到;而无参密度估计对先验知识要求少,完全依靠训练数据进行估计,并且可以用于任意形状的密度估计,常用的无参密度估计方法有:直方图法、最近邻法和核密度估计法。Meanshift算法是核密度估计的一种方法,它不需要任何先验知识,完全依靠特征空间中样本点计算其密度函数值。对于一组数据,直方图法通常把数据的值域分成若干个相等的区间,数据按区间分成若干组,每组数据的个数与总参数个数的比率就是每个单元的概率值。核密度估计法的原理相似于直方图法,只是多了一个用于平滑数据的核函数。采用核函数估计法,在采样充分的情况下,能够渐进收敛于任意的密度函数,即可以对服从任何分布的数据进行密度估计。
首先任选一个点,然后以这个点为圆心,h为半径做一个高维球。落在这个球内的所有点和圆心都会产生一个向量,向量是以圆心为起点,以落在球内的点位终点,然后把这些向量都相加,相加的结果就是下图中黄色箭头表示的MeanShift向量:

然后再以这个MeanShift 向量的终点为圆心,继续上述过程,又可以得到一个MeanShift 向量。然后就这样从起点开始,一步步到达样本特征点的密度中心。

但是单纯的将向量相加是不鲁棒的,在现实跟踪过程中,当跟踪目标出现遮挡等影响的时候,球体外层的像素值容易被遮挡或者受背景影响,所以目标模型中心附近的像素比靠外的像素更可靠,所以对于所有采样点,每个点的重要性,即权重应该是不同的,离中心点越远,其权值应该越小,所以引入核函数和权重系数来提高算法的鲁棒性。
核函数
X
X
X代表一个
d
d
d维的欧氏空间,
x
x
x是该空间中的一个点,用一列向量表示,
x
x
x的模为
∣
∣
x
∣
∣
2
=
x
T
x
||x||^2=x^Tx
∣∣x∣∣2=xTx。
R
R
R表示实数域。如果一个函数
K
:
X
→
R
K:X \rightarrow R
K:X→R存在一个剖面函数
k
:
[
0
,
∞
]
→
R
k:[0,\infty] \rightarrow R
k:[0,∞]→R,即:
K
(
x
)
=
k
(
∣
∣
x
∣
∣
2
)
K(x)=k(||x||^2)
K(x)=k(∣∣x∣∣2)
并且满足以下条件,那么
K
(
x
)
K(x)
K(x)就是核函数。
- k k k是非负的
- k k k是非增的
- k k k是分段连续的并且 ∫ 0 ∞ k ( r ) d r < ∞ \int_0^\infty k(r)dr<\infty ∫0∞k(r)dr<∞
核函数在核密度估计中起到平滑的作用,常用的核函数有:
- Epannechnikov核函数 K E ( x ) = { c ( 1 − ∣ ∣ x ∣ ∣ 2 ) ∣ ∣ x ∣ ∣ ≤ 1 0 e l s e K_E(x)=\begin{cases} c(1-||x||^2) & { ||x||\leq 1} \\ 0 & else \end{cases} KE(x)={c(1−∣∣x∣∣2)0∣∣x∣∣≤1else
- Uniform核函数 K U ( x ) = { 1 2 ∣ ∣ x ∣ ∣ ≤ 1 0 e l s e K_U(x)=\begin{cases} \frac{1}{2} & { ||x||\leq 1} \\ 0 & else \end{cases} KU(x)={210∣∣x∣∣≤1else
- Gaussian核函数 K ( x ) = 1 2 π e x p ( − 1 2 ∣ ∣ x ∣ ∣ 2 ) K(x) = \frac{1}{\sqrt{2\pi}}exp(-\frac{1}{2}||x||^2) K(x)=2π1exp(−21∣∣x∣∣2)
算法流程
- 目标模型描述
目标模型指的是图像初始帧所确定的包含跟踪目标的区域,假设其中有n个像素,用 z i , i = 1 , . . . , n {z_i},{i=1,...,n} zi,i=1,...,n表示位置,对选中的区域计算得到颜色空间直方图,在本程序中,我们将R、G、B三个通道各分为16个bin,得到4096个相等区间构成的直方图。目标模型的概率密度 q u q_u qu可以表示为:
q u = C ∑ i = 1 n K ( ∣ ∣ z i ∗ ∣ ∣ 2 ) δ [ b ( z i ) − u ] q_u = C\sum_{i=1}^{n}K(||z_i^*||^2)\delta[b(z_i)-u] qu=Ci=1∑nK(∣∣zi∗∣∣2)δ[b(zi)−u]
C = 1 / ∑ i = 1 n K ( ∣ ∣ z i ∗ ∣ ∣ 2 ) C=1/\sum_{i=1}^{n}K(||z_i^*||^2) C=1/i=1∑nK(∣∣zi∗∣∣2)
z i ∗ = ( ( x i − x 0 ) 2 + ( y i − y 0 ) 2 x 0 2 + y 0 2 ) 0.5 z_i^*=(\frac{(x_i-x_0)^2+(y_i-y_0)^2}{x_0^2+y_0^2})^{0.5} zi∗=(x02+y02(xi−x0)2+(yi−y0)2)0.5
其中, z i ∗ z_i^* zi∗表示以目标中心为原点的归一化像素位置, b ( z i ) b(z_i) b(zi)表示 z i z_i zi处像素属于哪个直方图区间, u u u为直方图的颜色索引,C是归一化系数。 - 候选模型描述
在第t帧时,根据第t-1帧的目标中心位置,得到候选目标的中心位置坐标,计算当前帧的候选目标区域直方图 p u p_u pu。 - 相似性度量
相似性函数用于描述目标模型和候选目标之间的相似程度,相似函数越大两个模型越相似,寻找是的相似函数最大的候选区域,就是在本帧中目标的位置。
实验环境
- 数据集:Basketball 🏀
- Python3.7
- OpenCV
实验结果


参考
[1] https://blog.csdn.net/jinshengtao/article/details/30258833
[2]https://blog.csdn.net/lk3030/article/details/84108765
本文介绍了基于Meanshift的目标跟踪算法,包括算法原理、核函数、算法流程。Meanshift是一种无参密度估计方法,通过核函数平滑数据并找到样本特征点的密度中心。实验在Python3.7和OpenCV环境下进行,数据集为Basketball。

4900

被折叠的 条评论
为什么被折叠?



