ドキュメンテーション

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

bwconncomp

バイナリ イメージ内の連結要素を検出

説明

CC = bwconncomp(BW) は、バイナリ イメージ BW で検出された連結要素 CC を返します。bwconncomp は 既定の連結性として、2 次元の場合は 8、3 次元の場合は 26、高次元の場合は conndef(ndims(BW),'maximal') を使用します。

CC = bwconncomp(BW,conn) は連結要素を返します。ここで、conn は連結要素の必要な連結性を指定します。

すべて折りたたむ

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]);

配列内の連結要素を検出します。

CC = bwconncomp(BW)
CC = struct with fields:
    Connectivity: 26
       ImageSize: [3 3 3]
      NumObjects: 2
    PixelIdxList: {[5x1 double]  [3x1 double]}

配列内のオブジェクトの重心を計算します。

S = regionprops(CC,'Centroid')
S = 2x1 struct array with fields:
    Centroid

イメージをワークスペースに読み取って表示します。

BW = imread('text.png');
imshow(BW)

イメージ内の連結要素の数を検出します。

CC = bwconncomp(BW)
CC = struct with fields:
    Connectivity: 8
       ImageSize: [256 256]
      NumObjects: 88
    PixelIdxList: {1x88 cell}

イメージ内で最大の要素がどれかを決定して消去します (すべてのピクセルを 0 に設定します)。

numPixels = cellfun(@numel,CC.PixelIdxList);
[biggest,idx] = max(numPixels);
BW(CC.PixelIdxList{idx}) = 0;

イメージを表示します。最大の要素は different という語の連続する 2 つの f となっています。

figure
imshow(BW)

入力引数

すべて折りたたむ

入力バイナリ イメージ。任意の次元の数値配列または 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 つの方向の組み合わせ

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

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

データ型: double | logical

出力引数

すべて折りたたむ

連結要素。4 つのフィールドをもつ構造体として返されます。

フィールド説明
Connectivity連結要素 (オブジェクト) の連結性
ImageSizeBW のサイズ
NumObjectsBW の連結要素 (オブジェクト) の数
PixelIdxList1 行 NumObjects 列の cell 配列。ここで、 cell 配列の k 番目の要素は k 番目のオブジェクトのピクセルの線形インデックスを含むベクトルです。

ヒント

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

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

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

アルゴリズム

連結要素を見つける基本的な手順は以下のとおりです。

  1. 次のラベル付けされていないピクセル p を探索します。

  2. 塗りつぶしアルゴリズムを使用して、p を含んでいる連結要素内のすべてのピクセルにラベルを付けます。

  3. すべてのピクセルがラベル付けされるまで、手順 1 と 2 を繰り返します。

拡張機能

R2009a で導入