我有一张图片,test3
:
我想在图像上聚集点。
我的代码:
[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)
在绘制图像中的聚类时,我还想在图像中绘制IDX
和ctrs
。
如何获得包含3个新群集的图像,每个群集在图像中的颜色不同。
答案 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)
结果:
或者从群集索引中制作颜色编码的图像:
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')
结果:
请注意,我选择了jet
colormap,但您可以使用任何您想要的地图。此外,我已将背景设置为白色(ones(1,3)
是索引值1的颜色。)