在 MATLAB 中聚类连通方块

Clustering Connected Squares in MATLAB

假设有一个以特定图案着色的网格:

如您所见,这 62 个红色方块在三个不同的组(簇)中连接在一起。您可能想从以下 link 下载数据。

Click here for downloading mesh coordinates (XX, YY, ZZ) and its colours(C)

然后,您可以使用以下代码生成下面的网格:

load('data.mat');
figure('units','normalized','outerposition',[0 0 1 1]); % Opening big figure
axis equal; axis off;
SURF = surf( XX , YY , ZZ, C);

现在,我正在寻找可以分割这三个簇的代码。

请记住,您应该将这些方块视为一组,在任何方向上都具有最大一平方间隙距离。这意味着,在这种特殊情况下,我们有 11、13 和 38 个正方形的三个簇。

提前感谢您的宝贵时间。

您可以使用 connected component labeling.

在 Matlab 中,假设您的矩阵仅包含 0 和 1(或者您可以这样做),您将使用 bwlabel

L = bwlabel(data, 8)

现在 L 将是一个与 data 大小相同的矩阵,其中标签 1, 2, 3... 代替了 1。

作为第二个参数的8表示组件的连通性。 4-connected 表示一个方格只有在方格的左侧、右侧、上方或下方时才与另一个方格相连。 8-connected 表示如果正方形在对角线上相邻,则正方形也相连,如样本的右下角。 8 是默认值,您可以将其省略,但您应该注意其中的区别,以防将来需要它的行为有所不同。