首先感谢以下几位的渊博知识:
(1)li_dongxuan https://blog.csdn.net/li_dongxuan/article/details/70667170
(2)BHY_ https://blog.csdn.net/qq_15947787/article/details/53161768
(3) zhiyong_will https://blog.csdn.net/google19890102/article/details/51030884
(4)taotao1233 https://blog.csdn.net/jinshengtao/article/details/30258833
(5)-牧野- https://blog.csdn.net/dcrmg/article/details/52771372
一、Mean Shift算法概述
无参密度估计也叫做非参数估计,属于数理统计的一个分支,和参数密度估计共同构成了概率密度估计方法。参数密度估计方法要求特征空间服从一个已知的概率密度函数,在实际的应用中这个条件很难达到。而无参数密度估计方法对先验知识要求最少,完全依靠训练数据进行估计,并且可以用于任意形状的密度估计。所以依靠无参密度估计方法,即不事先规定概率密度函数的结构形式,在某一连续点处的密度函数值可由该点邻域中的若干样本点估计得出。常用的无参密度估计方法有:直方图法、最近邻域法和核密度估计法。
MeanShift算法正是属于核密度估计法,它不需要任何先验知识而完全依靠特征空间中样本点的计算其密度函数值。对于一组采样数据,直方图法通常把数据的值域分成若干相等的区间,数据按区间分成若干组,每组数据的个数与总参数个数的比率就是每个单元的概率值;核密度估计法的原理相似于直方图法,只是多了一个用于平滑数据的核函数。采用核函数估计法,在采样充分的情况下,能够渐进地收敛于任意的密度函数,即可以对服从任何分布的数据进行密度估计。
Mean Shift算法,又称为均值漂移算法,Mean Shift的概念最早是由Fukunage在1975年提出的,在后来由Yizong Cheng对其进行扩充,主要提出了两点的改进:
- 定义了核函数;
- 增加了权重系数。
核函数的定义使得偏移值对偏移向量的贡献随之样本与被偏移点的距离的不同而不同。权重系数使得不同样本的权重不同。Mean Shift算法在聚类,图像平滑、分割以及视频跟踪等方面有广泛的应用。
二、Mean Shift算法的核心原理
2.1 基本思想
2.2 核函数
2.3 基本的meanshift向量形式
![](https://i-blog.csdnimg.cn/blog_migrate/8d548f2701830a1b5b03115a92685ba6.png)
2.4 改进的meanshift向量形式
![](https://i-blog.csdnimg.cn/blog_migrate/a9aad8046d5cddbbff35d6bac3566083.png)
2.5 迭代步骤
三、 CamShift算法原理
![](https://i-blog.csdnimg.cn/blog_migrate/da553439994ae30e3010d4bca3c69840.png)
四、 HSV与反向投影
(1).RGB颜色空间对光照亮度变化较为敏感,为了减少此变化对跟踪效果的影响,首先将图像从RGB空间转换到HSV空间。
(2).然后对其中的H分量(色调)作直方图,在直方图中代表了不同H分量值出现的概率或者像素个数,就是说可以查找出H分量大小为h的概率或者像素个数,即得到了颜色概率查找表。
(3).将图像中每个像素的值用其颜色出现的概率对替换,就得到了颜色概率分布图。这个过程就叫反向投影,颜色概率分布图是一个灰度图像。
4.1 hsv
4.2 反向投影
Meanshift之所以能应用到目标跟踪领域,是因为根据初始目标box和初始全图能形成反向投影图,反向投影图的每个像素的值体现的是该像素是被跟踪目标的概率。那么反向投影图是如何形成的呢?
第一步是将原图片的所有像素从RGB空间映射到HSV空间。
然后,统计目标box区域内H(色调)分量的直方图,横坐标是色调变量(0~360°),纵坐标是该色调值下的像素个数,最后在对其进行归一化,使得该直方图成为概率直方图。
最后,将全图的HSV转换为反向投影图,比如(x=1,y=1)位置的H分量是40°,那么就将该值替换为上一步概率直方图中该值对应的概率,以此类推,于是反向投影图的每个像素的值体现了该像素是被跟踪目标的概率。
至此,将反向投影图作为meanshift的输入就很好理解了。
五、 OPENCV实现
5.1 meanshift
5.2 camshift
5.3 半自动跟踪
输入视频,用画笔圈出要跟踪的目标,然后对物体跟踪。
第一步:选中物体,记录你输入的方框和物体。
第二步:求出视频中有关物体的反向投影图。
第三步:根据反向投影图和输入的方框进行meanshift迭代,由于它是向重心移动,即向反向投影图中概率大的地方移动,所以始终会移动到目标上。
第四步:然后下一帧图像时用上一帧输出的方框来迭代即可。
5.4 全自动跟踪
输入视频,对运动物体进行跟踪。第一步:运用运动检测算法将运动的物体与背景分割开来。
第二步:提取运动物体的轮廓,并从原图中获取运动图像的信息。
第三步:对这个信息进行反向投影,获取反向投影图。
第四步:根据反向投影图和物体的轮廓(也就是输入的方框)进行meanshift迭代,由于它是向重心移动,即向反向投影图中概率大的地方移动,所以始终会移动到物体上。
第五步:然后下一帧图像时用上一帧输出的方框来迭代即可。