A connected component in a binary image is a set of pixels that form a connected group. For example, the binary image below has three connected components.
Calculate connected components by using bwconncomp
. In this sample code,
BW
is the binary matrix shown in the above image. Specify a
connectivity of 4 so that two adjoining pixels are part of the same object if they
are both on and are connected along the horizontal or vertical direction. The
PixelIdxList
field identifies the list of pixels belonging to
each connected component.
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]}
Connected component labeling is the process of identifying the connected components in an image and assigning each one a unique label. The resulting matrix is called a label matrix.
Create a label matrix by using the labelmatrix
function. This sample code continues with the connected
component structure, cc
, defined in the preceding section.
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
To visualize connected components, display the label matrix as a pseudo-color
image by using the label2rgb
function. The label
identifying each object in the label matrix maps to a different color in the
associated colormap. You can specify the colormap, background color, and how objects
in the label matrix map to colors in the
colormap.
RGB_label = label2rgb(labeled,@copper,'c','shuffle'); imshow(RGB_label)
You can use the bwselect
function to select
individual objects in a binary image. Specify pixels in the input image
programmatically or interactively with a mouse. bwselect
returns
a binary image that includes only those objects from the input image that contain
one of the specified pixels.
For example, use this command to select objects in the image displayed in the current axes.
BW2 = bwselect;
The cursor changes to cross-hairs when it is over the image. Click the objects you
want to select; bwselect
displays a small star over each pixel
you click. When you are done, press Return.
bwselect
returns a binary image consisting of the objects you
selected, and removes the stars.
The regionprops
function can return
measurements for several properties of connected components. Other functions measure
a single property. For example, the bwarea
function returns the area of
a binary image.
This example uses bwarea
to determine the percentage area
increase in circbw.tif
that results from a dilation operation.
The area is a measure of the size of the foreground of the image and is roughly
equal to the number of on
pixels in the image. However,
bwarea
does not simply count the number of pixels set to
on
. Rather, bwarea
weights different pixel
patterns unequally when computing the area. This weighting compensates for the
distortion that is inherent in representing a continuous image with discrete pixels.
For example, a diagonal line of 50 pixels is longer than a horizontal line of 50
pixels. As a result of the weighting bwarea
uses, the horizontal
line has area of 50, but the diagonal line has area of 62.5.
BW = imread('circbw.tif');
SE = ones(5);
BW2 = imdilate(BW,SE);
increase = (bwarea(BW2) - bwarea(BW))/bwarea(BW)
increase = 0.3456
bwconncomp
| bwselect
| label2rgb
| labelmatrix
| regionprops