ドキュメンテーション

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

bwlabel

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

構文

L = bwlabel(BW)
L = bwlabel(BW,n)
[L,num] = bwlabel(___)
[gpuarrayL,num] = bwlabel(gpuarrayBW,n)

説明

L = bwlabel(BW) は、BW で検出された 8 連結オブジェクトのラベルを含むラベル行列 L を返します。ラベル行列 L は、BW と同じサイズになります。

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

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

[gpuarrayL,num] = bwlabel(gpuarrayBW,n) は GPU でラベル付け演算を実行します。入力イメージと出力イメージは gpuArrays です。変数 n は数値配列または gpuArray です。この構文では Parallel Computing Toolbox™ が必要です。

コード生成 サポート: あり。

MATLAB® Function ブロック サポート: なし。

すべて折りたたむ

小さいバイナリ イメージを作成します。

BW = logical ([1     1     1     0     0     0     0     0
               1     1     1     0     1     1     0     0
               1     1     1     0     1     1     0     0
               1     1     1     0     0     0     1     0
               1     1     1     0     0     0     1     0
               1     1     1     0     0     0     1     0
               1     1     1     0     0     1     1     0
               1     1     1     0     0     0     0     0]);

4 連結オブジェクトを使用して、ラベル行列を作成します。

L = bwlabel(BW,4)
L =

     1     1     1     0     0     0     0     0
     1     1     1     0     2     2     0     0
     1     1     1     0     2     2     0     0
     1     1     1     0     0     0     3     0
     1     1     1     0     0     0     3     0
     1     1     1     0     0     0     3     0
     1     1     1     0     0     3     3     0
     1     1     1     0     0     0     0     0

find コマンドを使用して、"2" というラベルが付いたオブジェクトの行座標と列座標を取得します。

[r, c] = find(L==2);
rc = [r c]
rc =

     2     5
     3     5
     2     6
     3     6

小さいバイナリ イメージを作成し、それを含む gpuArray オブジェクトを作成します。

BW = gpuArray(logical([1 1 1 0 0 0 0 0
                      1 1 1 0 1 1 0 0
                      1 1 1 0 1 1 0 0
                      1 1 1 0 0 0 1 0
                      1 1 1 0 0 0 1 0
                      1 1 1 0 0 0 1 0
                      1 1 1 0 0 1 1 0
                      1 1 1 0 0 0 0 0]));

4 連結オブジェクトを使用して、ラベル行列を作成します。

L = bwlabel(BW,4)

find コマンドを使用して、"2" というラベルが付いたオブジェクトの行座標と列座標を取得します。

[r,c] = find(L == 2)

入力引数

すべて折りたたむ

入力バイナリ イメージ。2 次元、実数、非スパースの数値配列または論理配列として指定します。

例: BW = imread(‘text.png’); L = bwlabel(BW);

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

連結性。4 連結オブジェクトには値 4、8 連結オブジェクトには値 8 として指定します。

例: BW = imread(‘text.png’); L = bwlabel(BW,4);

データ型: double

GPU での処理に用いる入力バイナリ イメージ。gpuArray として指定します。

例: BW = gpuArray(imread(‘text.png’)); L = bwlabel(BW);

出力引数

すべて折りたたむ

ラベル行列。入力イメージと同じサイズの、double クラスの配列として返されます。

ラベル行列。double クラスの配列として返されます。

ラベル行列。GPU 処理時の gpuArray として返されます。

詳細

すべて折りたたむ

コード生成

この関数では MATLAB Coder™ を使用した C コードの生成がサポートされています。詳細は、「画像処理のコード生成」を参照してください。

コードを生成する際、パラメーター n はコンパイル時の定数でなければなりません。

ヒント

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

     入力次元出力形式メモリの使用連結性
    bwlabel2 次元倍精度ラベル行列4 または 8
    bwlabelnN 次元倍精度ラベル行列任意
    bwconncompN 次元CC 構造体任意

  • MATLAB 関数 findbwlabel と組み合わせて使用して、特定のオブジェクトを構成するピクセルのインデックスのベクトルを返すことができます。たとえば、オブジェクト 2 内のピクセルの座標を返すには、次のように入力します。

    [r, c] = find(bwlabel(BW)==2)

    出力行列は、疑似色のインデックス付きイメージとして表示できます。各オブジェクトは別の色で表示されるため、元のイメージ内にあるときと比べて区別するのが簡単になります。詳細は、「label2rgb」を参照してください。

  • メモリ効率が高いデータ型 (たとえば、double に対して uint8) を使用してラベル行列を計算するには、bwconncomp の出力で関数 labelmatrix を使用します。詳細は、各関数のリファレンス ページを参照してください。

  • 既定の連結性をもつ regionprops を使用してバイナリ イメージから特徴を抽出するには、BW を直接 regionprops (すなわち、regionprops(BW)) に渡します。

  • 関数 bwlabel は、データ型が logicaluint8 および single の場合、ハードウェアの最適化を利用してより高速に実行できます。ハードウェア最適化では、markermask が 2 次元イメージで、conn が 4 または 8 である必要があります。

アルゴリズム

bwlabel は、参考文献 [1] pp. 40-48 の説明にある一般的な処理を使用します。

  1. 入力イメージは、実行長によりエンコードされます。

  2. 実行をスキャンし、予備ラベルを割り当て、ラベル等価を局所的な等価テーブルに記録します。

  3. 等価クラスを解決します。

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

参照

[1] Haralick, Robert M., and Linda G. Shapiro, Computer and Robot Vision, Volume I, Addison-Wesley, 1992, pp. 28-48.

R2006a より前に導入

この情報は役に立ちましたか?