【发布时间】: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中使用两次red和c? -
第二个在数据向量中,用于确定[IDX, C, SUMD]= kmeans(X,K);
标签: matlab image-processing k-means image-segmentation