0

まず、Matlabのkmeansに関する私の問題について説明したいと思います。マウスでポイントを選択し、クラスターの初期化に使用します。これは正常に機能します。

データをセグメンテーションした後、マトリックスが必要なため、データを適切なスタイルに再形成します。ここで、ユーザーがマウスでデータを選択したクラスターのみを選択したいと思います。したがって、マウス座標のインデックスを選択して、セグメント化するラベルを選択します。関連するデータに接続されていない、または近くにない他の余分なデータのためですが、同じラベルも取得しています。

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);

次の直接出力を示すスクリーンショットを追加しましたkmeanskmeans出力 したがって、ここでの目的は、「白」または「黒」のものだけを取得することです。

ヘルプやアドバイスをいただければ幸いです。スニペットや目標について質問がある場合は、お気軽にお問い合わせください。

前もって感謝します!

4

1 に答える 1

0

FINDコマンドがあなたを失望させていると思います。あなたは次のようなものが欲しいです:

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

FINDは、k==hgplabelのインデックスを出力します。kがその値をとる0と1の行列が必要です(私は思います)。

その連結成分だけが必要な場合、bwlabelの出力には連結成分ごとに一意の整数が含まれるため、imagesc(bwImg == 1)は成分1のみを表示します。接続を指定できます。

于 2012-11-22T03:17:23.187 に答える