Main Content

bwlabeln

对二值图像中的连通分量加标签

说明

示例

L = bwlabeln(BW) 返回标签矩阵 L,其中包含 BW 中的连通分量的标签。

L = bwlabeln(BW,conn) 返回标签矩阵,其中 conn 指定连通性。

[L,n] = bwlabeln(___) 还返回 n,即在 BW 中找到的连通对象的数量。

示例

全部折叠

创建简单的样本三维二值图像。

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])
BW = 
BW(:,:,1) =

     1     1     0
     0     0     0
     1     0     0


BW(:,:,2) =

     0     1     0
     0     0     0
     0     1     0


BW(:,:,3) =

     0     1     1
     0     0     0
     0     0     1

标注图像中的连通分量。

bwlabeln(BW)
ans = 
ans(:,:,1) =

     1     1     0
     0     0     0
     2     0     0


ans(:,:,2) =

     0     1     0
     0     0     0
     0     2     0


ans(:,:,3) =

     0     1     1
     0     0     0
     0     0     2

输入参数

全部折叠

二值图像,指定为任意维度的数值或逻辑数组。对于数值输入,任何非零像素都被视为 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

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

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

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

数据类型: double | logical

输出参量

全部折叠

标签矩阵,以非负整数数组形式返回,其大小与 BW 相同。标签为 0 的像素构成背景。标签为 1 的像素构成一个对象;标签为 2 的像素构成另一个对象;等等。

数据类型: double

BW 中连通对象的数量,以非负整数形式返回。

数据类型: double

提示

  • 此函数根据每个分量的 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

算法

bwlabeln 使用以下一般过程:

  1. 扫描所有图像像素,为非零像素分配初步标签,并将标签等效项记录在一个并查集表中。

  2. 使用并查集算法 [1] 解析等效类。

  3. 基于解析的等效类重新对像素进行标注。

参考

[1] Sedgewick, Robert, Algorithms in C, 3rd Ed., Addison-Wesley, 1998, pp. 11-20.

扩展功能

版本历史记录

在 R2006a 之前推出

全部展开