0

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

研究生,

萨法

4

3 回答 3

0

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

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

根据文档,其默认值为

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

您还有其他选项,但只有 Matrix 选项是非随机的。在这种情况下,您需要定义质心起始位置的矩阵 k×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')

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

于 2012-08-27T23:08:29.003 回答
0

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

于 2012-08-26T18:33:05.067 回答
0

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

您可以通过修复随机生成器或手动选择初始方式来作弊(我不使用 Matlab,但我想它确实支持这种或另一种方式)。然后结果会更稳定,但仍然不一定在图像之间具有可比性。

于 2012-08-27T06:22:37.933 回答