使用matlab在组织病理学图像上应用k-means

时间:2012-08-26 18:13:06

标签: cluster-analysis k-means

我在组织病理学医学图像上应用k-means聚类算法将像素分类为类。应用k-means时一切正常,但我有一个小问题:当多次运行k-means函数(在matlab中可用)时,图像像素每次都会以不同的颜色显示。当多次应用k-means函数时,我们可以使像素的颜色相同吗?

Regrads,

SAFAA

3 个答案:

答案 0 :(得分:0)

我从未使用过Matlab这个功能。但我认为Kmeans聚类结果是基于其初始中心点的选择。所以,也许,Matlab函数随机选择K个初始像素,这可能解释了每次都得到不同的结果。

答案 1 :(得分:0)

k-means是随机算法。每次运行都会返回不同的结果。但是,对于其他聚类算法,您需要找到聚类到您想要的意义(例如颜色)的映射。

您可以通过修复随机生成器或手动选择初始方法来欺骗(我不使用Matlab,但我想它确实支持这种或那种方式)。然后结果将更稳定,但仍然不一定可以在图像之间进行比较。

答案 2 :(得分:0)

Matlab kmeans函数有一个名为start的参数,你可以用它来定义你的起始种子。

  

start,用于选择初始聚类质心位置的方法,有时也称为种子。

根据文档,其默认值为

  

'sample'随机选择X中的k个观测值(默认值)。

您有其他选项,但只有Matrix选项是非随机的。在这种情况下,您需要定义一个矩阵 质心起始位置的k-by-p矩阵。

请参阅以下从matlab文档中获取并在此处修改的示例。

X = [randn(100,2)+ones(100,2);...
     randn(100,2)-ones(100,2)];
opts = statset('Display','final');

k = 2;
startPositions = [0.01 0.01 ; -0.01 -0.01];

[idx,ctrs] = kmeans(X,k,...
                    'Distance','city',...
                    'Options',opts,...
                    'Start',startPositions ...
                );

plot(X(idx==1,1),X(idx==1,2),'r.','MarkerSize',12)
hold on
plot(X(idx==2,1),X(idx==2,2),'b.','MarkerSize',12)
plot(ctrs(:,1),ctrs(:,2),'kx',...
     'MarkerSize',12,'LineWidth',2)
plot(ctrs(:,1),ctrs(:,2),'ko',...
     'MarkerSize',12,'LineWidth',2)
legend('Cluster 1','Cluster 2','Centroids',...
       'Location','NW')

请注意,由于数据本身是随机的,因此群集中心似乎会发生变化。 如果将数据更改为静态,则群集中心也将是静态的。