MeanShift 均值漂移跟踪算法原理
概述 整个暑假都在做Tracking,其中最为重要的核心就是均值漂移了,均值漂移算法指的是一个迭代的步骤,即先算出当前点的漂移均值,移动该点到其漂移均值,然后以此为新的起始点,继续移动,知道满足一定条件结束。所以,均值漂移实际上是一种在一种数据的密度分布中寻找局部极值的稳定的方法。如果分布连续,那么处理则变得非常容易,在这种情况下本质上只需要对数据的密度直方图应用爬山算法。更加准确的说,均值漂移是与核密度估计的规则有关的算法。而所谓“核”,实际上是一个如同高斯分布的局部函数。如果在充足的点处拥有足够合适的带权重和尺度的核,数据的分布则可以完全根据这些核来表示。然而又与核密度的估计不同,均值漂移仅仅估计数据分布的梯度。如果变化为0的地方则表示是这个分布的峰值(当然,也有可能是局部的)。当然在附近或其他尺度上还是有可能有峰值的。
定义 给定$d$维空间$R^{d}$中$n$个样本点$x_{i},i=1,2,…,n$,$n$在$x$点的均值漂移向量的基本形式定义为:
$$ \begin{equation} M_{h}(x)=\frac{1}{k}\sum_{x_{i}\in S_{k}}\left(x_{i}-x\right) \end{equation} $$
目标模型 均值漂移采用的是特征值的加权概率分布来描述目标模型,属于模式识别中主要描述目标的模型,不同于自动控制理论中采用的状态方程。 目标模型一共具有$m$个特征值(可以理解为像素的灰度值),于是对于序列$q={q_{n}}$,而$u\in {1,…,m}$有
$$ \begin{equation} q\left(u\right)=C\sum_{i=1}^{n}k\left( \left\Vert \frac{X_{i}-X_{0}}{H} \right\Vert ^{2}\right) \end{equation} $$
其中,$X_{0}$为窗口中心点向量值(可能为RGB向量或者灰度值),$X_{i}$是窗口内第$i$点向量值。$C$为归一化常数,保障$\sum_{i=1}^{m}q_{i}=1$ ,$H$为核函数的带宽向量。$M$为特征值的个数,对于图像处理可以理解为灰度等级划分的个数,从而特征值$u$为对应的灰度等级。 $\delta$函数为脉冲函数,保证只具有$u$特征值的像素才对概率分布作出贡献。从而$k$函数可以理解为$u$灰度值的一个加权频数。
匹配对象 同样采用的是特征值加权概率分布:
$$ \begin{equation} P_{u}(Y)=C_{h} \sum_{i=1}^{n_{k}}k\left( \left\Vert \frac{X_{i}-Y}{H_{h}} \right\Vert ^{2}\right) \delta\left(b(X_{i})-u\right) \end{equation} $$
其中$i\in [1,…,n_{h}]$,$Y$为匹配对象的中心, $X_{i}$是匹配窗口内第$i$点向量值。 $H_{h}$为匹配窗口的核函数带宽向量,$C_{h}$为匹配窗口特征向量的归一化常数。
匹配相似 匹配对象与目标模型的相似程度,相似函数采用的是Bhattacharyya函数
$$ \begin{equation} \rho\left(p(Y),q\right)=\sum_{u=1}^{m}\sqrt{P_{u}(Y)q_{u}} \end{equation} $$
匹配过程 均值漂移采用梯度下降法,首先$$\rho(Y)$$在\rho(Y_{0})附近进行泰勒展开,去前两项,得到
$$ \begin{equation} \rho(Y) \approx \rho(Y_{0})+\frac{d\rho}{dp}\left(p(Y)-p(Y_{0})\right) \end{equation} $$
定义
$$ \begin{equation} \rho_{u}(Y)=\sqrt{p_{u}(Y)q_{u}} \end{equation} $$
从而
$ \begin{equation} \rho_{u}(Y)=\rho_{u}(Y_{0})+\frac{q_{u}}{ 2 \sqrt{p_{u}(Y_{0})q_{u}} }\left( p_{u}(Y) - p_{u}(Y_{0}) \right) \end{equation} $