MatLab Kmeans聚类 详细解析

今天想使用一下matlab自带的函数kmeans,看了官方实例还有网上的帖子,都是说的云里雾里。

自己看懂之后,在这里分享一下。

要点1. kmeans是以行为单位进行聚类的

要点2. kmeans聚类的单位应该是能够标识这个点的特征

            这里解释一下,如果对一个二维矩阵进行聚类,聚类的根据的是矩阵值的话,那么这个值(一个数)就能够标识这个点;如果对一张RGB图像进行聚类,那像素点的RGB值(三个数)就能标识这个点。


所以,在聚类之前,应该reshape矩阵一下。例如二维矩阵30*20,则reshape成600*1;RGB图像300*400*3,则reshape成120000*3。这样[t1,t2]=kmeans(...),t1记录的是每一行属于的类别,t2记录的是每个类的质心位置。再将t1 reshape为原矩阵的大小,就可以直观的看到矩阵的每个区域都属于哪些类了。


以上方法是根据数值聚类,如果想通过位置坐标聚类,该怎么办呢?

很简单,把kmeans(X,k)中的X替换为要聚类的全部坐标就可以了。


以下附一个不错的例子供参考https://blog.csdn.net/u012526003/article/details/50492404

inputImg = double(imread('ti.jpg'));
inputKmeans = reshape( inputImg , size(inputImg,1)*size(inputImg,2) , 3 );
outK = kmeans( inputKmeans , 3 );
outImg = zeros( size(inputImg) );
d = reshape( outK, size(inputImg,1), size(inputImg,2) );
for ii = 1:size(inputImg,1)
    for jj = 1:size(inputImg,2)
        outImg(ii,jj,d(ii,jj)) = 1;
    end
end
figure
imshow(outImg)

  • 9
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值