Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

bwconncomp

バイナリ イメージ内の連結要素の検出とカウント

説明

CC = bwconncomp(BW) は、バイナリ イメージ BW 内の連結要素 CC を検出してカウントします。CC 出力構造体には、イメージ内の関心領域 (ROI) などの連結要素の総数と、各要素に割り当てられているピクセル インデックスが格納されます。bwconncomp は、既定の連結性として 2 次元の場合は 8 連結を、3 次元の場合は 26 連結を使用します。

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=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: {1x88 cell}

イメージ内で最大のオブジェクトを判定します。

p = regionprops(CC,"Area");
[maxArea,maxIdx] = max([p.Area])
maxArea = 106
maxIdx = 52

最大のオブジェクトを除くすべてのオブジェクトを含むバイナリ イメージを作成します。結果を表示します。

idx = setdiff(1:CC.NumObjects,maxIdx);
BW2 = cc2bw(CC,ObjectsToKeep=idx);

イメージを表示します。このイメージでは最大のオブジェクトが省略されています。最大のオブジェクトは different という語の連続する 2 つの f となっています。

imshow(BW)

入力引数

すべて折りたたむ

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

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

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

意味

2 次元連結性

4

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

Center pixel connected to four pixels

現在のピクセルを灰色で示します。

8

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

Center pixel connected to eight pixels

現在のピクセルを灰色で示します。

3 次元連結性

6

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

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

Center pixel connected to the faces of 6 pixels

現在のピクセルは立方体の中心です。

18

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

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

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

Center pixel connected to the faces of 6 pixels and the edges of 12 pixels

現在のピクセルは立方体の中心です。

26

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

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

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

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

Center pixel connected to the faces of 6 pixels, the edges of 12 pixels, and the corners of 8 pixels

現在のピクセルは立方体の中心です。

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

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

データ型: double | logical

出力引数

すべて折りたたむ

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

フィールド説明
Connectivity連結要素 (オブジェクト) の連結性
ImageSizeBW のサイズ
NumObjectsBW 内の連結要素 (オブジェクト) の数
PixelIdxList

1 行 NumObjects 列の cell 配列。ここで、cell 配列の k 番目の要素は k 番目の連結要素のピクセルの線形インデックスを含むベクトルです。

ヒント

  • この関数は、各要素の top-left 極値を基準に、連結要素を左から右に並べ替えます。複数の要素の水平位置が同じ場合、関数はそれらの要素を上から下に並べ替えた後、より高い次元に沿って再度並べ替えます。この図は、2 つの異なる領域の極値を示しています。

    Two differently shaped regions, each with their eight extrema points labeled

  • 関数 bwlabelbwlabeln、および bwconncomp はすべて、バイナリ イメージの連結要素を計算します。bwconncomp は使用するメモリが大幅に少なく、場合によっては他の関数よりも高速です。

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

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

拡張機能

バージョン履歴

R2009a で導入

すべて展開する