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)

猜你喜欢

转载自blog.csdn.net/justforacm/article/details/80941584