Main Content

bwlabel

对二维二值图像中的连通分量进行标注

说明

示例

L = bwlabel(BW) 返回标签矩阵 L,其中包含在 BW 中找到的 8 连通对象的标签。

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

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

示例

全部折叠

创建小二值图像。

BW = logical ([1     1     1     0     0     0     0     0
               1     1     1     0     1     1     0     0
               1     1     1     0     1     1     0     0
               1     1     1     0     0     0     1     0
               1     1     1     0     0     0     1     0
               1     1     1     0     0     0     1     0
               1     1     1     0     0     1     1     0
               1     1     1     0     0     0     0     0]);

使用 4 连通对象创建标签矩阵。

L = bwlabel(BW,4)
L = 8×8

     1     1     1     0     0     0     0     0
     1     1     1     0     2     2     0     0
     1     1     1     0     2     2     0     0
     1     1     1     0     0     0     3     0
     1     1     1     0     0     0     3     0
     1     1     1     0     0     0     3     0
     1     1     1     0     0     3     3     0
     1     1     1     0     0     0     0     0

使用 find 命令获取标签为“2”的对象的行和列坐标。

[r, c] = find(L==2);
rc = [r c]
rc = 4×2

     2     5
     3     5
     2     6
     3     6

输入参数

全部折叠

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

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

像素连通性,指定为下列值之一。

意义

二维连通

4

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

Center pixel connected to four pixels

当前像素以灰色显示。

8

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

Center pixel connected to eight pixels

当前像素以灰色显示。

数据类型: 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 结构体任何
  • 您可以结合 bwlabel 使用 MATLAB® find 函数,返回构成特定对象的像素的索引向量。例如,要返回对象 2 中像素的坐标,请输入以下内容:

    [r,c] = find(bwlabel(BW)==2)

    您可以将输出矩阵显示为伪颜色索引图像。每个对象以不同颜色显示,因此这些对象比在原始图像中更容易区分。有关详细信息,请参阅 label2rgb

  • 要使用具有默认连通的 regionprops 从二值图像中提取特征,请使用命令 regionprops(BW)BW 直接传入 regionprops

  • bwlabel 函数可以对数据类型 logicaluint8single 利用硬件优化来加快运行速度。硬件优化要求 markermask 为二维图像,conn 为 4 或 8。

算法

bwlabel 使用参考文献 [1](第 40-48 页)中概述的通用过程:

  1. 对输入图像进行行程长度编码。

  2. 扫描各次运行,从而分配初步标签并在本地等效表中记录标签等效性。

  3. 解析等效类。

  4. 基于解析的等效类重新对各次运行进行标注。

参考

[1] Haralick, Robert M., and Linda G. Shapiro, Computer and Robot Vision, Volume I, Addison-Wesley, 1992, pp. 28-48.

扩展功能

版本历史记录

在 R2006a 之前推出

全部展开