【问题标题】:How to segment a color image using K-means clustering?如何使用 K-means 聚类分割彩色图像?
【发布时间】:2017-05-23 21:21:17
【问题描述】:

我正在做一个通过 k-means 聚类执行分割的项目。我必须对 K = [2, 3, 4, ... K-max] 应用 K-means 聚类并计算每个点到其聚类中心的平均距离。另外,我必须确定 K*,当切换到 K* + 1 时,这个距离变化不大。Kmax=20。

据我写的代码如下。我首先担心的是我做错了什么?

I = imread('image');
imshow(I);

Id = im2double(I);

red = I(:,:,1);
green = I(:,:,2);
blue = I(:,:,3);
[c, r] = meshgrid(1:size(I,1), 1:size(I,2));
X = [red(:) green(:) blue(:) red(:) c(:)];


K     = 2:20;                      %Cluster Numbers
[IDX, C, SUMD] = kmeans(X, K);
ave_dist(K) = sum(SUMD(:))/number_of_pixels_in_image;

1) 我如何将到聚类中心的平均距离绘制为 K 的函数?

2) 我如何确定最小的 K*

`| ave_dist(K*) - ave_dist(K*+1) |< THR_K.  THR_K = 100` 

谢谢。

【问题讨论】:

  • Matlab?可能要添加标签。
  • 是的,非常感谢您,先生,不知何故我忘记了..
  • 你为什么在你的X中使用两次redc
  • 第二个在数据向量中,用于确定[IDX, C, SUMD]= kmeans(X,K);

标签: matlab image-processing k-means image-segmentation


【解决方案1】:

第一个问题:您正在构建一个向量ave_dist,您可以直接与plot(ave_dist) 一起使用

第二个问题:你可以使用findindex = find(abs(ave_dist(1:end-1)-ave_dist(2:end)) &lt;= 100,1,'first')

【讨论】:

  • 我必须找到应该在 3-D 矢量系统中的绘图或图表。例如mathworks.com/help/matlab/ref/contour3.html 这里但它应该绘制到聚类中心的平均距离。对于第一个问题:我一定忘记了 k 必须有一个阈值等于 100
  • 如果这不是您想要的,我仍然不清楚您需要什么。你能举个例子吗?
  • 当然我可以再解释一遍。我有一个主色为红色、绿色、蓝色、黄色和白色的图像。我需要提取图像的 R、G 和 B 分量,然后将其分配给数据矩阵。对于 K = 2:Kmax (Kmax=20) 并且必须使用 kmeans 函数来获得每个像素的簇索引 (IDX) 和簇内点到质心距离的总和 (SUMD)。然后我的第一个和第二个问题来了。 K* 自动从 ave_dist 函数找不到的 ave_dist 向量中找到。
猜你喜欢
  • 2018-01-12
  • 2012-07-22
  • 2017-05-29
  • 2017-01-29
  • 2013-08-08
  • 2018-02-27
  • 1970-01-01
  • 2017-03-22
  • 2010-12-20
相关资源
最近更新 更多