我正在使用k-means聚类来分割视网膜图像。但是,每当我运行我的代码分段时,同一图像的结果都不同。这种变化的原因是什么?以下是同一图像的三个分割结果。 以下是用于此分段的代码。
idx = kmeans(double(imreslt1(:)),2);
classimage = reshape(idx, size(imreslt1));
minD = min( classimage (:));
maxD = max( classimage (:));
g = (double(classimage ) - minD) ./ (maxD - minD);
imshow(g);
答案 0 :(得分:1)
如果您阅读kmeans
函数的MATLAB帮助文件,您将看到k-means聚类算法的初始点是根据k-means ++算法随机选择的。为了使其可重现,您可以按如下方式传递您自己的初始点:
kmeans(...,'Start',[random_points_matrix])
或者,您可以尝试使用以下方法播种MATLAB内部随机数生成器:
rng(seed); % where seed is some constant you choose
idx = kmean(...);
但是,我对kmean
函数的内部结构并不清楚,因此我无法保证这必然会产生可重现的结果。
答案 1 :(得分:1)
这是kmeans的初始化问题,因为当kmeans启动时,它会选择随机的初始点来聚类数据。然后matlab选择k个随机点并计算数据中这些位置的点距离,并找到新的质心以进一步减小距离。因此,由于这些随机的初始点,质心位置会得到不同的结果,但答案是相似的。