主要内容

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

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: {[5×1 double]  [3×1 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 hidden axes object contains an object of type image.

查找图像中的连通分量。

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

确定哪个是图像中的最大对象。

p = regionprops(CC,"Area");
[maxArea,maxIdx] = max([p.Area])
maxArea = 
106
maxIdx = 
52

创建一个包含除最大对象之外的所有对象的二值图像。显示结果。

idx = setdiff(1:CC.NumObjects,maxIdx);
BW2 = cc2bw(CC,ObjectsToKeep=idx);

显示图像。图像省略了最大的对象,而最大的对象正好是单词“different”中两个连续的“f”。

imshow(BW2)

Figure contains an axes object. The hidden 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 极值从左到右对连通分量进行排序。当多个分量具有相同的水平位置时,该函数先从上到下对这些分量进行排序,然后沿任何更高的维度进行排序。下图显示了两个不同区域的极值。

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

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

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

扩展功能

全部展开

版本历史记录

在 R2009a 中推出

全部展开