前言
MeanShift(均值漂移)是基于密度的非参数聚类算法,其算法思想是假设不同簇类的数据集符合不同的概率密度分布,找到任一样本点密度增大的最快方向(最快方向的含义就是Mean Shift),样本密度高的区域对应于该分布的最大值,这些样本点最终会在局部密度最大值收敛,且收敛到相同局部最大值的点被认为是同一簇类的成员。MeanShift算法沿着密度上升方向寻找聚簇点。Mean Shift在计算机视觉领域的应用非常广,如图像分割,聚类和视频跟踪。
MeanShift向量
MeanShift算法
偏移均值
中心更新
核密度估计
颜色概率模型
直方图,HSV;
%计算侯选区域直方图 hist2 = zeros(1,4096); % 计算候选区域直方图 for i = 1:a for j = 1:b % rgb 颜色空间量化为 16*16*16 bins q_r = fix(double(current_temp(i,j,1))/16); % fix为趋近0取整函数 q_g = fix(double(current_temp(i,j,2))/16); q_b = fix(double(current_temp(i,j,3))/16); q_temp(i, j) = q_r*256 + q_g*16 + q_b; % 设置每个像素点红色、绿色、蓝色分量所占比重 % 计算直方图统计中每个像素点占的权重 hist2(q_temp(i, j)+1) = hist2(q_temp(i, j)+1) + m_wei(i,j); end end hist2 = hist2 * C; % 以上步骤完成了目标核函数直方图
将rgb颜色空间量化为16*16*16bins=4096,即每个颜色通道共有4个bit,共有16个bins,所以每个通道的像素值需要除以16,可以放在256/16=16个bins中。而q_temp共有12bits,表示每个像素点的RGB数值组成,每四位分别表示RGB的颜色分量,hist表示每个量化像素点的权重。
直方图归一化
%Normalize
R = hist / sum(hist);
改进算法:CamShift
Mean Shift是针对单张图片寻找最优迭代结果,而Camshift则是针对视频序列来处理,并对该序列中的每一帧图片都调用Mean Shift来寻找最优迭代结果。
改进算法:ASMS(Adaptive Scale Mean Shift)
Meanshift算法的应用
优缺点
优点:
1、与K-Means算法不一样的是,MeanShift算法可以自动决定类别的数目。
2、不受异常值影响。
3、没有局部最小值。
缺点:
1、在高维空间数据下表现不佳。
2、无法指定聚类的数量。
优点:
不需要设置簇类的个数;
可以处理任意形状的簇类;
算法只需设置带宽这一个参数,带宽影响数据集的核密度估计
算法结果稳定,不需要进行类似K均值的样本初始化
缺点:
聚类结果取决于带宽的设置,带宽设置的太小,收敛太慢,簇类个数过多;带宽设置的太大,一些簇类可能会丢失。
对于较大的特征空间,计算量非常大。
参考
1. MeanShift算法;
3. MeanShift跟踪算法;
4. Meanshift,聚类算法;
7. 【OpenCV】Meanshift、Camshift物体跟踪;
完