meanshift算法简介
均值偏移算法

均值偏移算法1. 概述均值偏移算法(Mean Shift algorithm)是一种非参数化的聚类算法,能够对数据进行自动的聚类分析。
该算法的原理基于密度估计和梯度下降,通过不断迭代的方式找到数据的局部最大密度区域,从而将数据划分成不同的簇。
均值偏移算法在计算机视觉、图像处理以及模式识别等领域都有应用。
2. 均值偏移原理均值偏移算法的核心思想是通过计算样本点与其邻近点之间的距离来寻找密度最大的区域,并将距离小于某个阈值的样本点划分到同一簇中。
具体步骤如下:2.1. 初始化首先,需要初始化聚类中心点。
可以选择从样本中随机选择一些点作为初始的聚类中心。
2.2. 密度估计对于每个聚类中心点,计算它与所有样本点的距离。
可以使用欧氏距离或者其他距离度量方法。
根据距离大小,将样本点按照距离聚类中心点的远近分别分为不同的簇。
2.3. 均值迁移对于每个样本点,计算它距离所属簇其他样本点的中心的平均距离,并将该样本点迁移到距离最近的中心。
重复这一过程,直到所有样本点不再发生迁移。
2.4. 聚类结果经过迭代的均值偏移过程之后,每个样本点都会被分配到一个簇中。
最终的聚类结果即为各个样本点所属的簇。
3. 实例详解下面通过一个实例来详细解释均值偏移算法的工作原理。
假设我们有一组二维数据点,如下所示:[(1, 2), (1.5, 1.8), (5, 8), (8, 8), (1, 0.6), (9, 11)]3.1. 初始化我们随机选择两个点作为初始的聚类中心,比如选择(1, 2)和(9, 11)。
3.2. 密度估计计算每个样本点与聚类中心的距离:距离中心点(1, 2)的距离:[0, 0.2828, 10.8167, 10.8167, 1.412, 13.6015]距离中心点(9, 11)的距离:[13.6015, 13.193, 4.4721, 1.4142, 11.6619, 0]根据距离的大小,可以将数据分为两个初始簇:初始簇1: [(1, 2), (1.5, 1.8), (1, 0.6)]初始簇2: [(5, 8), (8, 8), (9, 11)]3.3. 均值迁移对于簇1中的样本点(1, 2),计算其与其他样本点的平均距离,并将其迁移到距离最近的中心点。
meanshift算法简介

h为核函数的带宽。常用的核函数如下:
分别是单位均匀核函数 和单位高斯核函数
多维空间下的无参密度估计: 在d维欧式空间X中,x表示该空间中的一个点, 表示该空间中的
1 2
核函数,
空间中点x的概率密度估计值为: K H x H
1 K H 2x
H表示d*d维的带宽矩阵
• 上面的步骤也就是不断的沿着概率密度的 梯度方向移动,同时步长不仅与梯度的大小 有关,也与该点的概率密度有关,在密度大的 地方,更接近我们要找的概率密度的峰值 ,Mean Shift算法使得移动的步长小一些,相反 ,在密度小的地方,移动的步长就大一些.在满 足一定条件下,Mean Shift算法一定会收敛到 该点附近的峰值,
数据最密集的地方,对应于概率密度最大的地方。我们可 以对概率密度求梯度,梯度的方向就是概率密度增加最大 的方向,从而也就是数据最密集的方向。
令 有
,假设除了有限个点,轮廓函数 的梯度对所 均存在 。将 作为轮廓函数,核函数 为:
f h,K x
2ck ,d nh d 2
x xi xi x g h i 1
在计算机视觉中,最常用的是放射状对称核函数。
是放射状核函数 是 标准化常量 H为带宽矩阵。 的轮廓函数 是个正数,保证 积分为1
在实际中常采用H为单位矩阵的比例形式,即
KH x H
1 2
1 2 K H x
若再考虑到
这个表达式就是基于核函数
的概率密度函数的估计
怎样找到数据集合中数据最密集的地方呢?
对在初始帧图像中目标区域内所有的象素点,计算每个 特征值的概率,我们称为目标模型的描述。
目标区域的中心为 ,假设其中有n个象素用 特征值的个数为m个 ,则目标模型的特征值 度估计为:
mean-shift概述

