精华内容
下载资源
问答
  • mean shift

    2016-02-29 09:27:03
    本程序是基于matlab的mean shift算法代码,对初学者有较好的指导意义。
  • Mean Shift

    2018-11-24 14:35:04
    论文学习--Real-Time Tracking of Non-Rigid Objects using Mean ShiftMean Shift一、基本形式二、加入核函数后的Mean Shift三、Mean Shift实现聚类的流程 Mean Shift Mean Shift是一种聚类算法,有些类似于回归中的...

    论文学习--Real-Time Tracking of Non-Rigid Objects using Mean Shift

    Mean Shift

    Mean Shift是一种聚类算法,有些类似于回归中的梯度下降法,是通过一步步的迭代来实现最大密度的定位。

    一、基本形式

    给定d维空间的n个数据点集X,那么对于空间中的任意点x的Mean Shift向量基本形式可以表示为:
    在这里插入图片描述
    这个向量即被成为“漂移向量”,其中Sk表示一个高维球(因为数据X为d维),x表示该球的球心,xi表示数据集中的数据。该向量即表示球内所有起点为球心,终点为各个数据的向量均值。漂移即指更新球心位置。
    在这里插入图片描述
    总结为一句话就是:求解一个向量,使得圆心一直往数据集密度最大的方向移动。说的再简单一点,就是每次迭代的时候,都是找到圆里面点的平均位置作为新的圆心位置。

    二、加入核函数后的Mean Shift

    简单点说就是加入一个高斯权重(使用高斯核函数),最后的漂移向量公式为:
    在这里插入图片描述
    因此每次更新的圆心坐标为:

    在这里插入图片描述

    三、Mean Shift实现聚类的流程

    假设在一个多维空间中有很多数据点需要进行聚类,Mean Shift的过程如下:
    1、在未被标记的数据点中随机选择一个点作为中心点center
    2、找出距离center点在bandwidth内的所有点,记为集合M,认为这些点属于簇c。同时把球内点属于这个类的概率加一。
    3、以center为中心点,计算向量shift,并进行center的移动(即center=center+shift)。
    4、重复2、3步骤,知道shift的值很小(即达到收敛),得到此时的center。在该迭代过程中所有的点都归类与簇c。
    5、如果收敛时当前簇c的center和其他已经存在的簇的center的距离小于阈值,那么把两个簇合并,否则就把簇c当作新的聚类,增加一类。
    6、重复以上步骤直到所有点都被标记访问。
    7、分类:根据每个类对每个点的访问频率,取访问频率最大的那个类作为当前簇的所属类。

    展开全文
  • meanshift

    2018-03-29 12:48:22
    记得刚读研究生的时候,学习的第一个算法就是meanshift算法,所以一直记忆犹新,今天和大家分享一下Meanshift算法,如有错误,请在线交流。Mean Shift算法,一般是指一个迭代的步骤,即先算出当前点的偏移均值,移动该...

    记得刚读研究生的时候,学习的第一个算法就是meanshift算法,所以一直记忆犹新,今天和大家分享一下Meanshift算法,如有错误,请在线交流。

    Mean Shift算法,一般是指一个迭代的步骤,即先算出当前点的偏移均值,移动该点到其偏移均值,然后以此为新的起始点,继续移动,直到满足一定的条件结束.

     1. Meanshift推导

    给定d维空间Rd的n个样本点 ,i=1,…,n,在空间中任选一点x,那么Mean Shift向量的基本形式定义为:                             

     Sk是一个半径为h的高维球区域,满足以下关系的y点的集合,

    k表示在这n个样本点xi中,有k个点落入Sk区域中.

    以上是官方的说法,即书上的定义,我的理解就是,在d维空间中,任选一个点,然后以这个点为圆心,h为半径做一个高维球,因为有d维,d可能大于2,所以是高维球。落在这个球内的所有点和圆心都会产生一个向量,向量是以圆心为起点落在球内的点位终点。然后把这些向量都相加。相加的结果就是Meanshift向量。

    如图所以。其中黄色箭头就是Mh(meanshift向量)。

    再以meanshift向量的终点为圆心,再做一个高维的球。如下图所以,重复以上步骤,就可得到一个meanshift向量。如此重复下去,meanshift算法可以收敛到概率密度最大得地方。也就是最稠密的地方。

    最终的结果如下:

    Meanshift推导:

     把基本的meanshift向量加入核函数,核函数的性质在这篇博客介绍:http://www.cnblogs.com/liqizhou/archive/2012/05/11/2495788.html

    那么,meanshift算法变形为

                                                             (1)

    解释一下K()核函数,h为半径,Ck,d/nh为单位密度,要使得上式f得到最大,最容易想到的就是对上式进行求导,的确meanshift就是对上式进行求导.

    (2)             

    令:

    K(x)叫做g(x)的影子核,名字听上去听深奥的,也就是求导的负方向,那么上式可以表示

    对于上式,如果才用高斯核,那么,第一项就等于fh,k

    第二项就相当于一个meanshift向量的式子:

     那么(2)就可以表示为

    下图分析的构成,如图所以,可以很清晰的表达其构成。

    要使得=0,当且仅当=0,可以得出新的圆心坐标:

                              (3) 

     

    上面介绍了meanshift的流程,但是比较散,下面具体给出它的算法流程。

    1. 选择空间中x为圆心,以h为半径为半径,做一个高维球,落在所有球内的所有点xi
    2. 计算,如果<ε(人工设定),推出程序。如果>ε, 则利用(3)计算x,返回1.

     

    2.meanshift在图像上的聚类:

    真正大牛的人就能创造算法,例如像meanshift,em这个样的算法,这样的创新才能推动整个学科的发展。还有的人就是把算法运用的实际的运用中,推动整个工业进步,也就是技术的进步。下面介绍meashift算法怎样运用到图像上的聚类核跟踪。

    一般一个图像就是个矩阵,像素点均匀的分布在图像上,就没有点的稠密性。所以怎样来定义点的概率密度,这才是最关键的。

    如果我们就算点x的概率密度,采用的方法如下:以x为圆心,以h为半径。落在球内的点位xi   定义二个模式规则。

    (1)x像素点的颜色与xi像素点颜色越相近,我们定义概率密度越高。

    (2)离x的位置越近的像素点xi,定义概率密度越高。

    所以定义总的概率密度,是二个规则概率密度乘积的结果,可以(4)表示

    (4)

    其中:代表空间位置的信息,离远点越近,其值就越大,表示颜色信息,颜色越相似,其值越大。如图左上角图片,按照(4)计算的概率密度如图右上。利用meanshift对其聚类,可得到左下角的图。

     

    展开全文
  • Meanshift

    2014-10-21 21:28:42
    meanshift算法思想其实很简单:利用概率密度的梯度爬升来寻找局部最优。它要做的就是输入一个在图像的范围,然后一直迭代(朝着重心迭代)直到满足你的要求为止。但是他是怎么用于做图像跟踪的呢?这是我自从学习...
    meanshift算法思想其实很简单:利用
    概率密度
    的梯度爬升来寻找局部最优。它要做的就是输入一个在图像的范围,然后一直迭代(朝着重心迭代)直到满足你的要求为止。但是他是怎么用于做图像跟踪的呢?这是我自从学习meanshift以来,一直的困惑。而且网上也没有合理的解释。经过这几天的思考,和对反向投影的理解使得我对它的原理有了大致的认识。 
    

            在opencv中,进行meanshift其实很简单,输入一张图像(imgProb),再输入一个开始迭代的方框(windowIn)和一个迭代条件(criteria),输出的是迭代完成的位置(comp )。

           这是函数原型:

          int cvMeanShift( const void* imgProb, CvRect windowIn,CvTermCriteria criteria, CvConnectedComp* comp )

         但是当它用于跟踪时,这张输入的图像就必须是反向投影图了。

         为什么必须是反向投影图呢?首先我们要理解什么是反向投影图。

         简单理解它其实实际上是一张概率密度图。经过反向投影时的输入是一个目标图像的直方图(也可以认为是目标图像),还一个输入是当前图像就是你要跟踪的全图,输出大小与全图一样大,它上像素点表征着一种概率,就是全图上这个点是目标图像一部分的概率。如果这个点越亮,就说明这个点属于物体的概率越大。现在我们明白了这原来是一张概率图了。当用meanshift跟踪时,输入的原来是这样一幅图像,那也不难怪它可以进行跟踪了。

     

      半自动跟踪思路:输入视频,用画笔圈出要跟踪的目标,然后对物体跟踪。

      用过opencv的都知道,这其实是camshiftdemo的工作过程。

        第一步:选中物体,记录你输入的方框和物体。

        第二步:求出视频中有关物体的反向投影图。

        第三步:根据反向投影图和输入的方框进行meanshift迭代,由于它是向重心移动,即向反向投影图中概率大的地方移动,所以始终会移动到目标上。

         第四步:然后下一帧图像时用上一帧输出的方框来迭代即可。

     

     

      全自动跟踪思路:输入视频,对运动物体进行跟踪。

        第一步:运用运动检测算法将运动的物体与背景分割开来。

        第二步:提取运动物体的轮廓,并从原图中获取运动图像的信息。

        第三步:对这个信息进行反向投影,获取反向投影图。

        第四步:根据反向投影图和物体的轮廓(也就是输入的方框)进行meanshift迭代,由于它是向重心移动,即向反向投影图中概率大的地方移动,所以始终会移动到物体上。

         第五步:然后下一帧图像时用上一帧输出的方框来迭代即可。

     

         总结:用meanshift进行跟踪最重要的一点是输入图像的把握,也就是要让它的迭代能越来越迭代到目标上。这种图像也不一定就是反向投影图,只要是一幅反映当前图像中每个像素点含有目标概率图就可以了,其实反向投影图就是这样的一幅图而已。

    展开全文
  • meanShift

    千次阅读 2013-12-22 13:54:05
    Finds an object on a back projection image. ...C++: int meanShift(InputArray probImage, Rect& window, TermCriteria criteria) Python: cv2.meanShift(probImage, window, criteria) → retval, window

    Finds an object on a back projection image.

    C++: int meanShift (InputArray probImage, Rect& window, TermCriteria criteria )

    Python: cv2. meanShift (probImage, window, criteria ) → retval, window

    C: int cvMeanShift (const CvArr* prob_image, CvRect window, CvTermCriteria criteria, CvConnectedComp* comp )

    Python: cv. MeanShift (prob_image, window, criteria ) → comp
    Parameters:
    • probImage – Back projection of the object histogram. See calcBackProject() for details.
    • window – Initial search window.
    • criteria – Stop criteria for the iterative search algorithm.
    Returns:

    Number of iterations CAMSHIFT took to converge.

    The function implements the iterative object search algorithm. It takes the input back projection of an object and the initial position. The mass center in window of the back projection image is computed and the search window center shifts to the mass center. The procedure is repeated until the specified number of iterations criteria.maxCount is done or until the window center shifts by less than criteria.epsilon . The algorithm is used insideCamShift() and, unlikeCamShift() , the search window size or orientation do not change during the search. You can simply pass the output ofcalcBackProject() to this function. But better results can be obtained if you pre-filter the back projection and remove the noise. For example, you can do this by retrieving connected components withfindContours() , throwing away contours with small area (contourArea() ), and rendering the remaining contours withdrawContours() .

    Note

    • A mean-shift tracking sample can be found at opencv_source_code/samples/cpp/camshiftdemo.cpp
    展开全文
  • mean shift算法的彩图分割算法,能够实现彩色图像的相关分割,亲测有效。
  • Meanshift的matlab代码MeanShift++ MeanShift_cpp 是 MeanShift 聚类在 C++ 中的实现 当前版本 当前版本可以使用,但非常有限 用法 当前的编程模型包括一个类MeanShiftMeanShift 构造函数将函数指针指向要在聚类...
  • mean shift 相关.rar

    2021-09-14 14:57:59
    11、MeanShift算法详解以及mat lab源码(包里面有matlab源码以及对meanshift算法详细介绍,ppt, word文档) 12、meanshift跟踪 代码以及kalman滤波处理 13、MeanShift实现聚类(将mean shift算法用于聚类) 14、mean...
  • 一个外国人写的很好的meanshift聚类算法,有例程,可运行.meanshift均值平移跟踪算法中核函数窗宽的自动选取代码,根据目标大小变化核窗宽,使得当目标出现大小变化时准确跟踪到目标中心。实现了基于mean-shift的...
  • camshift meanshift

    2019-05-31 18:43:56
    适用于meanshift与camshift的初学者
  • Meanshift的matlab代码使用 Tensorflow 进行均值漂移聚类 由 Phong Le () 编写和维护 描述 使用高斯核进行聚类。 要求 Python 3.5 跑步 要设置参数,打开src/meanshift.py n_samples = 300 # sample size n_...
  • MeanShift追踪算法

    2012-11-27 13:11:12
    MeanShift
  • Meanshift C++

    2016-06-01 19:13:37
    Meanshift目标跟踪算法,VS2013环境下直接运行
  • 基于mean shift图像检索matlab代码,包括mean shift图像平滑和图像分割 基于mean shift图像检索matlab代码,包括mean shift图像平滑和图像分割
  • meanshift算法

    2012-09-24 14:53:02
    用于meanshift图像分割,meanshift_iteration = 5;

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,813
精华内容 8,325
关键字:

meanshift