【问题标题】:Extracting regions in matlab在matlab中提取区域
【发布时间】:2012-08-29 15:15:37
【问题描述】:

假设现在我有一个图像分割图 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]

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

【问题讨论】:

  • 为什么不使用 bwconncomp 或 bwlabel?特别适合这个问题
  • 所以要获取第二个S矩阵?
  • @EitanT 是的。现在问题解决了。还是谢谢!

标签: matlab image-processing graph


【解决方案1】:

简单地得到一个全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;

【讨论】:

    猜你喜欢
    • 2018-08-15
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多