ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

bwlabeln

バイナリ イメージ内の連結要素をラベル付け

説明

L = bwlabeln(BW) は、BW の連結要素のラベルを含むラベル行列 L を返します。

L = bwlabeln(BW,conn) はラベル行列を返します。ここで、conn は連結性を指定します。

[L,n] = bwlabeln(___) は、BW で検出された連結オブジェクトの数 n も返します。

すべて折りたたむ

シンプルな 3 次元サンプル バイナリ イメージを作成します。

BW = cat(3, [1 1 0; 0 0 0; 1 0 0],...
            [0 1 0; 0 0 0; 0 1 0],...
            [0 1 1; 0 0 0; 0 0 1])
BW = 
BW(:,:,1) =

     1     1     0
     0     0     0
     1     0     0


BW(:,:,2) =

     0     1     0
     0     0     0
     0     1     0


BW(:,:,3) =

     0     1     1
     0     0     0
     0     0     1

イメージ内の連結要素にラベル付けします。

bwlabeln(BW)
ans = 
ans(:,:,1) =

     1     1     0
     0     0     0
     2     0     0


ans(:,:,2) =

     0     1     0
     0     0     0
     0     2     0


ans(:,:,3) =

     0     1     1
     0     0     0
     0     0     2

入力引数

すべて折りたたむ

バイナリ イメージ。任意の次元の数値配列または logical 配列として指定します。数値入力の場合、非ゼロのピクセルは on であると見なされます。

例: BW = imread('text.png');

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

ピクセルの連結性。次の表のいずれかの値を指定します。既定の連結性は 2 次元イメージでは 8、3 次元イメージでは 26 です。

平均

2 次元連結性

4 連結

ピクセルのエッジの部分が接触している場合、ピクセルは連結されます。2 つの隣り合ったピクセルは両方とも "on" の場合に同じオブジェクトの一部であり、水平方向または垂直方向に連結します。

8 連結

ピクセルのエッジまたはコーナーが接触している場合、ピクセルは連結されます。2 つの隣り合ったピクセルは両方とも "on" の場合に同じオブジェクトの一部であり、水平方向、垂直方向または対角方向に連結します。

3 次元連結性

6 連結

面が接触している場合、ピクセルは連結されます。2 つの隣り合ったピクセルは両方とも "on" の場合に同じオブジェクトの一部であり、次のように連結します。

  • 次のいずれかの方向: 奥、手前、左、右、上および下

18 連結

面またはエッジが接触している場合、ピクセルは連結されます。2 つの隣り合ったピクセルは両方とも "on" の場合に同じオブジェクトの一部であり、次のように連結します。

  • 次のいずれかの方向: 奥、手前、左、右、上および下

  • 右下または上の奥など、2 つの方向の組み合わせ

26 連結

面、エッジまたはコーナーが接触している場合、ピクセルは連結されます。2 つの隣り合ったピクセルは両方とも "on" の場合に同じオブジェクトの一部であり、次のように連結します。

  • 次のいずれかの方向: 奥、手前、左、右、上および下

  • 右下または上の奥など、2 つの方向の組み合わせ

  • 右上の奥または左下の奥など、3 つの方向の組み合わせ

高次元の場合、bwlabeln は既定値 conndef(ndims(BW),'maximal') を使用します。

連結性は、01 から成る 3 × 3 × ... × 3 行列を指定し、任意の次元に対してより一般的に定義することもできます。1 の値を持つ要素は、conn の中心要素に対する近傍の位置を定義します。conn は、その中心要素に関して対称でなければなりません。詳細は、カスタム連結性の定義を参照してください。

データ型: double | logical

出力引数

すべて折りたたむ

ラベル行列。BW と同じサイズの非負の整数から成る配列として返されます。0 とラベル付けされたピクセルは背景です。1 とラベル付けされたピクセルは 1 番目のオブジェクトを構成し、2 とラベル付けされたピクセルは 2 番目のオブジェクトを構成する、というように、次々にオブジェクトを構成します。

データ型: double

連続領域のラベル行列。double クラスの非負の整数から成る 2 次元配列として返されます。k 番目の領域には、値 k をもつ L 内のすべての要素が含まれています。L で表すオブジェクトと穴の数は、max(L(:)) に等しくなります。背景は、L のゼロの値をとる要素で構成されています。

データ型: double

BW の連結オブジェクトの数。非負の整数として返されます。

データ型: double

ヒント

  • 関数 bwlabelbwlabelnbwconncomp はすべて、バイナリ イメージの連結要素を計算します。bwconncomp は、bwlabelbwlabeln を置き換えて使用できます。メモリ使用量が大幅に削減され、他の関数より高速な場合もあります。

    関数入力次元出力形式メモリの使用連結性
    bwlabel2 次元倍精度をもつラベル行列4 または 8
    bwlabelnN 次元倍精度ラベル行列任意
    bwconncompN 次元CC 構造体任意
  • 既定の連結性を持つ regionprops を使用してバイナリ イメージから特徴を抽出するには、BW を直接 regionprops (すなわち、regionprops(BW)) に渡します。

  • メモリ効率が高いデータ型 (たとえば、double に対して uint8) を使用してラベル行列を計算するには、bwconncomp の出力で関数 labelmatrix を使用します。

    C = bwconncomp(BW);
    L = labelmatrix(CC);
    
    CC = bwconncomp(BW,n);
    S = regionprops(CC);

アルゴリズム

bwlabeln では、次の一般的な処理が使用されます。

  1. すべてのイメージ ピクセルをスキャンし、非ゼロ ピクセルに予備ラベルを割り当て、ラベル等価を和集合検出テーブルに記録します。

  2. 和集合検出アルゴリズム [1] を使用して、等価クラスを解決します。

  3. 対応済みの等価クラスに基づいて、ピクセルの再ラベル付けを行います。

参照

[1] Sedgewick, Robert, Algorithms in C, 3rd Ed., Addison-Wesley, 1998, pp. 11-20.

R2006a より前に導入