Matlab中二值图像连通域标记

文章目录

最近用到了regionprops函数,这个函数主要是对二值图像的区域进行处理,其中很重要的一步就是要对多个连通区域进行标记,后续的处理都很简单。所以针对多个连通区域标记需要重点研究一下。
maltab中对于二值图像的连通域标记用到了bwconncomp函数,而查看内部代码,发现调用的是bwlabel1函数,bwlabel1函数为matlab的内置函数,无法直接查看m文件,略坑。在网上搜集了下资料,看到有人对该问题做了一些分析,这里就转载过来重新说一下。

算法思想

bwconncomp对于二值图像进行标记主要分为如下几步:

1)fillRunVectors函数完成所有团的查找与记录:
逐行扫描图像,我们把每一行中连续的白色像素组成一个序列称为一个团(run),并记下它的起点start、它的终点end以及它所在的行号。

2) firstPass函数完成团的标记与等价对列表的生成。
对于除了第一行外的所有行里的团,如果它与前一行中的所有团都没有重合区域,则给它一个新的标号;如果它仅与上一行中一个团有重合区域,则将上一行的那个团的标号赋给它;如果它与上一行的2个以上的团有重叠区域,则给当前团赋一个相连团的最小标号,并将上一行的这几个团的标记写入等价对,说明它们属于一类。

3)等价对生成等价序列
将等价对转换为等价序列,每一个序列需要给一相同的标号,因为它们都是等价的。从1开始,给每个等价序列一个标号。
这里有两种常用的方法:1)稀疏矩阵与Dulmage-Mendelsohn分解算法用来消除等价对;2)图的深度优先遍历来替换等价对
这两中方法可以在本文的参看文献里具体查看。

4)遍历开始团的标记,查找等价序列,给予它们新的标记。

参考文献

本文仅仅是大概描述了下maltab中对于二值图像连通域的标记算法思想,由于已经有文章详细论述,这里就没有细讲,有兴趣的同学可以细读下如下几篇文章,相信一定会有收获。
1、图像分析:二值图像连通域标记
2、读Matlab7.7 IPT的bwlabel函数(一)——bwlabel1的Python描述
3、读Matlab7.7 IPT的bwlabel函数(二)——bwlabel2的Matlab实现
4、读Matlab7.7 IPT的bwlabel函数(三)——如果是xialulee,会怎样
5、读Matlab7.7 IPT的bwlabel函数(四)——bwlabel大结局:dmperm现身



本文出自 TENNFY WU,转载时请注明出处及相应链接。

本文永久链接: http://www.tennfy.com/1949.html

下一篇文章:

上一篇文章:

4人参与了讨论

  1. Faris 说:

    我来打个酱油~~~~ :oops:

  2. 无纯洁 说:

    Matlab太高端。。。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

3 + 4 = ?


您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

返回顶部