近段时间学习了mean shitf算法,现在在这里做个总结,主要从以下几个方面进行
1、mean shift的发展
2、最初的mean shift算法
3、改进的meanshitf算法
4、meanshift算法的推导
5、meanshitf算法的应用
1、mean shift的发展
mean shift早在1975年即有Fukunaga等人提出,真正发展起来是在1995年,Yizong Cheng发表的一篇关于Meanshift的文章,其在mean shift算法加入了kernel的概念,并加入了权重系数,极大的扩大了mean shift算法的应用空间,图像平滑,图像分割,tracking等一系列应用
2、最初的mean shift算法
mean shift函数定义式:
其中Sk为d维空间中的点集,xi代表Sk中的点,x维空间中一点,k表示xi的点数,Sk的定义式可表示如下:
更加形象一点的图可见下图:
其中黑点表示x,空心点表示xi,从黑点到空心点的箭头向量表示xi-x,整个圆圈表示Sk,所有Xi-X的向量相加,平均得到一个向量,该向量即可表示均值漂移向量m(x),将m(x)的值赋值个x,x = m(x),经过多次反复迭代,最终,当m(x)- x < h (h表示一个阈值常量)时,停止迭代,此时找到的m(x)点即为原始点x的均值漂移点
下面三个图可以为三次迭代过程:
空间中任意一点x
中心点漂移:
最终迭代找到密度稠密位置:
3、改进的meanshitf算法
从(1)式我们可以看出,只要是落入Sk的采样点,无论其离远近,对最终的计算的贡献是一样的,然而我们知道,一般的说来,离x越近的采样点对估计周围的统计特性越有效,因此我们引进核函数的概念,在计算时可以考虑距离的影响;同时我们也可以认为在这所有的样本点中,重要性并不一样,因此我们对每个样本都引入一个权重系数w(x).
MeanShift形式扩展为:
4、meanshift算法的推导
对一个概率密度函数f(x),已知d维空间中n个采样点,i=1,…,n,f(x) 的核函数估计为:
另外我们有两个如下定义:
核函数K(x)的剖面函数k(x),使得K(x)=k(||x||^2)
K(x)的负导函数g(x),即g(x)=-k'(x) ,其对应的核函数G(x)= g(||x||^2)
概率密度函数f(x)的梯度如下:
5、meanshitf算法的应用
图像平滑:
mean shift 算法可以让我们找到与当前像素点关系最紧密点,因此我们对图像中每一个像素进行一次mean shift算法,用均值漂移后点的像素代替当前点像素即可得到图像平滑的效果
图像分割:
图像分割与平滑一样,将所有收敛到同一像素点的所有像素点分割成一部分
tracking:
我们用一个物体的收敛中心来表示这个物体,将候选物体中心与该收敛中心进行对比,即可实现tracking