【问题标题】:How to apply kmeans clustering on gray scale image in matlab如何在matlab中对灰度图像应用kmeans聚类
【发布时间】:2017-04-28 09:06:15
【问题描述】:

skin cancer image 我想在灰度图像上应用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});

但它只给我黑色输出

【问题讨论】:

  • 你试过imshow(segmented_images{1},[]);
  • 是的,但它只提供黑色输出
  • 那你能不能把原图加进去让我们试试看?
  • 是的,和皮肤癌有关
  • idxcentroids 永远不会在您的代码中使用

标签: matlab k-means image-segmentation


【解决方案1】:

这是工作代码。备注:

您从不使用聚类的结果,您将原始像素值与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},[]);

【讨论】:

    猜你喜欢
    • 2020-05-14
    • 2014-02-13
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-12
    • 1970-01-01
    • 2015-02-04
    相关资源
    最近更新 更多