Find connected components in binary image


CC = bwconncomp(BW)
CC = bwconncomp(BW,conn)


CC = bwconncomp(BW) returns the connected components CC found in BW. The binary image BW can have any dimension. CC is a structure with four fields.

ConnectivityConnectivity of the connected components (objects)
ImageSizeSize of BW
NumObjectsNumber of connected components (objects) in BW
PixelIdxList1-by-NumObjects cell array where the kth element in the cell array is a vector containing the linear indices of the pixels in the kth object.

bwconncomp uses a default connectivity of 8 for two dimensions, 26 for three dimensions, and conndef(ndims(BW),'maximal') for higher dimensions.

CC = bwconncomp(BW,conn) specifies the desired connectivity for the connected components. conn can have the following scalar values.



Two-dimensional connectivities


4-connected neighborhood


8-connected neighborhood

Three-dimensional connectivities


6-connected neighborhood


18-connected neighborhood


26-connected neighborhood

Connectivity can be defined in a more general way for any dimension using a 3-by-3-by- ... -by-3 matrix of 0s and 1s. conn must be symmetric about its center element. The 1-valued elements define neighborhood locations relative to conn.

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 other functions.

FunctionInput DimensionOutput FormMemory UseConnectivity
bwlabel2-DLabel matrix with double-precisionHigh4 or 8
bwlabelnN-DDouble-precision label matrixHighAny
bwconncompN-DCC structLowAny

Class Support

BW can be a logical or numeric array of any dimension, and it must be real and nonsparse. CC is a structure.


Example 1

Calculate the centroids of the 3-D objects.

BW = cat(3, [1 1 0; 0 0 0; 1 0 0],...
            [0 1 0; 0 0 0; 0 1 0],...
            [0 1 1; 0 0 0; 0 0 1]);

CC = bwconncomp(BW);
S = regionprops(CC,'Centroid');

Example 2

Erase the largest letter from the image.

BW = imread('text.png');

CC = bwconncomp(BW);
numPixels = cellfun(@numel,CC.PixelIdxList);
[biggest,idx] = max(numPixels);
BW(CC.PixelIdxList{idx}) = 0;
figure, imshow(BW);

More About

expand all


To extract features from a binary image using regionprops with default connectivity, just pass BW directly into regionprops (i.e., regionprops(BW)).

To compute a label matrix having more memory-efficient data type (e.g., uint8 versus double), use the labelmatrix function on the output of bwconncomp. See the documentation for each function for more information.


The basic steps in finding the connected components are:

  1. Search for the next unlabeled pixel, p.

  2. Use a flood-fill algorithm to label all the pixels in the connected component containing p.

  3. Repeat steps 1 and 2 until all the pixels are labelled.

Introduced in R2009a

Was this topic helpful?