Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

bwconncomp

查找二值图像中的连通分量并对其计数

说明

示例

CC = bwconncomp(BW) 查找二值图像 BW 中的连通分量 CC 并对其计数。CC 输出结构体包含图像中连通分量(如感兴趣区域 (ROI))的总数,以及分配给每个分量的像素索引。bwconncomp 对二维图像使用默认 8 连通,对三维图像使用默认 26 连通。

示例

CC = bwconncomp(BW,conn) 为连通分量指定期望的 conn 连通。

示例

全部折叠

创建小型三维数组示例。

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)
CC = struct with fields:
    Connectivity: 26
       ImageSize: [3 3 3]
      NumObjects: 2
    PixelIdxList: {[5x1 double]  [3x1 double]}

计算数组中对象的质心。

S = regionprops(CC,'Centroid')
S=2×1 struct array with fields:
    Centroid

将图像读入工作区并显示它。

BW = imread('text.png');
imshow(BW)

Figure contains an axes object. The axes object contains an object of type image.

查找图像中连通分量的数量。

CC = bwconncomp(BW)
CC = struct with fields:
    Connectivity: 8
       ImageSize: [256 256]
      NumObjects: 88
    PixelIdxList: {1x88 cell}

确定图像中的最大分量并将其擦除(将所有像素设置为 0)。

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

显示图像,注意最大分量正好是单词 differen 中两个连续的 f。

figure
imshow(BW)

Figure contains an axes object. The axes object contains an object of type image.

输入参数

全部折叠

二值图像,指定为任意维度的数值或逻辑数组。对于数值输入,任何非零像素都被视为 1 (true)。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

像素连通性,指定为下表中的值之一。对于二维图像,默认连通性是 8,对于三维图像,默认连通性是 26

意义

二维连通

4

如果像素的边缘相互接触,则这些像素具有连通性。如果两个相邻像素都为 on 并在水平或垂直方向上连通,则它们是同一对象的一部分。

Center pixel connected to four pixels

当前像素以灰色显示。

8

如果像素的边缘或角相互接触,则这些像素具有连通性。如果两个相邻像素都为 on 并在水平、垂直或对角线方向上连通,则它们是同一对象的一部分。

Center pixel connected to eight pixels

当前像素以灰色显示。

三维连通

6

如果像素的面接触,则这些像素具有连通性。如果两个相邻像素都为 on 并以如下方式连通,则它们是同一对象的一部分:

  • 在所列方向之一上连通:内、外、左、右、上、下

Center pixel connected to the faces of 6 pixels

当前像素是立方体的中心。

18

如果像素的面或边缘接触,则这些像素具有连通性。如果两个相邻像素都为 on 并以如下方式连通,则它们是同一对象的一部分:

  • 在所列方向之一上连通:内、外、左、右、上、下

  • 在两个方向的组合上连通,如右下或内上

Center pixel connected to the faces of 6 pixels and the edges of 12 pixels

当前像素是立方体的中心。

26

如果像素的面、边缘或角接触,则这些像素具有连通性。如果两个相邻像素都为 on 并以如下方式连通,则它们是同一对象的一部分:

  • 在所列方向之一上连通:内、外、左、右、上、下

  • 在两个方向的组合上连通,如右下或内上

  • 在三个方向的组合上连通,如内右上或内左下

Center pixel connected to the faces of 6 pixels, the edges of 12 pixels, and the corners of 8 pixels

当前像素是立方体的中心。

对于更高的维度,bwconncomp 使用默认值 conndef(ndims(BW),"maximal")

也可以通过指定由 01 组成的 3×3×...×3 矩阵,以更通用的方式来定义任意维度的连通性。值为 1 的元素定义相对于 conn 的中心元素的邻域位置。请注意,conn 必须关于其中心元素对称。有关详细信息,请参阅指定自定义连通性

数据类型: double | logical

输出参数

全部折叠

连通分量,以具有四个字段的结构体形式返回。

字段描述
Connectivity连通分量(对象)的连通性
ImageSizeBW 的大小
NumObjectsBW 中连通分量(对象)的数量
PixelIdxList

NumObjects 元胞数组,其中,元胞数组中的第 k 个元素是包含第 k 个连通分量中像素的线性索引的向量。

提示

  • 此函数根据每个分量的 top-left 极值从左到右对连通分量进行排序。当多个分量具有相同的水平位置时,该函数先从上到下对这些分量进行排序,然后沿任何更高的维度进行排序。下图显示了两个不同区域的极值。

    Two differently shaped regions, each with their eight extrema points labeled

  • 函数 bwlabelbwlabelnbwconncomp 都计算二值图像的连通分量。bwconncomp 使用的内存少得多,有时运行速度比其他函数更快。

    函数输入维度输出格式内存使用量连通性
    bwlabel二维双精度标签矩阵4 或 8
    bwlabelnN 维双精度标签矩阵任何
    bwconncompN 维CC 结构体任何
  • 要使用具有默认连通的 regionprops 从二值图像中提取特征,请使用命令 regionprops(BW)BW 直接传入 regionprops

  • 要计算具有更高内存效率的数据类型的标签矩阵(例如,uint8 对比 double),请对 bwconncomp 的输出使用 labelmatrix 函数。

扩展功能

版本历史记录

在 R2009a 中推出

全部展开