Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

bwconncomp

查找二值图像中的连通分量

说明

示例

CC = bwconncomp(BW) 返回在二值图像 BW 中找到的连通分量 CCbwconncomp 默认对二维使用 8 连通,对三维使用 26 连通,对更高维使用 conndef(ndims(BW),'maximal') 连通。

示例

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. The axes 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. The axes contains an object of type image.

输入参数

全部折叠

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

示例: BW = imread('text.png');

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

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

意义

二维连通

4 连通

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

8 连通

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

三维连通

6 连通

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

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

18 连通

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

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

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

26 连通

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

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

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

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

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

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

数据类型: double | logical

输出参数

全部折叠

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

字段说明
Connectivity连通分量(对象)的连通性
ImageSizeBW 的大小
NumObjectsBW 中连通分量(对象)的数量
PixelIdxListNumObjects 元胞数组,其中,元胞数组中的第 k 个元素是包含第 k 个对象中像素的线性索引的向量。

提示

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

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

  • 要计算具有更高内存效率的数据类型的标签矩阵(例如,uint8 对比 double),请对 bwconncomp 的输出使用 labelmatrix 函数。有关详细信息,请参阅每个函数的相关文档。

算法

查找连通分量的基本步骤如下:

  1. 搜索下一个未标注的像素 p

  2. 使用泛洪填充算法对包含 p 的连通分量中的所有像素进行标注。

  3. 重复步骤 1 和 2,直到所有像素都已标注。

扩展功能

在 R2009a 中推出