3

ここで、インデックスの範囲が 1 から k の画像セグメンテーション マップ S があるとします。同じ番号のインデックスは同じセグメントに属します。例えば:

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' には 2 つの分離された部分があるため、ラベル 1 を持つ 2 つとラベル 2 を持つ 1 つの 3 つの領域を取得し、2 つの '1' を区別するために、そのうちの 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です。それらを一緒にマージすることができます。2つの領域が混在する問題を回避するには、元の行列の最大値を追加するだけです。次に例を示します。

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

唯一の違いは、以前は「1」の値を持っていた領域のどれも現在その値を持っていないということですが、少なくともそれらは異なるラベルが付けられています。それらの1つに番号を保持させたい場合は、最大値の別のマスクを作成し、それを使用してすべてを「1」に戻すだけです。

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