Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 在图像中显示群集_Matlab_Image Processing_K Means - Fatal编程技术网

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的颜色)