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

我添加了一个屏幕截图,它显示了的直接输出kmeanskm均值输出 所以我的目标是在这里只获得“白色”或“黑色”的。

帮助或建议表示赞赏。如果您对片段或目标有任何疑问,请随时提问。

先感谢您!

4

1 回答 1

0

我认为 FIND 命令让你失望。你想要这样的东西:

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

FIND 将输出 k == hgplabel 的索引。你想要一个由零和一个组成的矩阵,其中 k 取那个值(我认为)。

如果您只想要其中的连通分量,则 bwlabel 的输出将包含每个连通分量的唯一整数,因此 imagesc(bwImg == 1) 将仅显示分量 1。您可以指定连通性

于 2012-11-22T03:17:23.187 回答