现在假设我有一个图像分割图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,我想获得区域。例如,' 1'在S有两个孤立的部分,所以我想得到三个区域 - 两个标签1和一个标签2,并区分两个1' s,我想将其中一个更改为是另一个标签,比如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]
我正在考虑使用连通组件来解决这个问题,但它需要制定亲和力矩阵。有没有更好的方法呢?
答案 0 :(得分:2)
只需获取所有1的逻辑矩阵,然后使用bwlabel
获取所有连接的元素。你可以将它们合并在一起。为避免混合两个区域的问题,只需添加原始矩阵的最大值,例如:
mask = (S == 1);
labeled = bwlabel (mask);
labeled(mask) = labeled(mask) + max (S(:)) - 1;
labeled = S + labeled;
唯一的区别是之前没有值为“1”的区域现在都没有这个值,但至少它们被标记为不同。如果你想让其中一个人保留他们的号码,只需要制作另一个最高值的面具,然后用它将它们全部变回“1”。
labeled(S == max(S(:))) = 1;