ドキュメンテーション

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

バイナリ イメージ内のオブジェクトのラベル付けと測定

連結要素のラベル付けについて

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

連結要素のラベル付けとは、イメージ内の連結要素を識別し、以下のように各連結要素に一意なラベルを割り当てる処理のことです。

上の行列は "ラベル行列" と呼ばれます。

bwconncomp は以下の例に示すように、連結要素を計算します。

cc = bwconncomp(BW)
cc = 

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

PixelIdxList は各連結要素に属するピクセルのリストを識別します。

連結要素を可視化する場合は、ラベル行列を作成すると便利です。関数 labelmatrix を使用します。結果を確認するには、label2rgb を使用してラベル行列を疑似色イメージとして表示します。

ラベル行列の作成

labeled = labelmatrix(cc);

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

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

注意

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

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

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

関数 bwselect を使用して、バイナリ イメージ内の個々のオブジェクトを選択します。入力イメージ内のピクセルを指定すると、bwselect は入力イメージから指定したピクセルの 1 つを含むオブジェクトのみを含むバイナリ イメージを返します。

非対話モードまたはマウスを使用して、ピクセルを指定できます。たとえば、現在の軸に表示されるイメージ内のオブジェクトを選択するとします。以下のように入力します。

BW2 = bwselect;

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

詳細は、関数 bwselect のリファレンス ページを参照してください。

バイナリ イメージの前面の面積の検出

関数 bwarea はバイナリ イメージの面積を検出します。面積はイメージの前面のサイズの測定値です。大まかに言うと、面積はイメージ内の on ピクセルの数です。

ただし、bwareaon に設定されたピクセルの数を単に数えるわけではありません。むしろ、bwarea は面積を計算する場合に、異なるピクセル パターンに等しくない重み付けを行います。この重み付けは、離散ピクセルを使用して連続的なイメージを表す場合に、固有に存在する歪みを補償します。たとえば、50 個のピクセルの対角線は、50 個のピクセルの横の線より長くなります。重み付け bwarea の使用結果として、横の線は 50 の面積を占め、対角線は 62.5 の面積になります。

次の例は、bwarea を使用して、膨張操作の結果増加した circbw.tif 内の面積の割合をパーセントで計算します。

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

    0.3456

重み付けパターンの詳細は、関数 bwarea のリファレンス ページを参照してください。

バイナリ イメージのオイラー数の検出

関数 bweuler はバイナリ イメージのオイラー数を返します。オイラー数とはイメージのトポロジの尺度です。これは、イメージ内のオブジェクトの合計数からそれらのオブジェクトにある穴の数を差し引いた数として定義されます。4 連結近傍または 8 連結近傍を使用できます。

この例では、8 連結近傍を使用して回路イメージのオイラー数を計算します。

BW1 = imread('circbw.tif'); 
eul = bweuler(BW1,8)

eul =

   -85

この例では、オイラー数は負の値です。これは、穴の数がオブジェクトの数よりも大きいことを示しています。

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