2017-01-09 54 views
0

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

据我记下的代码是在下面。我首先担心的是我做错了什么?

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` 

谢谢。

+0

Matlab的?可能想添加标签。 – MSalters

+0

是的,非常感谢你先生,不知何故,我忘了那.. – aod

+0

看看[这个问题](http://stackoverflow.com/questions/32034344/accurately-detect-color-regions-in-an- image-using-k-means-clustering?rq = 1) –

回答

0

1问题:你正在建设一个矢量ave_dist,您可以用plot(ave_dist)

第二个问题直接使用:您可以使用该findindex = find(abs(ave_dist(1:end-1)-ave_dist(2:end)) <= 100,1,'first')

+0

我必须找到应该在三维矢量系统中的绘图或图表。如https://www.mathworks.com/help/matlab/ref/contour3.html,但它应绘制到集群中心的平均距离。对于第一个问题:我必须忘记,也必须有一个阈值k等于100 – aod

+0

如果这不是你想要的,它仍然有点不清楚你我需要什么。你能否提供一个例子? – flawr

+0

ofcourse我可以再解释一遍。我有一个与主色红色,绿色,蓝色,黄色和白色的形象。我需要提取图像的R,G和B分量,然后将其分配给数据矩阵。对于K = 2:Kmax(Kmax = 20),并且必须使用kmeans函数来获得每个像素(IDX)的聚类索引以及点到质心距离(SUMD)的聚类内和。然后我的第一和第二个问题出现了。 K *自动从ave_dist函数找不到的ave_dist向量。 – aod