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

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

連結要素の検出

バイナリ イメージ内の "連結要素" は、連結グループを構成するピクセルの集合です。たとえば、以下のバイナリ イメージには 3 つの連結要素があります。

bwconncomp を使用して連結要素を計算します。次のサンプル コードで、BW は上の図に示すバイナリ行列を表します。2 つの隣り合ったピクセルが両方とも "on" で、水平方向または垂直方向に連結している場合に同じオブジェクトの一部になるように、連結性 4 を指定します。PixelIdxList フィールドは、各連結要素に属するピクセルのリストを識別します。

BW = zeros(8,9);
BW(2:4,2:3) = 1;
BW(5:7,4:5) = 1;
BW(2,7:9) = 1;
BW(3,8:9) = 1;
BW
BW =

     0     0     0     0     0     0     0     0     0
     0     1     1     0     0     0     1     1     1
     0     1     1     0     0     0     0     1     1
     0     1     1     0     0     0     0     0     0
     0     0     0     1     1     0     0     0     0
     0     0     0     1     1     0     0     0     0
     0     0     0     1     1     0     0     0     0
     0     0     0     0     0     0     0     0     0
cc = bwconncomp(BW,4)
cc = 

    Connectivity: 8
       ImageSize: [8 9]
      NumObjects: 3
    PixelIdxList: {[6x1 double]  [6x1 double]  [5x1 double]}

連結要素のラベル付け

連結要素のラベル付けとは、イメージ内の連結要素を識別し、各連結要素に一意なラベルを割り当てる処理のことです。結果として得られる行列は "ラベル行列" と呼ばれます。

関数 labelmatrix を使用してラベル行列を作成します。次のサンプル コードは、前の節で定義した連結要素構造体 cc を引き続き使用します。

labeled = labelmatrix(cc)
labeled =

  8×9 uint8 matrix

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

連結要素を可視化するには、関数 label2rgb を使用してラベル行列を疑似色イメージとして表示します。ラベル行列の各オブジェクトを識別するラベルは、関連するカラーマップの異なる色にマップされます。カラーマップ、背景色、ラベル行列の中のオブジェクトがカラーマップの中の色にどのようにマップされるかを指定できます。

RGB_label = label2rgb(labeled,@copper,'c','shuffle');
imshow(RGB_label)

バイナリ イメージ内のオブジェクトの選択

関数 bwselect を使用して、バイナリ イメージ内の個々のオブジェクトを選択します。プログラムを使用して、またはマウスで対話的に入力イメージ内のピクセルを指定します。bwselect は、入力イメージから指定したピクセルの 1 つを含むオブジェクトのみを含むバイナリ イメージを返します。

たとえば、次のコマンドを使用して、現在の軸に表示されるイメージ内のオブジェクトを選択します。

BW2 = bwselect;

カーソルはイメージ上に置くと十字形に変わります。選択するオブジェクトをクリックします。bwselect は、クリックした各ピクセル上に小さな星印を表示します。選択を終了したら、Return キーを押してください。bwselect は選択したオブジェクトから構成されるバイナリ イメージを返し、星印は削除されます。

連結要素のプロパティの測定

関数 regionprops は、連結要素の複数のプロパティの測定値を返すことができます。他の関数は、単一のプロパティを測定します。たとえば、関数 bwarea はバイナリ イメージの面積を返します。

この例は、bwarea を使用して、膨張操作の結果増加した circbw.tif 内の面積の割合をパーセントで計算します。この面積はイメージの前面のサイズの測定値で、大まかにはイメージ内の on ピクセルの数と同じです。ただし、bwareaon に設定されたピクセルの数を単に数えるわけではありません。むしろ、bwarea は面積を計算する場合に、異なるピクセル パターンに等しくない重み付けを行います。この重み付けは、離散ピクセルを使用して連続的なイメージを表す場合に、固有に存在する歪みを補償します。たとえば、50 個のピクセルの対角線は、50 個のピクセルの横の線より長くなります。重み付け bwarea の使用結果として、横の線は 50 の面積を占め、対角線は 62.5 の面積になります。

BW = imread('circbw.tif'); 
SE = ones(5);
BW2 = imdilate(BW,SE);
increase = (bwarea(BW2) - bwarea(BW))/bwarea(BW)
increase =

    0.3456

参考

| | | |

関連する例

詳細