2017-04-27 49 views
-1

我有1500名患者肺部的图像,我试图在他们身上应用kmean来解决我的问题。我的问题是,我想对一名患者(有230张图像)应用k均值,然后保存此患者的质心,我想根据此质心对其他患者应用kmeans。这是matlab代码。 [idx,C] = kmeans(data,80) 现在,我有C但我应该怎么做才能使用它并将该质心应用于其他图像?以k为基准形心的聚类

这里'我的数据看起来像,我是基于这些图像的直方图聚类。

Img1 histogram with 16 bins 
Img2 Histo gram with 16 bins 
Img3 // // // // // // // 
Img4 /////// /// ///
. 
. 
. 

任何教程或任何可能的帮助,请建议。谢谢。

回答

1

Kmeans最接近的中心确定的每个点的成员资格。因此,拥有这些中心后,您可以通过检查它们与每个中心的距离来保持更多关联。在MATLAB中可以方便的与pdist2做到这一点:

dim = 2; 
n = 100; 
% generate two data sets 
data1 = rand(n,dim); 
data2 = rand(n,dim); 
% computing membership & clusters using kmeans on data1 
k = 5; 
[idx1,C] = kmeans(data1,k); 
% computing membership using pairwise distance on data2 
D = pdist2(data2,C); 
[~,idx2] = min(D,[],2); 
% plot centers 
scatter(C(:,1),C(:,2),100,1:k,'*') 
hold on 
% plot data1 
scatter(data1(:,1),data1(:,2),30,idx1,'filled') 
% plot data2 
scatter(data2(:,1),data2(:,2),30,idx2) 
legend('centers','data1','data2') 

如果你愿意,你甚至可以使用Voronoi图绘制成员资格限制:

voronoi(C(:,1),C(:,2)); 

enter image description here