我在组织病理学医学图像上应用k-means聚类算法将像素分类为类。应用k-means时一切正常,但我有一个小问题:当多次运行k-means函数(在matlab中可用)时,图像像素每次都会以不同的颜色显示。当多次应用k-means函数时,我们可以使像素的颜色相同吗?
Regrads,
SAFAA
答案 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')
请注意,由于数据本身是随机的,因此群集中心似乎会发生变化。 如果将数据更改为静态,则群集中心也将是静态的。