2012-11-22 62 views
0

的具體標籤(包括數據),我想用Matlab中的kmeans來描述我的問題。 我通過鼠標選擇一個點並將其用於羣集初始化。這工作正常。首先得到k-means

在對數據進行分割後,我將數據重新塑造成適當的樣式,因爲我需要一個矩陣。 現在我只想選擇用戶通過鼠標選擇數據的集羣。 因此,我選擇鼠標座標的索引來選擇我想要分割的標籤。由於其他額外的數據沒有連接或附近的相關數據,但也相同的標籤。

我想在8

所以在這裏附近,只選擇連接組件是我的代碼片段至今:

flatimg = double(reshape(croppedimg,size(croppedimg,1)*size(croppedimg,2),size(croppedimg,3))); 
% kmeans 
[idx, clusters] = kmeans(flatimg,2,'start',[seedpoint1(3);seedpoint2(3)]); 
% form it back to a matrix 
k=reshape(idx,size(croppedimg,1),size(croppedimg,2)); 
%convert point, which is part of the label I want to linear index 
selectedobjectpoint = sub2ind(size(croppedimg),seedpoint1(2),seedpoint1(1)); 
hgplabel = k(selectedobjectpoint); 
idx_object = find(k, hgplabel); 
% also tried: idx_object = find(k == hgplabel); 

我添加了一個截圖,其中顯示了kmeans直接輸出: kmeans output 所以我的目標是在這裏只得到「白色」或「黑色」。

幫助或建議表示讚賞。如果您對片段或目標有任何疑問,請隨時提問。

預先感謝您!

回答

0

我覺得FIND命令會把你扔掉。你想要的東西類似於:

logicalImage = k == hgplabel; 
bwImg = bwlabel(logicalImage); 
imagesc(bwImg) 

FIND將輸出索引,其中k == hgplabel。你想要零矩陣和其中k取這個值(我認爲)。

如果你只是想的是,連接部件,bwlabel的輸出將包含唯一整數每個連接組件,因此於imagesc(bwImg == 1)將只顯示組件1.你可以指定連接

+0

這是絕對正確的。作爲最終結果,我希望只有二進制格式的標籤X的連接/鄰近鄰居。 – mchlfchr

+0

查看新的編輯;這應該是bwlabel所做的。另請參閱regionprops。 – Pete

+0

是的,我知道它做了什麼。但我如何獲得連接的組件? 我只看到k-classes的聚類,我想將它縮小到彼此相鄰/相互連接的聚類的一部分。 – mchlfchr