【深度学习】【机器学习】【目标跟踪】基于Meanshift的目标跟踪算法

本文介绍了基于Meanshift的目标跟踪算法,包括算法原理、核函数、算法流程。Meanshift是一种无参密度估计方法,通过核函数平滑数据并找到样本特征点的密度中心。实验在Python3.7和OpenCV环境下进行,数据集为Basketball。

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

算法原理

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 x2=xTx R R R表示实数域。如果一个函数 K : X → R K:X \rightarrow R K:XR存在一个剖面函数 k : [ 0 , ∞ ] → R k:[0,\infty] \rightarrow R k:[0,]R,即:
K ( x ) = k ( ∣ ∣ x ∣ ∣ 2 ) K(x)=k(||x||^2) K(x)=k(x2)
并且满足以下条件,那么 K ( x ) K(x) K(x)就是核函数。

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

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

  1. 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(1x2)0x1else
  2. 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)={210x1else
  3. 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(21x2)

算法流程

  1. 目标模型描述
    目标模型指的是图像初始帧所确定的包含跟踪目标的区域,假设其中有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=1nK(zi2)δ[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=1nK(zi2)
    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(xix0)2+(yiy0)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是归一化系数。
  2. 候选模型描述
    在第t帧时,根据第t-1帧的目标中心位置,得到候选目标的中心位置坐标,计算当前帧的候选目标区域直方图 p u p_u pu
  3. 相似性度量
    相似性函数用于描述目标模型和候选目标之间的相似程度,相似函数越大两个模型越相似,寻找是的相似函数最大的候选区域,就是在本帧中目标的位置。

实验环境

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

实验结果

在这里插入图片描述
在这里插入图片描述

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值