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.

Connected component labeling is the process of identifying the connected components in an image and assigning each one a unique label, like this:

The matrix above is called a *label matrix*.

`bwconncomp`

computes connected components,
as shown in the example:

cc = bwconncomp(BW) cc = Connectivity: 8 ImageSize: [8 9] NumObjects: 3 PixelIdxList: {[6x1 double] [6x1 double] [5x1 double]}

The `PixelIdxList`

identifies the list of pixels
belonging to each connected component.

For visualizing connected components, it is useful to construct
a label matrix. Use the `labelmatrix`

function. To
inspect the results, display the label matrix as a pseudo-color image
using `label2rgb`

.

Construct a label matrix:

labeled = labelmatrix(cc);

Create a pseudo-color image, where the label identifying each
object in the label matrix maps to a different color in the associated `colormap`

matrix.
Use `label2rgb`

to choose the colormap, the 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,'InitialMagnification','fit')

The functions `bwlabel`

, `bwlabeln`

,
and `bwconncomp`

all compute connected components
for binary images. `bwconncomp`

replaces the use
of `bwlabel`

and `bwlabeln`

. It
uses significantly less memory and is sometimes faster than the older
functions.

Function | Input Dimension | Output Form | Memory Use | Connectivity |
---|---|---|---|---|

`bwlabel` | 2-D | Double-precision label matrix | High | 4 or 8 |

`bwlabeln` | N-D | Double-precision label matrix | High | Any |

`bwconncomp` | N-D | `CC` struct | Low | Any |

You can use the `bwselect`

function to select
individual objects in a binary image. You specify pixels in the input
image, and `bwselect`

returns a binary image that
includes only those objects from the input image that contain one
of the specified pixels.

You can specify the pixels either noninteractively or with a mouse. For example, suppose you want to select objects in the image displayed in the current axes. You type

BW2 = bwselect;

The cursor changes to crosshairs 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.

See the reference page for `bwselect`

for
more information.

The `bwarea`

function returns the area of a
binary image. The area is a measure of the size of the foreground
of the image. Roughly speaking, the area is the number of `on`

pixels
in the image.

`bwarea`

does not simply count the number of
pixels set to `on`

, however. 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.

This example uses `bwarea`

to determine the
percentage area increase in `circbw.tif`

that results
from a dilation operation.

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

See the reference page for `bwarea`

for
more information about the weighting pattern.

The `bweuler`

function returns the Euler number
for a binary image. The Euler number is a measure of the topology
of an image. It is defined as the total number of objects in the image
minus the number of holes in those objects. You can use either 4-
or 8-connected neighborhoods.

This example computes the Euler number for the circuit image, using 8-connected neighborhoods.

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

In this example, the Euler number is negative, indicating that the number of holes is greater than the number of objects.

Was this topic helpful?