精华内容
参与话题
问答
  • 均值漂移

    2017-06-04 17:12:14
    均值漂移(Meanshift)算法理解 1.均值漂移的基本概念:沿着密度上升方向寻找聚簇点 设想在一个有N个样本点的特征空间 初始确定一个中心点center,计算在设置的半径为D的圆形空间内所有的点(xi)与中心点...

    均值漂移(Meanshift)算法理解

    1.均值漂移的基本概念:沿着密度上升方向寻找聚簇点

    设想在一个有N个样本点的特征空间

    初始确定一个中心点center,计算在设置的半径为D的圆形空间内所有的点(xi)与中心点center的向量

    计算整个圆形空间内所有向量的平均值,得到一个偏移均值

    将中心点center移动到偏移均值位置

    重复移动,直到满足一定条件结束

     

    2.均值漂移运算:

    2.1 Mean shift的基础公式:

    偏移均值

     

    Sh:以x为中心点,半径为h的高维球区域; k:包含在Sh范围内点的个数; xi:包含在Sh范围内的点

    中心更新

    将中心点移动到偏移均值位置

     

    Mt为t状态下求得的偏移均值;   xt为t状态下的中心

     

    2.2 引入核函数的偏移均值:

    核函数

    核函数只是用来计算映射到高维空间之后的内积的一种简便方法,目的为让低维的不可分数据变成高维可分。利用核函数,可以忽略映射关系,直接在低维空间中完成计算。

    引入核函数的偏移均值

    在均值漂移中引入核函数的概念,能够使计算中距离中心的点具有更大的权值,反映距离越短,权值越大的特性。改进的偏移均值:

    其中,x为中心点;xi为带宽范围内的点;n为带宽范围内的点的数量;g(x)为对核函数的导数求负

     

    3.均值漂移的应用:

    聚类(K均值聚类)

    图像分割(将图像映射到特征空间,对采样点进行均值漂移聚类)

    对象轮廓检验(光线传播算法)

    目标跟踪(求解最优化Bhattacharya系数函数)

     

    4.均值漂移运算步骤:

    1、在未被分类的数据点中随机选择一个点作为中心点;

    2、找出离中心点距离在带宽之内的所有点,记做集合M,认为这些点属于簇c。

    3、计算从中心点开始到集合M中每个元素的向量,将这些向量相加,得到偏移向量。

    4、中心点沿着shift的方向移动,移动距离是偏移向量的模。

    5、重复步骤2、3、4,直到偏移向量的大小满足设定的阈值要求,记住此时的中心点。

    6、重复1、2、3、4、5直到所有的点都被归类。

    7、分类:根据每个类,对每个点的访问频率,取访问频率最大的那个类,作为当前点集的所属类。


    展开全文
  • 均值漂移谱聚类(MSSC)算法为模式识别聚类任务提供了一种较新的方案. 然而由于其内嵌均值漂移 过程的时间复杂度与样本容量呈平方关系, 其在大数据集环境的实用性受到大大削弱. 利用快速压缩集密度 估计器(FRSDE)替代...
  • 均值漂移(Meanshift)算法

    万次阅读 多人点赞 2017-01-16 21:12:29
    均值漂移(Meanshift) 1.均值漂移的基本概念:沿着密度上升方向寻找聚簇点 设想在一个有N个样本点的特征空间 初始确定一个中心点center,计算在设置的半径为D的圆形空间内所有的点(xi)与中心点center的向量 计算...

    均值漂移(Meanshift)算法理解

    1.均值漂移的基本概念:沿着密度上升方向寻找聚簇点

    设想在一个有N个样本点的特征空间

    初始确定一个中心点center,计算在设置的半径为D的圆形空间内所有的点(xi)与中心点center的向量

    计算整个圆形空间内所有向量的平均值,得到一个偏移均值

    将中心点center移动到偏移均值位置

    重复移动,直到满足一定条件结束

     

    2.均值漂移运算:

    2.1 Mean shift的基础公式:

    偏移均值

    M(x)=\frac{1}{k}*\sum \limits_{x_i\in S_h}$ (x$_{i}-x)

    Sh:以x为中心点,半径为h的高维球区域; k:包含在Sh范围内点的个数; xi:包含在Sh范围内的点

    中心更新

    将中心点移动到偏移均值位置

     

     

     

    Mt为t状态下求得的偏移均值;   xt为t状态下的中心

     

    2.2 引入核函数的偏移均值:

    核函数

    核函数只是用来计算映射到高维空间之后的内积的一种简便方法,目的为让低维的不可分数据变成高维可分。利用核函数,可以忽略映射关系,直接在低维空间中完成计算。

    引入核函数的偏移均值

    在均值漂移中引入核函数的概念,能够使计算中距离中心的点具有更大的权值,反映距离越短,权值越大的特性。改进的偏移均值:

    其中,x为中心点;xi为带宽范围内的点;n为带宽范围内的点的数量;g(x)为对核函数的导数求负

     

    3.均值漂移的应用:

    聚类(K均值聚类)

    图像分割(将图像映射到特征空间,对采样点进行均值漂移聚类)

    对象轮廓检验(光线传播算法)

    目标跟踪(求解最优化Bhattacharya系数函数)

     

    4.均值漂移运算步骤:

     

    1、在未被分类的数据点中随机选择一个点作为中心点;

     

    2、找出离中心点距离在带宽之内的所有点,记做集合M,认为这些点属于簇c。

     

    3、计算从中心点开始到集合M中每个元素的向量,将这些向量相加,得到偏移向量。

     

    4、中心点沿着shift的方向移动,移动距离是偏移向量的模。

     

    5、重复步骤2、3、4,直到偏移向量的大小满足设定的阈值要求,记住此时的中心点。

     

    6、重复1、2、3、4、5直到所有的点都被归类。

     

    7、分类:根据每个类,对每个点的访问频率,取访问频率最大的那个类,作为当前点集的所属类。

     

    展开全文
  • 均值漂移聚类算法 聚类算法-均值漂移算法 (Clustering Algorithms - Mean Shift Algorithm) Advertisements 广告 Previous Page 上一页 Next Page 下一页 均值漂移算法简介 (Introduction to Mean-...
    均值漂移聚类算法

    均值漂移聚类算法

    聚类算法-均值漂移算法 (Clustering Algorithms - Mean Shift Algorithm)

    均值漂移算法简介 (Introduction to Mean-Shift Algorithm)

    As discussed earlier, it is another powerful clustering algorithm used in unsupervised learning. Unlike K-means clustering, it does not make any assumptions; hence it is a non-parametric algorithm.

    如前所述,它是在无监督学习中使用的另一种强大的聚类算法。 与K均值聚类不同,它没有做任何假设; 因此它是一种非参数算法。

    Mean-shift algorithm basically assigns the datapoints to the clusters iteratively by shifting points towards the highest density of datapoints i.e. cluster centroid.

    均值漂移算法基本上是通过将数据点移向最高密度的数据点(即群集质心)来迭代地将数据点分配给群集。

    The difference between K-Means algorithm and Mean-Shift is that later one does not need to specify the number of clusters in advance because the number of clusters will be determined by the algorithm w.r.t data.

    K-Means算法和Mean-Shift算法之间的区别在于,后一种算法无需提前指定聚类数,因为聚类数将由算法的数据确定。

    均值漂移算法的工作 (Working of Mean-Shift Algorithm)

    We can understand the working of Mean-Shift clustering algorithm with the help of following steps −

    通过以下步骤,我们可以了解Mean-Shift聚类算法的工作原理:

    • Step 1 − First, start with the data points assigned to a cluster of their own.

      步骤1-首先,从分配给它们自己的群集的数据点开始。

    • Step 2 − Next, this algorithm will compute the centroids.

      步骤2-接下来,此算法将计算质心。

    • Step 3 − In this step, location of new centroids will be updated.

      步骤3-在此步骤中,新质心的位置将被更新。

    • Step 4 − Now, the process will be iterated and moved to the higher density region.

      步骤4-现在,该过程将被迭代并移至更高密度的区域。

    • Step 5 − At last, it will be stopped once the centroids reach at position from where it cannot move further.

      步骤5-最后,一旦质心到达无法继续移动的位置,它将停止。

    用Python实现 (Implementation in Python)

    It is a simple example to understand how Mean-Shift algorithm works. In this example, we are going to first generate 2D dataset containing 4 different blobs and after that will apply Mean-Shift algorithm to see the result.

    这是一个了解均值漂移算法工作原理的简单示例。 在此示例中,我们将首先生成包含4个不同Blob的2D数据集,然后将应用Mean-Shift算法查看结果。

    
    %matplotlib inline
    import numpy as np
    from sklearn.cluster import MeanShift
    import matplotlib.pyplot as plt
    from matplotlib import style
    style.use("ggplot")
    from sklearn.datasets.samples_generator import make_blobs
    centers = [[3,3,3],[4,5,5],[3,10,10]]
    X, _ = make_blobs(n_samples = 700, centers = centers, cluster_std = 0.5)
    plt.scatter(X[:,0],X[:,1])
    plt.show()
    
    
    Red Dots
    
    ms = MeanShift()
    ms.fit(X)
    labels = ms.labels_
    cluster_centers = ms.cluster_centers_
    print(cluster_centers)
    n_clusters_ = len(np.unique(labels))
    print("Estimated clusters:", n_clusters_)
    colors = 10*['r.','g.','b.','c.','k.','y.','m.']
    for i in range(len(X)):
        plt.plot(X[i][0], X[i][1], colors[labels[i]], markersize = 3)
    plt.scatter(cluster_centers[:,0],cluster_centers[:,1],
        marker=".",color='k', s=20, linewidths = 5, zorder=10)
    plt.show()
    
    

    Output

    输出量

    
    [[ 2.98462798 9.9733794 10.02629344]
    [ 3.94758484 4.99122771 4.99349433]
    [ 3.00788996 3.03851268 2.99183033]]
    Estimated clusters: 3
    
    
    Mix Dot

    的优点和缺点 (Advantages and Disadvantages)

    优点 (Advantages)

    The following are some advantages of Mean-Shift clustering algorithm −

    以下是Mean-Shift聚类算法的一些优点-

    • It does not need to make any model assumption as like in K-means or Gaussian mixture.

      它不需要像K-means或高斯混合中那样做出任何模型假设。

    • It can also model the complex clusters which have nonconvex shape.

      它还可以对具有非凸形状的复杂簇进行建模。

    • It only needs one parameter named bandwidth which automatically determines the number of clusters.

      它只需要一个名为带宽的参数即可自动确定群集数。

    • There is no issue of local minima as like in K-means.

      像K-means一样,没有局部最小值的问题。

    • No problem generated from outliers.

      异常值不会产生任何问题。

    缺点 (Disadvantages)

    The following are some disadvantages of Mean-Shift clustering algorithm −

    以下是Mean-Shift聚类算法的一些缺点-

    Mean-shift algorithm does not work well in case of high dimension, where number of clusters changes abruptly.

    在集群数量突然变化的高维情况下,均值漂移算法不能很好地工作。

    • We do not have any direct control on the number of clusters but in some applications, we need a specific number of clusters.

      我们无法直接控制集群的数量,但是在某些应用程序中,我们需要特定数量的集群。

    • It cannot differentiate between meaningful and meaningless modes.

      它无法区分有意义的模式和无意义的模式。

    翻译自: https://www.tutorialspoint.com/machine_learning_with_python/clustering_algorithms_mean_shift_algorithm.htm

    均值漂移聚类算法

    展开全文
  • 针对经典K均值聚类算法需要事先给定量化数目和量化时间长的问题,提出了一种融合均值漂移和改进的K均值聚类的颜色量化算法。首先把图像从RGB空间转化到Munsell空间,然后依据均值漂移算法以及NBS距离与人类视觉对颜色...
  • 均值漂移建模方法

    2014-12-17 09:44:20
    本文探讨了通过均值漂移的方法进行建模。分析了均值漂移相对于其他方法的优势。
  • 利用Mean Shift(均值漂移)算法对Car_Data文件夹中的视频帧序列实现目标跟踪,待跟踪的目标为场景中的车辆,初始目标位置标定需手工标定,(该视频序列中目标尺度没有很大变化,故在实现算法中只考虑单一尺度即可,...
  • 针对复杂环境下红外图像信噪比和对比度低,边缘模糊,目标分割困难的情况,提出一种基于模糊增强和均值漂移图像滤波的红外目标分割方法。首先定义新的隶属度函数,运用模糊集理论进行红外图像增强,避免了传统模糊...
  • code1采用均值漂移聚类分割,但是需要设置半径,里面还有一个根据连通区域分割,可以不用设置参数就可以分割,里面还有另外一个均值漂移聚类分割,欢迎学习
  • 均值漂移算法meanshiftTrack 一、实验内容 完成基于 MeanShift 的目标跟踪算法,红框标出目标区域实现实时追踪。 二、算法原理 1.在当前帧,计算候选目标的特征 2.计算候选目标与初始目标的相似度 3.计算权值 4....
  • 针对经典的均值漂移算法在跟踪过程中由背景相似度、尺寸变化以及遮挡等引起的跟踪漂移问题,提出了一种基于背景加权的尺度方向自适应均值漂移跟踪算法。结合背景加权来提取目标颜色特征,充分利用了视频图像序列的...
  • 针对均值漂移算法缺少必要的模板更新方法的缺点,提出了一种基于双模板判定的更新算法。该算法首先通过分析目标特征与背景特征的相对大小,设计了加权函数分别对前景和背景特征进行加权;然后在此基础上引入背景模板...
  • 我们会学到均值漂移和连续自适应均值漂移算法来找出并追踪视频中的物体。 均值漂移 均值漂移背后的灵感很简单。假设即有一组点。(它可以是一个好像直方图反向投射出来的像素分布)。而你有一个小窗口(也许是个圆形的...

    ⚠️这篇是按4.1.0翻译的,你懂得。

    ⚠️除了版本之外,其他还是照旧,Meanshift and Camshift,原文

    目标

    在本章,

    • 我们会学到均值漂移和连续自适应均值漂移算法来找出并追踪视频中的物体。

    均值漂移

    均值漂移背后的灵感很简单。假设即有一组点。(它可以是一个好像直方图反向投射出来的像素分布)。而你有一个小窗口(也许是个圆形的)然后你得移动那个窗口到最大点密度(或者窗口框住说最多点数量)的区域。如下图所示:

    meanshift_basics.jpg

    初始化的窗口由蓝色的圆"C1"来表示。它最初的圆心用蓝色的正方形"C1_o"标记出来了。但如果你找出这个圆形窗口中所有点的质心,你就会得到"C1_r"点(用蓝色小圆圈标出了),它是这个圆实际的质心。很明显它们(质心和圆心)并不匹配,所以,移动窗口,使新窗口的圆圈与先前的质心相匹配。然后再次找到新的质心。很可能,它们还是不匹配。然后再继续递归移动这个圆圈,直到圆的中心和质心落在同一点(或者有一个小的期望误差)。最后得到的是一个具有最大像素分布的窗口。它用绿色的圆"C2"标记出来了。如图所示,它框住了最多的点。下面在一张静态图像上演示整个过程:

    meanshift_face.gif

    所以我们通常传入直方图的反向投影图像以及一个初始对象的位置。当这个对象移动的时候,移动明显会反映到直方图的反向投影图上。因此,均值漂移算法将窗口移动到具有最大的密度的新位置。

    OpenCV里的均值漂移

    要使用OpenCV里的均值漂移,首先我们需要设置目标对象,找出它的直方图,这样我们才能在每一帧上来进行反向映射,然后使用均值漂移算法。我们还需要提供窗口的初始位置。对于直方图,这里只考虑色调。此外,为了避免由于低光而产生的错误值,使用cv.inRange()函数丢弃低光值。

    import numpy as np
    import cv2 as cv
    cap = cv.VideoCapture('slow.flv')
    # take first frame of the video
    ret,frame = cap.read()
    # setup initial location of window
    r,h,c,w = 250,90,400,125  # simply hardcoded the values
    track_window = (c,r,w,h)
    # set up the ROI for tracking
    roi = frame[r:r+h, c:c+w]
    hsv_roi =  cv.cvtColor(roi, cv.COLOR_BGR2HSV)
    mask = cv.inRange(hsv_roi, np.array((0., 60.,32.)), np.array((180.,255.,255.)))
    roi_hist = cv.calcHist([hsv_roi],[0],mask,[180],[0,180])
    cv.normalize(roi_hist,roi_hist,0,255,cv.NORM_MINMAX)
    # Setup the termination criteria, either 10 iteration or move by atleast 1 pt
    term_crit = ( cv.TERM_CRITERIA_EPS | cv.TERM_CRITERIA_COUNT, 10, 1 )
    while(1):
        ret ,frame = cap.read()
        if ret == True:
            hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
            dst = cv.calcBackProject([hsv],[0],roi_hist,[0,180],1)
            # apply meanshift to get the new location
            ret, track_window = cv.meanShift(dst, track_window, term_crit)
            # Draw it on image
            x,y,w,h = track_window
            img2 = cv.rectangle(frame, (x,y), (x+w,y+h), 255,2)
            cv.imshow('img2',img2)
            k = cv.waitKey(60) & 0xff
            if k == 27:
                break
            else:
                cv.imwrite(chr(k)+".jpg",img2)
        else:
            break
    cv.destroyAllWindows()
    cap.release()

    下面给出我使用的视频中的其中三帧:

    meanshift_result.jpg

    (译者附,该例中的使用的文件已经在git上被删除,我翻墙找到了。盘1nwTS8L3k-2sG0ry5bbrXYQ码7gi4)

    连续自适应的均值漂移

    你是否靠近去看了刚才那个结果呢?这里有个问题。我们的窗口在汽车处于远处和靠近摄像头的近处总是保持一个固定的大小。这不太好。我们得使窗口适应目标对象的大小和旋转角度。这个解决方案又一次来自"OpenCV Labs",它被叫做CAMshift (连续自适应均值漂移) 由Gary Bradsky在他1998年的论文"Computer Vision Face Tracking for Use in a Perceptual User Interface"中发布。

    它首先应用meanshift算法。一旦meanshift收敛,它就按公式s = 2 \times \sqrt{\frac{M_{00}}{256}}来更新窗口的大小,同时还计算了最佳拟合椭圆的方向。它通过新的放缩搜索窗口和以前的窗口位置再次应用了均值漂移。此过程将继续迭代,直到达到所需的精度为止。

    camshift_face.gif

    OpenCV里的Camshift

    它也和均值漂移一样,但它返回了一个旋转之后的矩形(那就是我们需要的结果),当然还有这个矩形的参数(用来传入下次迭代中的搜索窗口)。看下面的代码:

    import numpy as np
    import cv2 as cv
    cap = cv.VideoCapture('slow.flv')
    # take first frame of the video
    ret,frame = cap.read()
    # setup initial location of window
    r,h,c,w = 250,90,400,125  # simply hardcoded the values
    track_window = (c,r,w,h)
    # set up the ROI for tracking
    roi = frame[r:r+h, c:c+w]
    hsv_roi =  cv.cvtColor(roi, cv.COLOR_BGR2HSV)
    mask = cv.inRange(hsv_roi, np.array((0., 60.,32.)), np.array((180.,255.,255.)))
    roi_hist = cv.calcHist([hsv_roi],[0],mask,[180],[0,180])
    cv.normalize(roi_hist,roi_hist,0,255,cv.NORM_MINMAX)
    # Setup the termination criteria, either 10 iteration or move by atleast 1 pt
    term_crit = ( cv.TERM_CRITERIA_EPS | cv.TERM_CRITERIA_COUNT, 10, 1 )
    while(1):
        ret ,frame = cap.read()
        if ret == True:
            hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
            dst = cv.calcBackProject([hsv],[0],roi_hist,[0,180],1)
            # apply meanshift to get the new location
            ret, track_window = cv.CamShift(dst, track_window, term_crit)
            # Draw it on image
            pts = cv.boxPoints(ret)
            pts = np.int0(pts)
            img2 = cv.polylines(frame,[pts],True, 255,2)
            cv.imshow('img2',img2)
            k = cv.waitKey(60) & 0xff
            if k == 27:
                break
            else:
                cv.imwrite(chr(k)+".jpg",img2)
        else:
            break
    cv.destroyAllWindows()
    cap.release()

    结果的其中三帧显示如下:

    camshift_result.jpg

    额外资源

    1. 法语维基百科页面 Camshift。(本文中两个动图就是从这偷的。)
    2. Bradski, G.R., "Real time face and object tracking as a component of a perceptual user interface," Applications of Computer Vision, 1998. WACV '98. Proceedings., Fourth IEEE Workshop on , vol., no., pp.214,219, 19-21 Oct 1998

    练习

    1. OpenCV 有一个 camshift 的 Python 例子在交互式示例上,使用它、破解它、理解它。

    上篇:【翻译:OpenCV-Python教程】特征匹配加单应性找出物体

    下篇:【翻译:OpenCV-Python教程】光流

    展开全文
  • 为了有效减少噪声对运动目标检测的影响,提出了一种利用均值漂移聚类实现运动目标检测的方法。首先运用Mean Shift算法分别对三帧连续图像进行平滑去噪处理,然后对图像进行边缘提取,最后通过三帧差分法对三帧图像...
  • 均值漂移的MATLAB程序

    2013-11-12 09:34:44
    一个小的均值漂移算法的MATLAB程序,供大家参考一下
  • 均值漂移聚类

    千次阅读 2018-11-20 12:44:10
    均值漂移聚类是基于滑动窗口的算法,它试图找到数据点的密集区域。这是一个基于质心的算法,这意味着它的目标是定位每个组/类的中心点,通过将中心点的候选点更新为滑动窗口内点的均值来完成。然后,在后处理阶段对...
  • 为了解决均值漂移跟踪算法中背景对目标定位的扰动, 提出了一种基于颜色和纹理混合特征以及采用背景加权更新的改进算法。改进算法先将原始视频序列RGB帧图像转换为HSV颜色空间表示, 然后分别在H、S通道上提取颜色特征...
  • 通俗理解Meanshift均值漂移算法

    千次阅读 2018-06-30 15:37:07
    我的机器学习教程「美团」算法工程师带你入门机器学习 已经开始更新了,欢迎大家订阅~ 任何关于算法、编程、AI行业知识或博客内容的问题,可以随时扫码关注公众号「图灵的猫」,加入”学习小组“,沙雕博主在线答疑...
  • 网上下载很多均值漂移算法,代码一样,但运行老是出错,这里是自己修改后的,成功运行,运行后先在第一帧Figure里截取要追踪的汽车目标即可,是在Matlab2016b上运行的,代码简单,适合学习。
  • Meanshift均值漂移C++代码,包含matlab和opencv两个版本
  • 文档为均值漂移算法的matlab代码,可以用于数据聚类分析
  • 采用均值漂移算法对图像进行聚类分割,并对均值漂移的高斯核函数进行了改造,使算法对噪声有更好的平滑作用,对非噪声区域有更准确的分割效果。实验结果表明,改进的算法对噪声污染的图像有更好的抗噪能力,分割也...
  • python 均值漂移

    2019-07-25 21:22:04
    OpenCV里的均值漂移 要使用OpenCV里的均值漂移,首先我们需要设置目标对象,找出它的直方图,这样我们才能在每一帧上来进行反向映射,然后使用均值漂移算法。我们还需要提供窗口的初始位置。对于直方图,这里只考虑...
  • 实现MeanShift均值漂移图像分割MATLAB代码
  • 迭代过程中带宽的大小对算法的准确性和效率有很大的影响,它不但决定了参与...采用相关性比较算法计算均值漂移算法中的带宽,然后将均值漂移算法用于图像分割。实验结果表明,新算法能够获得较好的图像分割效果和质量。
  • 图像均值漂移

    2020-04-15 15:44:22
    #%% 多尺度meanshit分割 import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread('building.jpg') # kernel = np.ones((3,3),np.uint8) # opening = cv2.morphologyEx(img, cv2.MORPH_...
  • 均值漂移算法

    2019-12-17 20:36:20
    均值漂移聚类 均值漂移聚类是基于滑动窗口的算法,它试图找到数据点的密集区域 步骤: 随机选择一个点为中心,求取该圆形区域内所有点到中心点的距离向量的平均值,计算该平均值得到一个偏移均值,然后将中心点...

空空如也

1 2 3 4 5 ... 20
收藏数 400
精华内容 160
热门标签
关键字:

均值漂移