Mean Shift跟踪算法

均值漂移(Meanshift)算法理解

1.均值漂移的基本概念:沿着密度上升方向寻找聚簇点

设想在一个有N个样本点的特征空间

初始确定一个中心点center,计算在设置的半径为D的圆形空间内所有的点(xi)与中心点center的向量

计算整个圆形空间内所有向量的平均值,得到一个偏移均值

将中心点center移动到偏移均值位置

重复移动,直到满足一定条件结束

 

2.均值漂移运算:

2.1 Mean shift的基础公式:

偏移均值

Sh:以x为中心点,半径为h的高维球区域; k:包含在Sh范围内点的个数; xi:包含在Sh范围内的点

中心更新

将中心点移动到偏移均值位置

 

Mt为t状态下求得的偏移均值;   xt为t状态下的中心

2.2 引入核函数的偏移均值:

核函数

核函数只是用来计算映射到高维空间之后的内积的一种简便方法,目的为让低维的不可分数据变成高维可分。利用核函数,可以忽略映射关系,直接在低维空间中完成计算。

引入核函数的偏移均值

在均值漂移中引入核函数的概念,能够使计算中距离中心的点具有更大的权值,反映距离越短,权值越大的特性。改进的偏移均值:

其中,x为中心点;xi为带宽范围内的点;n为带宽范围内的点的数量;g(x)为对核函数的导数求负

3.均值漂移的应用:

聚类(K均值聚类)

图像分割(将图像映射到特征空间,对采样点进行均值漂移聚类)

对象轮廓检验(光线传播算法)

目标跟踪(求解最优化Bhattacharya系数函数)

4.均值漂移跟踪过程:

针对meanshift 的计算过程, 有人脸box(就是需要跟踪的区域),还有就是原图(就是输入图像,这个图像中包含了人脸)

     刚开始box标记在人脸上(第一帧,完全正确!),接下来的一帧 --- 新的一帧中(人脸移动了,但是box还在原处),现在就要移动box跟踪人脸,

    也就是在新的一帧中找人脸(如果直接检测就完全不需要跟踪啦。跟踪的目的就是减少检测的次数,因为检测太费劲!)

     那么就需要找出这一帧(新的一帧)中哪个区域与人脸(第一帧的box)比较相似了!!!

至此有了一个大的概念,在新的一帧中差找与人脸最相似的区域,并将box移动过去。

   又会有两个问题:

      (1)相似不相似怎么计算?

      (2)相似不相似怎么表现呢?

   对于第一个问题:

      有个叫什么皮尔逊相关性计算的公式,这里就不在细说。大概的意思是这样的,判断两个图像的相似性,可以通过计算两个图像直方图分布来计算。

   

 计算box图像与图像块1的相关性,可以得到一个[0,1]之间的数。

这样得到一个相关性图(概率图),每一个像素的值都是[0,1]的小数。这也没法看啊!!!怎么办???

劳动人民的智慧还是不错滴,将[0,1]映射到[0,255]就产生一张灰度图了。相关性越高的地方,在灰度图中就越亮。也就是第一张图中的各种点。我感觉这个灰度图就是反向投影图!!!不再解释,被其他博客的人坑了好长时间!

下面将计算第一个点是如何迈出它的第一步的:

似不似算出来的移动有点大,有点大,不用怕,第二次迭代的时候就修正过来啦!!!

貌似,我这种只是一种可见的方式,肯定还会有其他的移动方式,比如计算质心什么玩意的。对不对,大笨狗始终是大笨狗。

opencv官方文档中的meanshift迭代过程:

     

猜你喜欢

转载自blog.csdn.net/qq_36570733/article/details/82182345