kmeans算法显示不准确

时间:2018-03-06 16:34:37

标签: matlab image-processing k-means

我正在尝试使用经典的kmeans聚类算法,其中聚类数为2。

所以,我正在使用彩色图像并用以下内容阅读:

coffeeImage = imread('coffee.png');

接下来,我用:

提取像素的x和y位置
 [x, y] = meshgrid(1:size(coffeeImage, 1), 1:size(coffeeImage, 2));

我在这里将x和y变量组合成21,160 x 5向量:

 coffeeVector = reshape([coffeeImage(:); x(:); y(:)], [], 5);

现在,我希望对此结果进行聚类。我已经尝试了以下内容,并且我得到一个异常,指出图像太大而无法显示。 (结果是21,160 x 1向量)。

clustered = kmeans(double(coffeeImage), 2);
imshow(coffeeImage);
imshow(clustered, []);

我想用新的聚类变量显示原始数据进行比较。我已经查看了关于kmeans的文档,但我仍然有渲染问题。有没有人有任何想法?

1 个答案:

答案 0 :(得分:0)

链接的示例演示了MATLAB中的kmeans分割工作流程,包括将结果视为带标签的图像所需的结果矢量的重塑:

https://www.mathworks.com/help/images/examples/color-based-segmentation-using-k-means-clustering.html

具体来说,给定kmeans的输出,这是一个Nx1向量,其中N = Rows * Columns在原始图像中,如果要将其视为二维网格,则需要将其重新整形为二维网格标签图片。我还建议使用函数labeloverlay()将原始图像与标记图像融合,以便直观地了解分割的准确性:

clustered = kmeans(double(coffeeImage), 2);
clustered = reshape(clustered,[size(coffeeImage,1),size(coffeeImage,2)]);
figure, imshow(labeloverlay(coffeeImage,clustered));