如何在MATLAB中将Kmeans聚类应用于灰度图像



皮肤癌图像我想应用k在灰度图像上的聚类,代码如下

    im = imread('SSM1_2_orig.jpg');
im = rgb2gray(im);
[idx centroids]=kmeans(double(im(:)),3,'distance','sqEuclidean','Replicates',3);
%imseg = zeros(size(im,1),size(im,2));
%{for i=1:max(idx)
    %imseg(idx==i)=i;
    %end}
segmented_images = cell(1,3);
for k = 1:3
    color = im;
    color(im ~= k) = 0;
    segmented_images{k} = color;
end
figure(),imshow(segmented_images{1});
figure(),imshow(segmented_images{2});
figure(),imshow(segmented_images{3});

,但它仅给我黑色输出

这是工作代码。注意:

您从不使用聚类的结果,将原始像素值与k进行比较,而不是聚类的像素值idx

另外,如果您的图像不是[0-1]或[0-255]。

,请记住使用imshow(____, [])
im = imread('https://i.stack.imgur.com/ZYp7r.jpg');
im = rgb2gray(im);
[idx, centroids]=kmeans(double(im(:)),3,'distance','sqEuclidean','Replicates',3);
segmented_images = cell(1,3);
for k = 1:3
    color = zeros(size(im));
    color(idx==k) = im(idx==k);
    segmented_images{k} = color;
end
figure(),imshow(segmented_images{1},[]);
figure(),imshow(segmented_images{2},[]);
figure(),imshow(segmented_images{3},[]);

最新更新