【问题标题】:kmeans algorithm display not accuratekmeans算法显示不准确
【发布时间】:2018-08-14 14:27:35
【问题描述】:

我正在尝试使用经典的 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 的文档,但我仍然遇到渲染问题。有人有什么想法吗?

【问题讨论】:

  • 请发布您的实际错误消息和导致它的行。输入 20k * 1 的向量时,您希望显示什么图像?
  • 嗯,它说它太大了,所以它显示了一条垂直的灰线。我希望看到两个集群。你不应该得到一个非常大的 x 1 向量吗?
  • 一个 largex1 向量,显示的是一条垂直的灰线
  • 我想我显示不正确。如果有意义的话,我希望看到显示的两个集群。
  • 为什么要使用 5 列的 reshape?这完全打乱了数据。你有没有查过kmeans 的输出代表什么?

标签: matlab image-processing k-means


【解决方案1】:

链接的示例演示了 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));

【讨论】:

    猜你喜欢
    • 2020-05-07
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 2021-02-25
    • 1970-01-01
    • 2016-04-14
    相关资源
    最近更新 更多