ドキュメンテーション

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

bwconncomp

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

構文

CC = bwconncomp(BW)
CC = bwconncomp(BW,conn)

説明

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

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

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

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

すべて折りたたむ

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: {[5×1 double]  [3×1 double]}

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

S = regionprops(CC,'Centroid')
S = 

  2×1 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: {1×88 cell}

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

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

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

figure
imshow(BW)

入力引数

すべて折りたたむ

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

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

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

連結要素の連結性。次のいずれかのスカラー値として指定します。

意味

2 次元連結性

4

4 連結近傍

8

8 連結近傍

3 次元連結性

6

6 連結近傍

18

18 連結近傍

26

26 連結近傍

高次元の場合、bwconncompconndef(ndims(BW),'maximal') を使用して既定の連結性を計算します。

連結数は、0 と 1 を要素とする 3 × 3 × ... × 3 行列を使用することにより、任意の次元に対してより一般的に定義できます。conn は、その中心要素について対称でなければなりません。1 の値をもつ要素は、conn に対して近傍の位置を設定します。

例: BW = imread('text.png'); CC = bwconncomp(BW,4);

データ型: double | logical

出力引数

すべて折りたたむ

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

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

詳細

すべて折りたたむ

コード生成

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

コード生成時には、以下の点に注意してください。

  • bwconncomp は 2 次元入力のみをサポートします。

  • 引数 conn はコンパイル時の定数でなければなりません。サポートされる連結性は 4 または 8 のみです。連結性は 3 行 3 列の行列として指定することもできますが、[0 1 0;1 1 1;0 1 0] または ones(3) に限られます。

  • 戻り値の CC 構造体の PixelIdxList フィールドはサポートされません。

ヒント

  • 関数 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 で導入

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