Matlab 在图像中显示群集
我有一个图像,Matlab 在图像中显示群集,matlab,image-processing,k-means,Matlab,Image Processing,K Means,我有一个图像,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
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个新簇的图像,每个簇在图像中具有不同的颜色。要生成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')
结果:
请注意,我已经选择了,但是您可以使用任何您想要的地图。此外,我还将背景设置为白色(ones(1,3)
是索引值1的颜色)