我正在尝试使用经典的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的文档,但我仍然有渲染问题。有没有人有任何想法?
答案 0 :(得分:0)
链接的示例演示了MATLAB中的kmeans分割工作流程,包括将结果视为带标签的图像所需的结果矢量的重塑:
具体来说,给定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));