在图像中显示群集

时间:2014-03-13 23:35:53

标签: matlab image-processing k-means

我有一张图片,test3

enter image description here

我想在图像上聚集点。

我的代码:

[I,map]=imread('test3','bmp');
I = ~I;
imshow(I,map);
[m n]=size(I)
P = [];
for i=1:m    
    for j=1:n        
        if I(i,j)==1
            P = [P ; i j];        
        end
    end
end
size(P)
MON=P;
[IDX,ctrs] = kmeans(MON,3)

在绘制图像中的聚类时,我还想在图像中绘制IDXctrs

如何获得包含3个新群集的图像,每个群集在图像中的颜色不同。

1 个答案:

答案 0 :(得分:1)

生成k-means集群:

% locations of the black pixels
[I,map]=imread('test3','bmp'); I = ~I;
[ii,jj] = find(I==1);
P = [ii jj];

k = 3;
[IDX,ctrs] = kmeans(P,k);

为每个群集绘制不同颜色的点:

cm = jet(k);
hold on
for ik=1:k,
    imap = IDX==ik;
    plot(P(imap,2),P(imap,1),'.','color',cm(:,ik));
end
axis image
axis ij

为中心添加标记:

plot(ctrs(:,2),ctrs(:,1),'r*','markersize',10)

结果:

enter image description here


或者从群集索引中制作颜色编码的图像:

kimg = zeros(size(I));
kimg(sub2ind(size(I),P(:,1),P(:,2))) = IDX;
cmap = [ones(1,3); jet(k)]
kimgRGB = ind2rgb(kimg+1,cmap);
imwrite(kimgRGB,'kimg.png')

结果: enter image description here

请注意,我选择了jet colormap,但您可以使用任何您想要的地图。此外,我已将背景设置为白色(ones(1,3)是索引值1的颜色。)