记得刚读研究生的时候,学习的第一个算法就是meanshift算法,因此一直记忆犹新,今天和你们分享一下Meanshift算法,若有错误,请在线交流。html
Mean Shift算法,通常是指一个迭代的步骤,即先算出当前点的偏移均值,移动该点到其偏移均值,而后以此为新的起始点,继续移动,直到知足必定的条件结束.算法
给定d维空间Rd的n个样本点 ,i=1,…,n,在空间中任选一点x,那么Mean Shift向量的基本形式定义为: 函数
Sk是一个半径为h的高维球区域,知足如下关系的y点的集合,学习
k表示在这n个样本点xi中,有k个点落入Sk区域中.spa
以上是官方的说法,即书上的定义,个人理解就是,在d维空间中,任选一个点,而后以这个点为圆心,h为半径作一个高维球,由于有d维,d可能大于2,因此是高维球。落在这个球内的全部点和圆心都会产生一个向量,向量是以圆心为起点落在球内的点位终点。而后把这些向量都相加。相加的结果就是Meanshift向量。3d
如图因此。其中黄色箭头就是Mh(meanshift向量)。htm
再以meanshift向量的终点为圆心,再作一个高维的球。以下图因此,重复以上步骤,就可获得一个meanshift向量。如此重复下去,meanshift算法能够收敛到几率密度最大得地方。也就是最稠密的地方。blog
最终的结果以下:图片
Meanshift推导:get
把基本的meanshift向量加入核函数,核函数的性质在这篇博客介绍:http://www.cnblogs.com/liqizhou/archive/2012/05/11/2495788.html
那么,meanshift算法变形为
(1)
解释一下K()核函数,h为半径,Ck,d/nhd 为单位密度,要使得上式f获得最大,最容易想到的就是对上式进行求导,的确meanshift就是对上式进行求导.
(2)
令:
K(x)叫作g(x)的影子核,名字听上去听深奥的,也就是求导的负方向,那么上式能够表示
对于上式,若是才用高斯核,那么,第一项就等于fh,k
第二项就至关于一个meanshift向量的式子:
那么(2)就能够表示为
下图分析的构成,如图因此,能够很清晰的表达其构成。
要使得=0,当且仅当
=0,能够得出新的圆心坐标:
(3)
上面介绍了meanshift的流程,可是比较散,下面具体给出它的算法流程。
真正大牛的人就能创造算法,例如像meanshift,em这个样的算法,这样的创新才能推进整个学科的发展。还有的人就是把算法运用的实际的运用中,推进整个工业进步,也就是技术的进步。下面介绍meashift算法怎样运用到图像上的聚类核跟踪。
通常一个图像就是个矩阵,像素点均匀的分布在图像上,就没有点的稠密性。因此怎样来定义点的几率密度,这才是最关键的。
若是咱们就算点x的几率密度,采用的方法以下:以x为圆心,以h为半径。落在球内的点位xi 定义二个模式规则。
(1)x像素点的颜色与xi像素点颜色越相近,咱们定义几率密度越高。
(2)离x的位置越近的像素点xi,定义几率密度越高。
因此定义总的几率密度,是二个规则几率密度乘积的结果,能够(4)表示
(4)
其中:表明空间位置的信息,离远点越近,其值就越大,
表示颜色信息,颜色越类似,其值越大。如图左上角图片,按照(4)计算的几率密度如图右上。利用meanshift对其聚类,可获得左下角的图。
|
|
|
|
http://www.cnblogs.com/liqizhou/archive/2012/05/12/2497220.html