Main Content

Find Statistics of Circular Blobs in Image

This example shows how to find the centroid, perimeter, and bounding box coordinates of circular blobs in an image by using the Blob Analysis block. The model also outputs the label matrix for reference.

Load Data To MATLAB Workspace

Read an image into the MATLAB workspace.

I = imread('coins.png');

Load a binary mask containing the blobs that represent the segmented objects in the input image.

load('maskImage','BW');

Display the input image and the corresponding binary mask. The binary mask consists of 10 circular blobs of varied statistics.

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

Example Model

Open the simulink model.

open_system('ex_blkblobanalysis.slx')

The model computes the centroid, perimeter, and bounding box coordinates for the blobs in the binary image. The computed statistics is overlayed on the input image by using the Draw Markers and Draw Rectangles blocks.

The number of output blobs parameter of Blob Analysis block is set equal to the number of blobs in the binary mask. The Draw Markers block plots the computed centroids and the Draw Rectangles block draws the bounding boxes. The perimeter values are exported as variable perimeter to the MATLAB workspace. The label matrix is exported as variable label to the MATLAB workspace.

Simulate and Display Results

Run the model and display the results using the Video Viewer block. The computed centroid and the bounding box are overlayed on the original image. The circular markers specifies the centroid of each blob and the rectangles around each blob specifies the computed bounding boxes.

out = sim('ex_blkblobanalysis.slx');

The first value in all the computed statistics correspond to the blob with label value 1. Similarly, the second values correspond to the blob with label value 2 and so on. The label value 0 corresponding to the background of the mask must be ignored.

Read the unique label values from the label matrix.

lb = unique(out.label);

Display the perimeter values and the corresponding label values as a 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  

Display the label matrix.

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