3

假设现在我有一个图像分割图 S,其索引范围为 1 到 k。具有相同编号的索引属于同一段。例如:

S = [1 1 1 2 2 2;
     1 1 1 2 2 2;
     2 2 2 2 1 1;
     2 2 2 2 1 1;
     2 2 2 2 1 1]

对于这个分割图 S,我想得到区域。例如,S中的'1'有两个独立的部分,所以我想得到三个区域——两个带有标签1,一个带有标签2,为了区分两个'1',我想将其中一个更改为是另一个标签,比如 3。所以最终的地图是:

S = [1 1 1 2 2 2;
     1 1 1 2 2 2;
     2 2 2 2 3 3;
     2 2 2 2 3 3;
     2 2 2 2 3 3]

我正在考虑使用连接组件来解决这个问题,但它需要制定亲和矩阵。有更好的方法吗?

4

1 回答 1

2

简单地得到一个所有的逻辑矩阵,然后得到所有连接的元素bwlabel。您可以将它们合并在一起。为了避免混合两个区域的问题,只需添加原始矩阵的最大值例如:

mask           = (S == 1);
labeled        = bwlabel (mask);
labeled(mask)  = labeled(mask) + max (S(:)) - 1;
labeled         = S + labeled;

唯一的区别是,以前值为“1”的区域现在都没有该值,但至少它们被标记为不同。如果您希望其中一个保留其编号,只需为最高值制作另一个掩码,并使用它将它们全部变回“1”。

labeled(S == max(S(:))) = 1;
于 2012-08-29T17:12:22.333 回答