Main Content

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

イメージ内における円形ブロブの統計の検索

この例は、Blob Analysis ブロックを使用して、イメージ内の円形ブロブの重心、周囲長、および境界ボックスの座標を見つける方法を示しています。モデルは、参照用のラベル行列も出力します。

MATLAB ワークスペースへのデータの読み込み

イメージを MATLAB ワークスペースに読み取ります。

I = imread('coins.png');

入力イメージ内のセグメント化されたオブジェクトを表すブロブを含むバイナリ マスクを読み込みます。

load('maskImage','BW');

入力イメージと、対応するバイナリ マスクを表示します。バイナリ マスクは、さまざまな統計の 10 個の円形ブロブで構成されています。

figure
subplot(1,2,1)
imshow(I,[]);
title('Original Image');
subplot(1,2,2)
imshow(BW)
title('Circular Blobs');

モデル例

Simulink モデルを開きます。

open_system('ex_blkblobanalysis.slx')

モデルは、バイナリ イメージ内のブロブの重心、周囲長、および境界ボックスの座標を計算します。計算された統計は、Draw Markers ブロックと Draw Rectangles ブロックを使用して、入力イメージにオーバーレイされます。

Blob Analysis block の出力ブロブ パラメーターの値は、バイナリ マスク内のブロブの数と同じに設定されます。Draw Markers ブロックは計算された重心をプロットし、Draw Rectangles ブロックは境界ボックスを描画します。周囲長の値は、変数 perimeter として MATLAB ワークスペースにエクスポートされます。ラベル行列は、変数 label として MATLAB ワークスペースにエクスポートされます。

結果のシミュレーションと表示

モデルを実行し、Video Viewer ブロックを使用して結果を表示します。計算された重心と境界ボックスは、元のイメージにオーバーレイされます。円形のマーカーは各ブロブの重心を指定し、各ブロブの周りの四角形は計算された境界ボックスを指定します。

out = sim('ex_blkblobanalysis.slx');

計算されたすべての統計の最初の値は、ラベル値 1 のブロブに対応します。同様に、2 番目の値は、ラベル値 2 のブロブに対応します。マスクの背景に対応するラベル値 0 は無視しなければなりません。

ラベル行列から一意のラベル値を読み取ります。

lb = unique(out.label);

周囲長の値と、対応するラベル値を table にして表示します。

table(lb(2:end),out.perimeter,'VariableNames',{'Label','Perimeter'})
ans =

  10x2 table

    Label    Perimeter
    _____    _________

      1       194.17  
      2       170.02  
      3       191.58  
      4       156.37  
      5       195.58  
      6       186.51  
      7       190.75  
      8       192.17  
      9       167.44  
     10       168.85  

ラベル行列を表示します。

figure
imshow(out.label,[]);
colorbar
title('Label Matrix');