Mean Shift 概述Mean Shift 简介Mean Shift 这个概念最早是由Fukunaga 等人[1]于1975年在一篇关于概率密度梯度函数的估计中提出来的,其最初含义正如其名,就是偏移的均值向量,在这里Mean Shift 是一个名词,它指代的是一个向量,但随着Mean Shift 理论的发展,Mean Shift 的含义也发生了变化,如果我们说Mean Shift 算法,一般是指一个迭代的步骤,即先算出当前点的偏移均值,移动该点到其偏移均值,然后以此为新的起始点,继续移动,直到满足一定的条件结束.然而在以后的很长一段时间内Mean Shift 并没有引起人们的注意,直到20年以后,也就是1995年,另外一篇关于Mean Shift 的重要文献[2]才发表.在这篇重要的文献中,Yizong Cheng 对基本的Mean Shift 算法在以下两个方面做了推广,首先Yizong Cheng 定义了一族核函数,使得随着样本与被偏移点的距离不同,其偏移量对均值偏移向量的贡献也不同,其次Yizong Cheng 还设定了一个权重系数,使得不同的样本点重要性不一样,这大大扩大了Mean Shift 的适用范围.另外Yizong Cheng 指出了Mean Shift 可能应用的领域,并给出了具体的例子.Comaniciu 等人[3][4]把Mean Shift 成功的运用的特征空间的分析,在图像平滑和图像分割中Mean Shift 都得到了很好的应用.Comaniciu 等在文章中证明了,Mean Shift 算法在满足一定条件下,一定可以收敛到最近的一个概率密度函数的稳态点,因此Mean Shift 算法可以用来检测概率密度函数中存在的模态.Comaniciu 等人[5]还把非刚体的跟踪问题近似为一个Mean Shift 最优化问题,使得跟踪可以实时的进行.在后面的几节,本文将详细的说明Mean Shift 的基本思想及其扩展,其背后的物理含义,以及算法步骤,并给出理论证明.最后本文还将给出Mean Shift 在聚类,图像平滑,图像分割,物体实时跟踪这几个方面的具体应用.Mean S h ift 的基本思想及其扩展基本Mean Shift给定d 维空间dR 中的n 个样本点i x ,i=1,…,n,在x 点的Mean Shift 向量的基本形式定义为:()()1i hh i x S M x x x k ∈≡−∑(1)其中,h S 是一个半径为h 的高维球区域,满足以下关系的y 点的集合,()()(){}2:Th S x y y x y x h ≡−−≤(2)k 表示在这n 个样本点i x 中,有k 个点落入h S 区域中.我们可以看到()i x x −是样本点i x 相对于点x 的偏移向量,(1)式定义的Mean Shift 向量()h M x 就是对落入区域h S 中的k 个样本点相对于点x 的偏移向量求和然后再平均.从直观上看,如果样本点i x 从一个概率密度函数()f x 中采样得到,由于非零的概率密度梯度指向概率密度增加最大的方向,因此从平均上来说,h S 区域内的样本点更多的落在沿着概率密度梯度的方向.因此,对应的,Mean Shift 向量()h M x 应该指向概率密度梯度的方向.图1,Mean Shift 示意图如上图所示,大圆圈所圈定的范围就是h S ,小圆圈代表落入h S 区域内的样本点i h x S ∈,黑点就是Mean Shift 的基准点x ,箭头表示样本点相对于基准点x 的偏移向量,很明显的,我们可以看出,平均的偏移向量()h M x 会指向样本分布最多的区域,也就是概率密度函数的梯度方向.扩展的Mean Shift 核函数首先我们引进核函数的概念.定义:X 代表一个d 维的欧氏空间,x 是该空间中的一个点,用一列向量表示.x 的模2T x x x =.R 表示实数域.如果一个函数:K X R →存在一个剖面函数[]:0,k R ∞→,即()2()K x k x=(3)并且满足:(1)k 是非负的.(2)k 是非增的,即如果a b <那么()()k a k b ≥.(3)k 是分段连续的,并且()k r dr ∞<∞∫那么,函数()K x 就被称为核函数.举例:在Mean Shift 中,有两类核函数经常用到,他们分别是,单位均匀核函数:1 if 1()0 if 1x F x x ⎧<⎪=⎨≥⎪⎩(4)单位高斯核函数:2()xN x e−=(5)这两类核函数如下图所示.图2,(a)单位均匀核函数(b)单位高斯核函数一个核函数可以与一个均匀核函数相乘而截尾,如一个截尾的高斯核函数为,()2if ()0 ifx e x N F x x ββλλλ−⎧<⎪=⎨≥⎪⎩(6)图3显示了不同的,βλ值所对应的截尾高斯核函数的示意图.图3截尾高斯核函数(a)11N F (b)0.11NFMean Shift 扩展形式从(1)式我们可以看出,只要是落入h S 的采样点,无论其离x 远近,对最终的()h M x 计算的贡献是一样的,然而我们知道,一般的说来,离x 越近的采样点对估计x 周围的统计特性越有效,因此我们引进核函数的概念,在计算()h M x 时可以考虑距离的影响;同时我们也可以认为在这所有的样本点i x 中,重要性并不一样,因此我们对每个样本都引入一个权重系数.如此以来我们就可以把基本的Mean Shift 形式扩展为:()11()()()()()nHi i i i nHi i i Gx x w x x x M x Gx x w x ==−−≡−∑∑(7)其中:()()1/21/2()H i i G x x HG H x x −−−=−()G x 是一个单位核函数H 是一个正定的对称d d ×矩阵,我们一般称之为带宽矩阵()0i w x ≥是一个赋给采样点i x 的权重在实际应用的过程中,带宽矩阵H 一般被限定为一个对角矩阵221diag ,...,d H h h ⎡⎤=⎣⎦,甚至更简单的被取为正比于单位矩阵,即2H h I =.由于后一形式只需要确定一个系数h ,在Mean Shift 中常常被采用,在本文的后面部分我们也采用这种形式,因此(7)式又可以被写为:()11()()()(()ni i i i h ni i i x xG w x x x h M x x x G w x h ==−−≡−∑∑(8)我们可以看到,如果对所有的采样点i x 满足(1)()1i w x =(2) 1 if 1()0 if 1x G x x ⎧<⎪=⎨≥⎪⎩则(8)式完全退化为(1)式,也就是说,我们所给出的扩展的Mean Shift 形式在某些情况下会退化为最基本的Mean Shift 形式.M e an Shift 的物理含义正如上一节直观性的指出,Mean Shift 指向概率密度梯度方向,这一节将证明Mean Shift 向量()h M x 是归一化的概率密度梯度.在本节我们还给出了迭代Mean Shift 算法的详细描述,并证明,该算法会收敛到概率密度函数的一个稳态点.概率密度梯度对一个概率密度函数()f x ,已知d 维空间中n 个采样点i x ,i=1,…,n,()f x 的核函数估计(也称为Parzen 窗估计)为,11()ˆ()()ni i i nd i i x x K w x h f x h w x ==−⎛⎞⎜⎟⎝⎠=∑∑(9)其中()0i w x ≥是一个赋给采样点i x 的权重()K x 是一个核函数,并且满足()1k x dx =∫我们另外定义:核函数()K x 的剖面函数()k x ,使得()2()K x kx=(10);()k x 的负导函数()g x ,即'()()g x k x =−,其对应的核函数()2()G x g x=(11)概率密度函数()f x 的梯度()f x ∇的估计为:()2'1212()ˆˆ()()()ni i i i nd i i x x x x k w x h f x f x h w x =+=⎛⎞−−⎜⎟⎜⎟⎝⎠∇=∇=∑∑(12)由上面的定义,'()()g x k x =−,()2()G x gx=,上式可以重写为()()21212112112()ˆ()()()()2 ()()ni i i i nd i i ni ni i i i i i nd n i i i i i x xx x G w x h f x h w x x x x x x x G w x G w x h h x x h h w x G w x h =+=====⎛⎞−−⎜⎟⎜⎟⎝⎠∇=⎡⎤⎛⎞−⎡−⎤⎛⎞−⎢⎥⎜⎟⎜⎟⎜⎟⎢⎥⎢⎥⎝⎠⎝⎠⎢⎥=⎢⎥−⎛⎞⎢⎥⎢⎥⎜⎟⎢⎥⎝⎠⎢⎥⎣⎦⎣⎦∑∑∑∑∑∑(13)上式右边的第二个中括号内的那一部分就是(8)式定义的Mean Shift 向量,第一个中括号内的那一部分是以()G x 为核函数对概率密度函数()f x 的估计,我们记做ˆ()G f x ,而(9)式定义的ˆ()f x 我们重新记做ˆ()Kf x ,因此(11)式可以重新写为:ˆ()f x ∇=ˆ()K f x ∇=()22ˆ()Gh f x M x h(14)由(12)式我们可以得出,()2ˆ()1ˆ2()Kh G f x M x hf x ∇=(15)(15)式表明,用核函数G 在x 点计算得到的Mean Shift 向量()h M x 正比于归一化的用核函数K 估计的概率密度的函数ˆ()Kf x 的梯度,归一化因子为用核函数G 估计的x 点的概率密度.因此Mean Shift 向量()h M x 总是指向概率密度增加最大的方向.Mean Shift 算法算法步骤我们在前面已经指出,我们在提及Mean Shift 向量和Mean Shift 算法的时候指代不同的概念,Mean Shift 向量是名词,指的是一个向量;而Mean Shift 算法是动词,指的是一个迭代的步骤.我们把(8)式的x 提到求和号的外面来,可以得到下式,()11()()()()ni i i i h n i i i x xG w x x hM x xx x G w x h ==−=−−∑∑(16)我们把上式右边的第一项记为()h m x ,即11()()()()()ni i i i h ni i i x xG w x x hm x x x G w x h ==−=−∑∑(17)给定一个初始点x ,核函数()G X ,容许误差ε,Mean Shift 算法循环的执行下面三步,直至结束条件满足,(1).计算()h m x(2).把()h m x 赋给x(3).如果()h m x x ε−<,结束循环;若不然,继续执行(1).由(16)式我们知道,()()h h m x x M x =+,因此上面的步骤也就是不断的沿着概率密度的梯度方向移动,同时步长不仅与梯度的大小有关,也与该点的概率密度有关,在密度大的地方,更接近我们要找的概率密度的峰值,Mean Shift 算法使得移动的步长小一些,相反,在密度小的地方,移动的步长就大一些.在满足一定条件下,Mean Shift 算法一定会收敛到该点附近的峰值,这一收敛性由下面一小节给出证明.算法的收敛性证明我们用{}j y ,1,2,...j =来表示Mean Shift 算法中移动点的痕迹,由(17)式我们可写为,111()()()()ni ji i i j ni j i i x y G w x x hy x y G w x h =+=−=−∑∑,1,2,...j =(18)与j y 对应的概率密度函数估计值ˆ()jf y 可表示为,11()ˆ()()ni j i i K j nd i i x y K w x h f y h w x ==−⎛⎞⎜⎟⎝⎠=∑∑(19)下面的定理将证明序列{}j y 和{}ˆ()jf y 的收敛性.定理:如果核函数()K x 有一个凸的,单调递增的剖面函数,核函数()G x 由式(10)和(11)定义,则序列{}j y 和{}ˆ()jf y 是收敛的.证明:由于n 是有限的,核函数()(0)K x K ≤,因此序列{}ˆ()j f y 是有界的,所以我们只需要证明{}ˆ()jf y 是严格递增的的,即要证明,对所有j=1,2,…如果1j j y y +≠,那么ˆ()j f y 1ˆ()j f y +<(20)不失一般性,我们可以假设0j y =,由(19)式和(10)式,我们可以得到1ˆ()j f y +ˆ()j f y −=221111()()ni j i ji n i d i i x yx y k k w x h h h w x +==⎡⎤⎛⎞⎛⎞−−⎢⎥⎜⎟⎜⎟−⎜⎟⎜⎟⎢⎥⎝⎠⎝⎠⎣⎦∑∑(21)由于剖面函数()k x 的凸性意味着对所有12,[0,)x x ∈∞且12x x ≠,有'2121()()()()k x k x k x x x ≥+−(22)因为'()()g x k x =−,上式可以写为,2112()()()()k x k x g x x x −≥−(23)结合(21)与(23)式,可以得到,1ˆ()j f y +ˆ()jf y −222111211()()ni j i j i i n i d i i x y g x y x w x h h w x ++=+=⎛⎞−⎡⎤⎜⎟≥−−⎢⎥⎣⎦⎜⎟⎝⎠∑∑2211112112()()ni j T j i j i n i d i i x y g y x y w x h h w x +++=+=⎛⎞−⎡⎤⎜⎟=−⎢⎥⎣⎦⎜⎟⎝⎠∑∑12221211112()()()j n nT ii i i j i n d i i i i x x y x g w x y g w x h h h w x +++===⎡⎤⎛⎞⎛⎞=−⎢⎥⎜⎟⎜⎟⎜⎟⎜⎟⎢⎥⎝⎠⎝⎠⎣⎦∑∑∑(24)由(18)式我们可以得出,1ˆ()j f y +ˆ()jf y −2211211()n ij n i d i i x y g hhw x +=+=⎛⎞≥⎜⎟⎜⎟⎝⎠∑∑(25)由于剖面函数()k x 是单调递减的,所以求和项210nii xg h =⎛⎞>⎜⎟⎜⎟⎝⎠∑,因此,只要10j j y y +≠=(25)式的右边项严格大于零,即1ˆ()j f y +ˆ()j f y >.由此可证得,序列{}ˆ()jf y 收敛为了证明序列{}j y 的收敛性,对于0j y ≠,(25)式可以写为1ˆ()j f y +ˆ()jf y −2211211()ni jj jn i d i i x y y y g hhw x +=+=⎛⎞−⎜⎟≥−⎜⎟⎝⎠∑∑(26)现在对于标号j,j+1,…,j+m-1,对(26)式的左右两边分别求和,得到ˆ()j m f y +ˆ()jf y −22111211...()ni j m j m j m ni d i i x y y y g h h w x +−++−=+=⎛⎞−⎜⎟≥−+⎜⎟⎝⎠∑∑2211211()ni jj jn i d i i x y y y g hhw x +=+=⎛⎞−⎜⎟+−⎜⎟⎝⎠∑∑2211211...()j m j m j j n d i i y y y y M h w x ++−−+=⎡⎤≥−++−⎢⎥⎣⎦∑2211()j m j n d i i y y Mhw x ++=≥−∑(27)其中M 表示对应序列{}j y 的所有求和项21ni ji x y g h =⎛⎞−⎜⎟⎜⎟⎝⎠∑的最小值.由于{}ˆ()j f y 收敛,它是一个Cauchy 序列,(27)式意味着{}jy 也是一个Cauchy 序列,因此,序列{}j y 收敛.Mean Shift 的应用从前面关于Mean Shift 和概率密度梯度的关系的论述,我们可以清楚的看到,Mean Shift算法本质上是一个自适应的梯度上升搜索峰值的方法,如下图所示,如果数据集{},1,...i x i n =服从概率密度函数f(x),给定一个如图初始点x ,Mean Shift 算法就会一步步的移动,最终收敛到第一个峰值点.从这张图上,我们可以看到Mean Shift 至少有如下三方面的应用:(1)聚类,数据集{},1,...i x i n =中的每一点都可以作为初始点,分别执行Mean Shift 算法,收敛到同一个点算作一类;(2)模态的检测,概率密度函数中的一个峰值就是一个模态,Mean Shift 在峰值处收敛,自然可以找到该模态.(3)最优化,Mean Shift 可以找到峰值,自然可以作为最优化的方法,Mean Shift 算法进行最优化的关键是要把最优化的目标转化成Mean Shift 隐含估计的概率密度函数.图4.Mean Shift 算法示意图Mean Shift 算法在许多领域获得了非常成功的应用,下面简要的介绍一下其在图像平滑,图像分割以及物体跟踪中的应用,一来说明其强大的生命力,二来使对上文描述的算法有一个直观的了解.图像平滑与分割一幅图像可以表示成一个二维网格点上p 维向量,每一个网格点代表一个象素,1p =表示这是一个灰度图,3p =表示彩色图,3p >表示一个多谱图,网格点的坐标表示图像的空间信息.我们统一考虑图像的空间信息和色彩(或灰度等)信息,组成一个2p +维的向量(,)s r x x x =,其中s x 表示网格点的坐标,r x 表示该网格点上p 维向量特征.我们用核函数,s r h h K 来估计x 的分布,,s r h h K 具有如下形式,22,2s rs r h h p s r sr C x x K k k h h h h ⎛⎞⎛⎞⎜⎟⎜⎟=⎜⎟⎜⎟⎝⎠⎝⎠(28)其中,s r h h 控制着平滑的解析度,C 是一个归一化常数.我们分别用i x 和i z ,i=1,…,n 表示原始和平滑后的图像.用Mean Shift 算法进行图像平滑的具体步骤如下,对每一个象素点,1,初始化1j =,并且使,1i iy x =2,运用Mean Shift 算法计算,1i j y +,直到收敛.记收敛后的值为,i c y 3.赋值(),,s ri i i cz x y =图5是原始图像,图中40×20白框区域被选中来更好的显示基于Mean Shift 的图像平滑步骤,图6显示了这一区域的平滑步骤,x,y 表示这一区域内的象素点的坐标,图6(a)在一个三维空间显示了各个象素点的灰度值,图6(b)显示各点的移动痕迹,黑点是最终收敛值,图6(c)显示了平滑后的各象素点的灰度值,图6(d)是继续分割后的结果.图5.原始图像图6.(a)原始图像的各象素点灰度值.(b)各象素点的Mean Shift移动路径.(c)平滑后的各象素点的灰度值.(d)分割后的结果图7显示了图5经过平滑后的结果,我们可以看到,草地上的草地纹理被平滑掉了,而图像中边缘仍然很好的保持着..图7平滑后的结果h h是非常重要的参数,人们可以根据解析度的在基于Mean Shift的图像平滑中,式(28)中的,s rh h会对最终的平滑结果有一定的影响,图7显示了这两个参数对平要求而直接给定,不同,s rh影响更大一些.滑结果的影响,我们可以看出,s图8,原始图和平滑后的图基于Mean Shift的图像分割与图像平滑非常类似,只需要把收敛到同一点的起始点归为一类,然后把这一类的标号赋给这些起始点,在图像分割中有时还需要把包含象素点太少类去掉,图6(d)显示分割后的灰度值.图8,显示了图5经过分隔后的结果图8,分割后的结果物体跟踪我们用一个物体的灰度或色彩分布来描述这个物体,假设物体中心位于0x ,则该物体可以表示为()201ˆi i s n s u i x x q C k b x u h δ=⎛⎞−⎜⎟⎡⎤=−⎣⎦⎜⎟⎝⎠∑(29)候选的位于y 的物体可以描述为()21ˆ()h n s s i u h i i x y p y C k b x u h δ=⎛⎞−⎡⎤⎜⎟=−⎣⎦⎜⎟⎝⎠∑(30)因此物体跟踪可以简化为寻找最优的y ,使得ˆ()u py 与ˆu q 最相似.ˆ()u py 与ˆu q 的最相似性用Bhattacharrya 系数ˆ()y ρ来度量分布,即[]ˆ()(),m u y p y q ρρ=≡=(31)式(31)在ˆu p()0ˆy 点泰勒展开可得,[]1111(),(22m mu u u p y q p y ρ==≈∑(32)把式(30)带入式,整理可得,[]2111(),22mn hi i u i C y x p y q w k h ρ==⎛⎞−≈⎜⎟⎜⎟⎝⎠∑(33)其中,1[()m i i u w b x u δ==−∑对式(33)右边的第二项,我们可以利用Mean Shift 算法进行最优化.在Comaniciu 等人的文章中,他们只用平均每帧图像只用4.19次Mean Shift 迭代就可以收敛,他们的结果很显示在600MHz 的PC 机上,他们的程序可以每秒处理30帧352×240象素的图像.下图显示了各帧需要的Mean Shift 迭代次数.图9,各帧需要的Mean Shift迭代次数下图显示了Comaniciu等人的跟踪结果图10,基于Mean Shift的物体跟踪结果结论本文回顾了Mean Shift的发展历史,介绍了它的基本思想,给出了具体的算法步骤,详细证明了它与梯度上升搜索法的联系,并给出Mean Shift算法的收敛性证明,最后给出了Mean Shift在图像平滑,图像分割以及实时物体跟踪中的具体应用,显示Mean Shift强大的生命力.参考文献[1]The Estimation of the Gradient of a Density Function,with Applications in Pattern Recognition (1975)[2]Mean shift,mode seeking,and clustering(1995)[3]Mean Shift:a robust approach toward feature space analysis(2002)[4]Real-time tracking of non-rigid objects using mean shift(2000)[5]Mean-shift Blob Tracking through Scale Space(2003)[6]An algorithm for data-driven bandwidth selection(2003)。
mean-shift算法公式

mean-shift算法公式Mean-shift算法是一种无参聚类算法,常用于图像分割、目标跟踪和模式识别等领域。
本文将详细介绍mean-shift算法的原理、公式和实际应用场景。
一、原理Mean-shift算法的核心思想是密度估计和质心漂移。
它基于高斯核函数,通过不断更新质心,最终将数据点分为不同的簇。
具体而言,我们要对每个数据点x_i进行密度估计,将其周围的点加权后求和得到密度估计值f(x_i)。
给定一个初始质心x_c,我们通过以下公式计算新质心x_c’:x_c' = \frac{\sum_{x_i \in B(x_c,r)} w(x_i) \times x_i}{\sum_{x_i \in B(x_c,r)} w(x_i)}B(x_c,r)表示以x_c为圆心,半径为r的区域,w(x_i)为高斯权重系数,可以写作w(x_i) = e ^ {-\frac{(x_i - x_c)^2}{2 \times \sigma^2}}\sigma是高斯核函数的标准差,控制窗口大小和权重降低的速度。
在计算新质心后,我们将其移动到新位置,即x_c = x_c’,然后重复以上步骤,直到质心不再改变或者达到预定的迭代次数为止。
最终,所有距离相近的数据点被归为同一簇。
算法的时间复杂度为O(nr^2),其中n为数据点数量,r为窗口半径。
可以通过调整r和\sigma来平衡速度和准确率。
二、公式1. 高斯核函数w(x_i) = e ^ {-\frac{(x_i - x_c)^2}{2 \times \sigma^2}}其中x_i和x_c是数据点和质心的位置向量,\sigma是高斯核函数的标准差。
该函数表示距离越大的数据点的权重越小,与质心距离越近的数据点的权重越大,因此可以有效估计密度。
2. 新质心计算公式x_c' = \frac{\sum_{x_i \in B(x_c,r)} w(x_i) \times x_i}{\sum_{x_i \in B(x_c,r)} w(x_i)}B(x_c,r)表示以x_c为圆心,半径为r的区域,w(x_i)为高斯权重系数。
meanshift 算法matlab代码

一、Meanshift算法简介Meanshift算法是一种基于密度估计的聚类算法,它通过不断调整数据点的位置来找到数据集中的局部最大值。
该算法最初由Fukunaga 和Hostetler在上世纪70年代提出,后来由Dorin Comaniciu和Peter Meer在2002年进行了改进,成为了在计算机视觉和模式识别领域被广泛应用的算法之一。
Meanshift算法在图像分割、目标跟踪和特征提取等领域有着广泛的应用,其优点是不需要预先指定聚类的个数,能够自适应地发现数据中的聚类结构。
本文将介绍Meanshift算法的基本原理,并给出在Matlab中的实现代码。
二、Meanshift算法的基本原理1. 数据点的内核密度估计Meanshift算法基于密度估计的原理,它首先对数据点进行内核密度估计。
对于每一个数据点x,其内核密度估计可以表示为:\[ f(x)=\frac{1}{nh^d}\sum_{i=1}^{n}K\left(\frac{x-x_i}{h}\right)\]其中,n为数据点的数量,h为内核函数的带宽,K为内核函数,d为数据点的维度。
2. Meanshift向量的计算在得到数据点的密度估计之后,Meanshift算法通过不断调整数据点的位置来找到局部最大值。
对于数据点x,其Meanshift向量可以表示为:\[ m(x)=\frac{\sum_{i=1}^{n}K\left(\frac{x-x_i}{h}\right)x_i}{\sum_{i=1}^{n}K\left(\frac{x-x_i}{h}\right)}-x\]Meanshift向量的计算可以理解为将数据点向其密度估计的最大值方向移动,直至收敛于密度估计的局部最大值位置。
3. 聚类的形成Meanshift算法通过不断迭代调整数据点的位置,当数据点的移动趋于收敛之后,将在同一局部最大值处的数据点归为同一类,从而形成聚类。
三、Meanshift算法的Matlab代码实现在Matlab中,可以通过以下代码实现Meanshift算法的聚类:```matlabfunction [labels, centroids] = meanshift(data, bandwidth)[n, d] = size(data);labels = zeros(n, 1);stopThresh = 1e-3 * bandwidth;numClusters = 0;计算内核密度估计f = (x) exp(-sum((x - data).^2, 2) / (2 * bandwidth^2));迭代计算Meanshift向量for i = 1:nif labels(i) == 0x = data(i, :);diff = inf;while truex_old = x;weights = f(x);x = sum(repmat(weights, 1, d) .* data) / sum(weights); diff = norm(x - x_old);if diff < stopThreshbreak;endend将收敛的数据点归为同一类numClusters = numClusters + 1;idx = find(weights > 0.5);labels(idx) = numClusters;endend计算聚类中心centroids = zeros(numClusters, d);for i = 1:numClustersidx = find(labels == i);centroids(i, :) = mean(data(idx, :));endend```以上代码实现了对输入数据data进行Meanshift聚类,其中bandwidth为内核函数的带宽。
meanshif算法简介PPT课件

Meanshift的背景
Mean Shift 这个概念最早是由 Fukunaga等人于1975年在一篇关于概率密度梯度函 数的估计中提出来的,其最初含义正如其名,就是偏 移的均值向量。
直到20年以后,也就是1995年,,Yizong Cheng 发表了一篇对均值漂移算法里程碑意义的文章。对 基本的Mean Shift算法在以下两个方面做了改进, 首先Yizong Cheng定义了一族核函数,使得随着样 本与被偏移点的距离不同,其偏移量对均值偏移向 量的贡献也不同,其次Yizong Cheng还设定了一个 权重系数,使得不同的样本点重要性不一样,这大大 扩大了Mean Shift的适用范围.另外Yizong Cheng 指出了Mean Shift可能应用的领域,并给出了具体 的例子。
Mean shift向量的物理意义的什么呢?
为了更好地理解这个式子的物理意义,假设上式中g(x)=1 平均的偏移量会指向样本点最密的方向,也 就是概率密度函数梯度方向
下面我们看一下mean shift算法的步骤
mh x
给定一个初始点x,核函数G(x), 容许误差 ,Mean
Shift算法循环的执行下面三步,直至结束条件满足,
若再考虑到
这个表达式就是基于核函数
的概率密度函数的估计
怎样找到数据集合中数据最密集的地方呢?
数据最密集的地方,对应于概率密度最大的地方。我们可 以对概率密度求梯度,梯度的方向就是概率密度增加最大 的方向,从而也就是数据最密集的方向。
令 的梯度对所有 廓函数,核函数
,假设除了有限个点,轮廓函数
均存在 。将
Meanshift的应用
• Mean Shift可以应用在很多领域,比如聚类,图像平 滑,,图像分割。尤其是应用在目标跟踪领域,其跟踪
meanshift计算方法
meanshift计算方法Meanshift是一种经典的非参数密度估计和聚类算法,常用于图像处理、目标跟踪和图像分割等任务。
Meanshift算法的核心思想是通过迭代寻找样本空间中的密度极大值点,从而找到数据的聚类中心。
该方法的基本原理如下:1.密度估计:首先,对于给定的数据集,通过核密度估计方法来估计数据集中每个样本点的密度。
核密度估计是一种非参数的密度估计方法,通过计算每个样本点周围的核密度来估计该样本点的密度。
常用的核函数有高斯核函数和均匀核函数等。
2.中心寻找:从样本空间中任意选择一个点作为初始中心点。
然后,计算该点与样本空间中其他点之间的距离,并根据距离来调整中心点的位置。
具体而言,可以使用欧氏距离或其他距离度量来计算中心点与样本点之间的距离。
调整中心点的位置是通过计算样本点对中心点的贡献度来实现的,贡献度是根据距离的远近来确定的。
距离越近的样本点对中心点的贡献度越大,距离越远的样本点对中心点的贡献度越小。
3.密度更新:根据样本空间中当前的中心点,计算每个样本点与中心点之间的距离,并根据距离的远近来更新样本点的密度。
即,距离越近的样本点密度越高,距离越远的样本点密度越低。
通过迭代更新样本点的密度,可以逐渐得到数据集在样本空间中的密度分布。
4.收敛判断:判断中心点的位置是否稳定(即中心点是否收敛)。
当中心点的移动距离小于设定的阈值时,算法停止迭代,并输出最终的聚类中心。
Meanshift算法的优点是可以适应任意形状和密度的数据集,并且不需要事先指定聚类的数量。
它能够自动发现数据集中的聚类中心,并将数据点聚集在它们周围。
同时,Meanshift算法对初始中心点的选择不敏感,因此较为稳定。
然而,Meanshift算法也存在一些缺点。
首先,该算法的时间复杂度较高,其计算复杂度为O(N^2),其中N为数据集的大小。
其次,Meanshift算法在处理高维数据时容易受到维数灾难的影响,数据点之间的距离随着维数的增加而呈指数增长,导致聚类结果不准确。
meanshift算法简介
基于核函数G(x)的 概率密度估计
•
用核函数G在 x点计算得到的Mean Shift 向量 正比于归一化的用核函数K估计的概率 密度的函数 的梯度,归一化因子为用核函数 G估计的x点的概率密度.因此Mean Shift向量 总是指向概率密度增加最大的方向.
Mean shift向量的物理意义的什么呢?
2ck ,d
n
2
2ck ,d cg ,d 2 d h cg ,d nh
g i 1
n
n x xi 2 xi g 2 h x xi i 1 x n x x 2 h i g h i 1
为了更好地理解这个式子的物理意义,假设上式中g(x)=1
平均的偏移量会指向样本点最密的方向,也 就是概率密度函数梯度方向
下面我们看一下mean shift算法的步骤
mh x
给定一个初始点x,核函数G(x), 容许误差 ,Mean Shift算法 循环的执行下面三步,直至结束条件满足, •计算mh ( x) •把 mh ( x)赋给 x. •如果 mh ( x) x ,结束循环;若不然,继续执行(1)
0 =1,2…..m i=1,2…..m
(5)若
,则停止;否则y ←y1转步骤②。
0
限制条件:新目标中心需位于原目标中 心附近。
Meanshift跟踪结果
• 转word文档。
• Meanshift优缺点: 优点 ①算法复杂度小; ②是无参数算法,易于与其它算法集 成; ③采用加权直方图建模,对目标小角 度旋转、轻微变形和部分遮挡不敏感等。
MeanShift
§5-1Mean Shift 算法Mean Shift 算法是由Fukunaga 和Hosteler 于1975年提出的一种无监督聚类方法[109],Mean Shift 的含义是均值偏移向量,它使每一个点“漂移”到密度函数的局部极大值点。
但是再提出之初,Mean Shift 算法并没有得到广泛的重视,直到1995年,Cheng 等人对该算法进行了进一步的研究[110],提出了一般的表达形式并定义了一族核函数,从而扩展了该算法的应用领域,此后Mean Shift 算法逐步得到了人们的重视。
目前,Mean Shift 算法已广泛应用于目标跟踪[111~114]、图像分割与平滑[115~118]等领域,同时由于该算法具有简洁、能够处理目标变形等优点,也是目前目标跟踪领域的一个重要研究热点。
5-1-1 Mean Shift 算法原理Mean Shift 算法是一种基于密度梯度的无参数估计方法,从空间任意一点,沿核密度的梯度上升方向,以自适应的步长进行搜索,最终可以收敛于核密度估计函数的局部极大值处。
基本的Mean Shift 算法可以描述为:设{}()1,,i x i n = 为d 维空间R d 中含有n 个样本点的集合,在点x 处的均值偏移向量的基本形式可以由式(5.1)表示:1()()hh ix S M x xx k∈=-∑ (5.1)其中,S h 是R d 中满足式(5.2)的所有y 点集合,其形状为一个半径为h 的高维球区域。
k 为所有n 个样本点中属于高维球区域的点的数目。
(x i -x )为样本点相对于点x 的偏移向量。
根据式(5.1)的定义可知,点x 的均值偏移向量就是所有属于S h 区域中的样本点与点x 的偏移向量均值,而S h 区域中的样本点大多数是沿着概率密度梯度的方向,所以均值漂移向量的方向与概率密度梯度方向一致,图5.1为具体的示意图。
{}2():()()Th S x y y x y x h=--≤ (5.2)图5.1 Mean Shift 示意图 Fig.5.1 Mean Shift sketch map根据式(5.1)和图5.1可以看出,所有属于区域S h 中的样本点对于点x 的均值漂移向量贡献度相同,而与这些点与点x 间的距离无关。
MeanShift算法
核函数也称“窗口函数”。
一维空间用到的核函数有高斯(Gaussian)、余弦弧(Cosinus arch)、双指数(Double Exponential)、均匀(Uniform)、三角(Trangle)、依潘涅契科夫(Epanechikov)、双依潘涅契科夫(DoubleEpanechnikov)、及双权(Biweight)函数。
图2.1给出了最常用的几个核函数给定一组一维空间的n个数据点集合令该数据集合的概率密度函数假设为f (x),核函数取值为,那么在数据点x处的密度估计可以按下式计算:上式就是核密度估计的定义。
其中,x为核函数要处理的数据的中心点,即数据集合相对于点x几何图形对称。
核密度估计的含义可以理解为:核估计器在被估计点为中心的窗口内计算数据点加权的局部平均。
或者:将在每个采样点为中心的局部函数的平均效果作为该采样点概率密度函数的估计值。
MeanShift实现:1.选择窗的大小和初始位置.2.计算此时窗口内的Mass Center.3.调整窗口的中心到Mass Center.4.重复2和3,直到窗口中心"会聚",即每次窗口移动的距离小于一定的阈值,或者迭代次数达到设定值。
meanshift算法思想其实很简单:利用概率密度的梯度爬升来寻找局部最优。
它要做的就是输入一个在图像的范围,然后一直迭代(朝着重心迭代)直到满足你的要求为止。
但是他是怎么用于做图像跟踪的呢?这是我自从学习meanshift以来,一直的困惑。
而且网上也没有合理的解释。
经过这几天的思考,和对反向投影的理解使得我对它的原理有了大致的认识。
在opencv中,进行meanshift其实很简单,输入一张图像(imgProb),再输入一个开始迭代的方框(windowIn)和一个迭代条件(criteria),输出的是迭代完成的位置(comp )。
这是函数原型:int cvMeanShift( const void* imgProb, CvRect windowIn,CvTermCriteria criteria, CvConnectedComp* comp )但是当它用于跟踪时,这张输入的图像就必须是反向投影图了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4
M h ( x)
1 n
i 1
n
( xi x)
平均的偏移量会指向样本点最密的方向,也 就是概率密度函数梯度方向,引入核函数和 权重系数后得到:
M h ( x ) i 1
n
Gh ( xi x ) w( x ) ( xi x ) i n
i 1
Gh ( xi x ) w( xi )
我们使用Bhattacharyya系数作为相似性函数
其值在0到1之间。 的值越大,表示两个模型越相似,在 当前帧中不同的候选区域计算得到的候选模型,使得 最 大候选区域即是在本帧中目标的位置。
目标定位
为使 最大,将当前帧的目标中心先定位为前一帧中目标中的位 置 ,从这一点开始寻找最优匹配的目标,其中心为y。先计算目 标候选模型 ,对 在 处进行泰勒级数展开, Bhattachcyarya系数可近似为:
q
q1 , , qm
1
p y
p1 y , , pm y
T
y
1
p y
m p y q f y cos y pu y qu p y q u 1
相似性函数描述目标模型和候选模型之间的相似程度,在理想 情况下两个模型的概率分布是完全一样的。
• 上面的步骤也就是不断的沿着概率密度的 梯度方向移动,同时步长不仅与梯度的大小 有关,也与该点的概率密度有关,在密度大的 地方,更接近我们要找的概率密度的峰值 ,Mean Shift算法使得移动的步长小一些;相 反,在密度小的地方,移动的步长就大一些.在 满足一定条件下,Mean Shift算法一定会漂移 到该点附近的峰值。
下面我们看一下mean shift算法的步骤
mh x
给定一个初始点x,核函数G(x), 容许误差 ,Mean Shift算法 循环的执行下面三步,直至结束条件满足, •计算 mh ( x) x . •把 mh ( x) 赋给 •如果 mh ( x) x , 结束循环;若不然,循环执行
Gh( x x) H i
1/ 2
G(H 1/ 2 ( xi x))
G(x)是一个单位核函数,H是一个正定dxd的对称矩阵,又称带宽矩阵。 w(xi)是采样点xi的权重
2 通常H取为正比于单位矩阵的对角阵即 H h E ; h为核函数的带宽,为一确定在系数,常用的单位核函数G(x) 如下: 分别是单位均匀核函数 和单位高斯核函数;前面公式可写为:
其中:
类似于核函数密度估计,不过多了一个权值wi。使 式最大, 就是要求 式最大,可以计算 的Mean Shift向量,这样 我们就可以得到候选区域中心 移向真实目标区域y的向量:
=
其中 值得注意的是,一般在一帧中找到目标的位置,需要Mean Shift算法从开始若干次迭代才能得到。
算法过程
(1).初始化搜索窗 (2).计算搜索窗的颜色概率分布(反向投影) (3).运行meanshift算法,获得搜索窗新的大小和位置。
由上式可得:
M h ( x)
1 2 Δ f K ( x) h ^ 2 f G ( x)
^
该式表明用核函数G在x点得到的Meanshift向量正比于归一 化的用核函数K估计的概率密度梯度(归一化因子即分母为用 核函数G估计的x点概率密度)。 数据最密集的地方,对应于概率密度最大的地方。对概率 密度求梯度,梯度的方向就是概率密度增加的方向,从而 也就是向最密集的方向漂移。
均值漂移在目标跟踪中应用
1:目标模型叙述
2:候选目标叙述 3: 相似型函数比较 4:目标定位 5:整个算法流程
目标模型的描述
在起始帧,通过鼠标确定一个包含所有目标特征的矩形, 称为被跟踪目标的目标区域,这个目标区域也是核函数作 用的区域,区域的大小等于核函数的带宽。 对目标区域进行描述,常用的方法是按照直方图的方式 将图像像素的值域等分成k个区间,每个区间按照值域的大 小对应一个特征值。然后求出图像的像素值取每个特征值 的概率。
对在初始帧图像中目标区域内所有的象素点,计算每个 特征值的概率,我们称为目标模型的描述。
目标区域的中心为 ,假设其中有n个象素用 特征值的个数为m个 ,则目标模型的特征值 度估计为:
q qu u 1..m
表示, 的概率密
m
q
u 1
u
1
为核函数的轮廓函数,由于遮挡或者背景的影响,目 标模型中心附近的象素比外物象素更可靠, 对中心的象素 给一个大的权值,而远离中心的象素一个小的权值 总得作用是判断目标区域中象素的值是否属于 第u个特征值。b(xi)是灰度值索引函数。属于该特征则值为1, 否则为0(pdf)。 C是一个标准化的常量系数,使得 于是我们得到了基于图像灰度特征的颜色直方图。
(4).在下一帧视频图像中重新搜索窗的大小和位置, 进行相似度匹配, 再跳转到(2)继续进行,直 到 mh ( x) x 。
Meanshift优缺点: 优点 1.算法计算量不大,在目标区域已知的情况下完全可以做到实时 跟踪 2.采用核函数直方图模型,对边缘遮挡、目标旋转、变形和背景 运动不敏感 缺点: 1.缺乏必要的模板更新 2.跟踪过程中由于窗口宽度大小保持不变,当目标尺度有所变化 时,跟踪就会失败 3.当目标速度较快时,跟踪效果不好 4.直方图特征在目标颜色特征描述方面略显匮乏,缺少空间信息 改进和调整 1.引入一定的目标位置变化的预测机制,进一步减少meanShift跟 踪的搜索时间,降低计算量 2.可以采用一定的方式来增加用于目标匹配的“特征” 3.将传统meanShift算法中的核函数固定带宽改为动态带宽
Meanshift算法的概述及其应用
直观描述
感兴趣区域 质心
目的:找出最密集的区域 完全相同的桌球分布
Mean Shift 矢量
Meanshift介绍
Meanshift算法是Fukunaga于1975年提出的。直到 1995年, Yizong Cheng针对离x越近的采样点对x周围的 统计特性越有效,定义了一族核函数。同时他认为所有的 样本点重要性不同,设定了一个权重系数,扩大了 Meanshift的使用范围。其思想概括起来就是:利用概率 密度的梯度爬升来寻找局部最优。输入一个在图像的范围, 然后Meanshift算法迭代(朝着重心迭代)直到满足要求 为止。 Meanshift的基本形式为: ( x) 1 ( x x)
2
上式对x求导,得到概率密度函数的梯度函数 ▽fK(x):
2
▽ f K ( x)
i 1
n
( xi x )G (
n
xi x h w( xi )
2
) w( xi )
h d 2
i 1
2 2 h
xi x G( ) w( xi ) h i 2 n hd w( xi ) i 1
是标准化常量
相似性函数的比较
模板区域: 候选区域: 相似性函数:
q q1 , , qm p y p1 y , , pm y
f y f p y , q ?
q
Bhattacharyya 系数
候选模型的描述
运动目标在第二帧及以后的每帧中可能包含目标的区域称为候 选区域,其中心坐标为y,也是核函数的中心坐标。该区域中的 象素用 表示。对候选区域的描述我们成为目标候 选模型,候选模型的特征值 的概率密度为:
p y pu y u 1..m
p
u 1
m
u
1
其中
对目标进行跟踪时,可以把图片想象成一张概率密度 图。图像输入后是一个目标图像的直方图(也可以认为是 目标图像),还一个输入是当前图像就是你要跟踪的全图, 输出大小与全图一样大,它上像素点表征着一种概率,就 是全图上这个点是目标图像一部分的概率。如果这个点越 亮,就说明这个点属于物体的概率越大。现在我们明白了 这原来是一张概率图了。当用meanshift跟踪时,输入的原 来是这样一幅图像,如此可以实现对目标的跟踪。 关键:反向投影 如果一幅图像的区域中显示 的是一种结构纹理或者一个独特的物体,那么这个区域的 直方图可以看作一个概率函数,给出的是某个像素属于该 纹理或物体的概率。所谓反向投影就是首先计算某一特征 的直方图模型,然后使用模型去寻找测试图像中存在的该 特征。
n
i 1
n
x x ( xi x)G i h
i 1
n
w( x ) i ^ 2 f ( x) M ( x) G h 2 h x x G( i ) w( xi ) h
2
以G(x)为核函数的概率密度函数
用核函数G在x点的Meanshift向量
M h ( x)
i 1
n
G(
n
xi x ) w( xi ) ( xi x) h G( xi x ) w( xi ) h
i 1
这里可以看到若W(xi)=1, G(x)=1时, 就转化成了meanshift基本形式。
多维空间下的无参密度估计(以下是证明Meanshift向量Mh(x)总是向 密度增加的方向漂移): 在d维欧式空间X中,x表示该空间中的一个点, 的核函数, f(x)的概率密度函数为:
^
表示该空间中
f ( x)
i 1
n
K(
xi x ) w( xi ) h
n
hd
i 1
w( xi )
2 K ( X ) k (|| x ||) 核函数K(K(x)的负倒数为g(x),即
其对应的核函数为 G ( X ) g (|| x ||)