连通分量标记算法

本文介绍了图像处理中求取二值图像连通区域的Two-pass算法,详细阐述了算法原理和实现过程,通过并查集数据结构进行连接节点的合并与查找。还展示了使用该算法对连通区域进行标记的效果,并提供了代码示例。
摘要由CSDN通过智能技术生成

引言

图像分割领域中一个重要步骤是求取图像的连通区域,后续图像轮廓理解的基石。
Matlab图像工具箱函数bwlabel函数,就是对二值图像连通区域进行标记的函数。

bwlabel
Label connected components in 2-D binary image。
Syntax
L = bwlabel(BW, n)
[L, num] = bwlabel(BW, n)
Description
L = bwlabel(BW, n) returns a matrix L, of the same size as BW, containing labels for the connected objects in BW. The variable n can have a value of either 4 or 8, where 4 specifies 4-connected objects and 8 specifies 8-connected objects. If the argument is omitted, it defaults to 8.

该函数返回一个与原图大小一致的标记图像矩阵。冈萨雷斯书中只介绍了其使用方法,没有介绍其实现原理等,OpenCV也有connectedComponents函数。有必要造轮子,理解步骤。

Two-pass算法

这里我实现的是Two Pass算法,四邻域。该算法对二值图像扫描两次:

  1. 当前像素点若是前景(非零),判断其已扫描过的邻接节点(上邻像素,左邻像素)有无已标记的。若仅有一个含有标记值,则将该标记赋予该位置,若两个都含有标记值,将最小标记赋予当前值,并将这两个标记值合并(Union),归为同一类;若无,新增标记赋予当前值,即label++。
  2. 对上述含有标记的像素,查找其集合的根节点(Find),用根节点对当前值赋值。

执行动态图如下(该图是盗网友的,上面有logo的)。

  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值