通过边界跟踪的数字化二值图像的拓扑结构分析(翻译)

论文原文地址:Suzuki S , Be K . Topological structural analysis of digitized binary images by border following[J]. Computer Vision Graphics & Image Processing, 1985, 30(1):32-46.

通过边界跟踪的数字化二值图像的拓扑结构分析

数字化二值化图像的拓扑分析将会提出两种边界跟踪算法。第一种算法判定二值图像边界间的包围关系,因为外边界和孔边界分别与像素值为 1 的连通域(1-连通域)和孔存在一一对应的关系。该算法提出了一种二值化图像的表现形式,通过这种方式可以提取某些特征而无需重建图像。第二种算法是第一种的修改版,只跟踪最外层的边界(即没有被孔包围的外边界)。当使用一台时序数字计算机时,这些算法可以被有效使用在二值图像的连通域计数、收缩和 拓扑结构 分析上。

1. 介绍

边界跟踪是处理数字化二值图像中的一种基础方法。它从 1-连通域 和 0-连通域(背景或者孔)之间的边界上导出一系列坐标点或者 链码。边界跟踪方法因为存在十分广泛的应用已经被深入研究,其中包括图像识别、图像分析和图像数据压缩 [1-10] 。

本文的目的是提出一种具有拓扑分析能力的边界跟踪算法。如果一个人想要把二值图像转成边界表示,那他可以通过这里提出的方法加少许额外的修改来提取图像的拓扑结构。要被提取的信息是两种边界间的包围关系:外边界和孔边界。因为外边界与 1-连通域,孔边界和 0-连通域间存在一一对应关系,所以可以确定给出二值图像的拓扑结构。

利用光栅扫描和标记在二值图像的拓扑结构分析上的研究已经取得了一定成果 [1,10,11]。不同于这类分析的另一种可选方案是使用边界跟踪。如果一个图像处理系统为了某种目的利用边界跟踪算法,同时也需要分析输入图像的拓扑结构,那本文的方法将很有吸引力。然而,致力于这个课题的研究很少,而存在的方法 [6,7] 也都相当复杂和耗时,以至于和其他没有使用边界跟踪的结构化分析方法相比,他们看起来毫无优势。

本文中,首先我们提出一种可以提取给定二值图像的拓扑结构算法。这个算法是区分外边界和孔边界的边界跟踪算法 [1] 的扩展版本,扩展包括:(1)给每条边一个独特的标记而不是对每条边采用相同的标记过程(边界标记);(2)增加一个步骤来获取当前跟踪边界的父边界(见定义 4)。通过这个算法我们可以提取边界间的包围关系,它也对应着连通域间的包围关系。如果一个二值图像以本文算法提取出来的边界和边界间的包围关系的形式存储,一些简单的图像处理无需恢复原图就可以进行,因此,这个方法提供了一个有效的存储二值图像数据的思路。

接下来我们展示第一个算法的修改版本,只跟踪二值图像最外层的边界(即没有被孔包围的外边界)。当我们想忽视被其他 1-连通域包围的 1-连通域(即忽略内部 1-连通域)时,修改版的算法将给我们一种快速、有序的方法来给 1-连通域计数或者收缩每个 1-连通域到一个点。

2. 基本概念和符号

本文只考虑采样点是矩形网格的数字化二值图像。尽管我们将遵循 [1] 中的通用术语及符号,我们也想定义和声明一些不那么广泛的概念和符号。

一个图像的最上面一行、最下面一行、最左边一列以及最右边一列组成了这个图像的边框。像素值 0,1 分别称作 0-像素,1-像素。为了保留通用性,我们假设二值图像的边框由 0-像素填充,同时假设在处理过程中我们可以赋予像素任意整数值。位于第 i 行,第 j 列的像素点用 (i, j) 表示。我们采用如下坐标系:行 i 从上往下递增,列 j 从左至右递增。图像中在像素点 (i, j) 处的灰度值为 f i , j f_{i,j} fi,j,则整幅图像都可以表示为 F = { f i , j } F=\{f_{i,j}\} F={fi,j}
边框

1-连通域和 0-连通域分别是由 1-像素,0-像素连接组成的。如果 0-连通域 S S S 包含图片的边框,就把 S S S 称为背景,否侧就是一个孔洞。

众所周知为了避免拓扑学矛盾,如果 1-像素当 4 (8) 连通 处理,0-像素必须使用 8 (4) 连通;如果 1-像素当 8 (4) 连通处理,0-像素必须使用 4 (8) 连通;当我们不明确指定连通性的类别时,意味着两种连通性都有效。

边界和连通域间的包围关系定义如下:

定义 1(边界点): 在 4 (8) 连通情况下,一个 1-像素的点 (i, j) 在它的 8 (4) 邻域中有一个 0-像素点 (p, q),那点 (i, j) 就是一个边界点,也可以描述为:如果 (i, j) 属于 1-连通域 S 1 S_1 S1,(p, q) 属于 0-连通域 S 2 S_2 S2,点 (i, j) 是 S 1 S_1 S1 S 2 S_2 S2 间的一个边界点。

定义 2(连通域间的包围关系): 二值图像中给定两个连通域 S 1 S_1 S1 S 2 S_2 S2,如果 S 1 S_1 S1 中的像素点到边框上的像素点,从任意四个方向都存在 S 2 S_2 S2 中的像素点,我们说 S 2 S_2 S2 包围 S 1 S_1 S1。如果 S 2 S_2 S2 包围 S 1 S_1 S1,且它们之间存在一个边界点,则称 S 2 S_2 S2 直接包围 S 1 S_1 S1

定义 3(外边界和孔边界): 外边界是任意 1-连通域和直接包围它的 0-连通域的边界点的集合,相似的,孔边界是孔洞与直接包围它的 1-连通域的边界点的集合。我们用术语 “边界” 表示外边界或者孔边界。注意!孔边界也和外边界一样用 1-像素点(而不是 0-像素点)的集合表示。

以下属性适用于连通域和边界:

属性 1: 对二值图像中的任意一个 1-连通域它的外边界都是唯一的;对任意一个孔洞它的孔边界(孔洞和直接包围它的1-连通域间的边界)也是唯一的。

证明:这个属性显而易见,因为任意一个 1-连通域或孔洞都被另一个连通域直接包围。

我们定义父边界和边界间的包围关系。

定义 4(父边界): 1-连通域 S 1 S_1 S1 和直接包围 S 1 S_1 S1 的 0-连通域 S 2 S_2 S2 的外边界的父边界定义为:

(1)如果 S 2 S_2 S2 是一个孔洞,就是 S 2 S_2 S2 与直接包围 S 2 S_2 S2 的1-连通域的孔边界;

(2)如果 S 2 S_2 S2 是背景,就是图片的边框。

孔洞 S 3 S_3 S3 与直接包围 S 3 S_3 S3 的 1-连通域 S 4 S_4 S4 间的孔边界的父边界就是 S 4 S_4 S4 与直接包围 S 4 S_4 S4 的 0-连通域的外边界。

定义 5(边界的包围关系): 给定二值图像中的边界 B 0 B_0 B0 B n B_n Bn,我们说 B n B_n Bn 包围 B 0 B_0 B0 是存在一系列边界 B 0 B_0 B0 B 1 B_1 B1,…, B n B_n Bn,对所有 k k k 使得 B k B_k Bk B k − 1 B_{k-1} Bk1 的父边界。

从定义 2 到定义 5,我们在连通域以及边界的包围关系中看到如下属性(Fig.1)。
在这里插入图片描述

属性 2: 对任意二值图像,上述两种包围关系是同构的,映射如下:

               一个 1-连通域 <——> 它的外边界
                       一个孔洞 <——> 它的孔边界(在孔洞和直接环绕孔洞的 1-连通域之间的孔边界)
                              背景 <——> 边框

3. 用于拓扑分析的边界跟踪算法

我们提出一种用于拓扑结构分析的边界跟随算法,它能提取二值图像边界间的包围关系。首先我们给出该算法的非正式解释。

算法 1:电视光栅扫描 输入的二值图像,当找到像素点 (i, j) 时中断扫描,该点满足外边界(Fig.2a)或孔边界(Fig.2b)上边缘跟踪起始点的条件。如果像素点 (i, j) 同时满足以上两个条件,(i, j) 必须被当作外边界的起始点。遇到新找到的边界就给它指定一个独特可辨识的数字,我们称之为边界序列号,用 NBD 来表示。

在这里插入图片描述
按如下方法确定新找到边界的父边界。在光栅扫描期间,我们保留最近遇到的(外或者孔)边界的序列号 LNBD。这个保留的边界不是新找到边界的父边界就是和新找到的边界同享一个父边界。因此,我们可以根据 Table 1 用两种边界类型来判断新找到边界的父边界的序列号。

Table 1:描述新找到的边界 B 的父边界的决策规则
序列号为 LNBD 的边界 B1(即最近一次保留的边界)的类型
外边界孔边界
边界 B 的类型外边界边界 B1 的父边界边界 B1
孔边界边界 B1 边界 B1 的父边界

从起始点跟踪当前找到的边界,标记边界上的像素点。边界跟踪方案是经典的一个方案 [1-3];和我们算法的区别显著在标记策略上。

(a)如果当前跟踪的边界在包含像素点 (p, q+1) 的 0-连通域和包含 (p, q) 的 1-连通域之间,改变 (p, q) 的值为 -NBD。(即外边界右侧和孔边界左侧的像素点被标记为 -NBD)

(b)否则,设置 (p, q) 的值为 NBD 除非 (p, q) 在已经追踪过的边界上。

条件 (a) 和 (b) 分别阻止像素点 (p, q) 成为已被跟踪过的外边界及孔边界的跟踪起始点。正数 NBD 及负数 -NBD 各自对应 [1] 中边界跟踪算法里的标记 “l” 和 “r”。

跟踪和标记整个边界后,继续开始光栅扫描。当扫描到图片右下角,算法结束。

让我们用 Fig.3 中描述的例子来解释算法流程。给定输入的二值图像如图 (a)。当光栅扫描到达圈出的 1-像素时,我们发现它满足外边界 (Fig.2a) 起始点的条件,把序列号 2 分配给这个边界,因为序列号 1 先留给了图片的边框,我们还可以从 Table 1 中发现序列号 2 对应的边界的父边界就是图片边框。

接着开始跟踪边界,并如图 (b) 所示把边界上的像素值改为 2 或者 -2。跟踪完整条边界后,继续开始光栅扫描。

图 (b) 中圈出的点满足孔边界 (Fig.2b) 的起始点条件,下一个跟踪边界从它开始。注意,一个被标记为负数的点不能成为边界跟踪的起始点。这条边界 (序列号 3) 的父边界是序列号为 2 的外边界。在边界跟踪期间,两个值为 2 的像素点根据标记规则 (a) 变为 -3,两个值为 1 的像素点根据标记规则 (b) 变成 3。所有值为 2 的其他已访问过的像素点不做改变。继续类似步骤,最终我们获得结果图 (e)。正式的描述在附录 1 中的算法 1 中给出。

从以下属性可以说明算法 1 的有效性。

属性 3: 任何一个 1-连通域 S 1 S_1 S1 的最上面一行最左侧的像素点 (i, j) 满足 (Fig.2a) 中起始点的条件,从 (i, j) 跟踪的边界 B B B 是外边界 (即 (i, j-1) 属于的 0-连通域 S 2 S_2 S2 包围 S 1 S_1 S1),该边界被追踪之后,同样的外边界不会再被追踪。

证明:见附录Ⅱ

属性 4: 当像素点 (i, j) 的右邻居 (i, j+1) 是任何孔洞 S 1 S_1 S1 的最上一行最左侧的点时,该点满足图 (Fig.2b) 中起始点的条件,从 (i, j) 开始追踪的边界 B B B 是孔边界 (即包含 (i, j) 的 1-连通域 S 2 S_2 S2 包围 S 1 S_1 S1),该边界被追踪之后,同样的孔边界不会再被追踪。

证明:同属性 3 中的证明。

属性 5: 算法 1 中的边界跟踪起始点与 1-连通域和孔洞有一一对应的映射关系。

证明:这个属性从属性 3,4 直接推导得出。

属性 6: 当确定特定边界 B B B 的父边界时,变量 LNBD 包含的不是边界 B B B 父边界的序列号就是和边界 B B B 同享一个父边界的边界的序列号。

证明:见附录Ⅲ。

算法 1 以及区分外边界孔边界的边界跟踪算法 [1],借助属性 2 至 5 在应用中有如下优势。

(1)我们可以在二值图像中计算 1-连通域和孔洞的数量,找到它的 欧拉数

(2)我们可以将每一个 1-连通域或孔洞收缩到一个像素点,用外边界的边界跟踪起始点来表示 1-连通域,用孔边界起始点的右邻域像素点来表现孔洞。前后两个点分别位于 1-连通域和孔洞的最上一行的最左侧。

(3)我们可以根据边界上的特征来执行 (1) 或 (2):例如,我们可以只收缩周长大于给定值或其框架矩形面积大于具体值的 1-连通域。

算法 1 从属性 2 至 6 还有如下优势:

(4)我们可以在二值图像中提取连通域间的包围关系,它可以被应用到图像数据库中的图像搜索或图像特征提取。

(5)算法 1 中的用拓扑结构表现边界的方法将对图像的存储方式有实际作用。因为简单的图像处理可以在不恢复原始图像的情况下执行,所以图像处理包括:获得边界特征,例如周长、连通域的面积;分析拓扑结构,例如是否是与背景相邻的 1-连通域,是否有超过 n 个孔洞;根据他们的几何或拓扑特征提取或删除连通域或孔洞。

图 4 展示了一个例子,表现了通过算法 1 导出边界间的拓扑结构。

4. 只提取最外层边界的边界跟踪算法

我们可以修改上面的算法,使它只跟踪二值图像的最外层边界 (即背景与 1-连通域之间的外边界)。

算法 2: 我们这里只解释和算法 1 中的区别。(1) 我们只在当光栅扫描到达像素点,点满足外边界 (Fig.2a) 的跟踪边界起始点条件并且 LNBD <= 0 时,开始边界跟踪。(2) 标记规则与算法 1 中一样,除了值 “2” 和 “-2” 分别用值 “NBD” 和 “-NBD” 取代。(3) 在光栅扫描期间,我们保留最近遇到的非零像素的 “LNBD” 值,每次我们开始扫描图片的新一行时,重置 LNBD 为零。

算法 2 的基本原理如下。最外层边界的父边界是图像的边框。因此,当且仅当点 (i, j) 满足下面的条件 (1) 或 (2) 时,0-像素点右侧的边界点 (i, j) 是最外层边界上的边界点。

(1)所有的像素点 (i, 1),(i, 2)…(i, j-1) 都是 0-像素点。

(2)在电视光栅扫描中最近遇到的边界点 (i, h) 在外边界上,并且点 (i, h+1) 属于背景。

因为我们保留着电视光栅扫描期间最近遇到的非零像素 LNBD 的值,上述条件 (1) 和 (2) 可以通过条件 “LNBD = 0” 和 “LNBD = -2” 分别进行检查,除了最外层不再跟踪其他边界。

属性 7: 算法 2 只跟踪输入二值图像的最外层边界,而且每个最外层边界只跟踪一次。

算法 2 在如果不存在 1-连通域包围另一个 1-连通域的情况下,能有效使用在 1-连通域的计数和形状分析上,因为它不跟踪任何孔边界所以十分效率。如果被一个 1-连通域包围的所有 1-连通域都是噪声或是不需要被处理的其他因素,算法 2 也很有用。在表格 2 中,我们比较了当使用通用数字时序计算机时,一些收缩 1-连通域的算法 [1, 12, 13] 的处理时间。输入的图片都没有被其他 1-连通域包围的 1-连通域,就像图 5 展示的那样:一个是有随机孔洞的斑点图,另一个是线状图。算法 2 的收缩方法几乎连通域标记一样快。如果忽略 1-连通域包围其他所有 1-连通域的情况,它将会更适合,因为连通域标记不能区别最外层的连通域和要被忽略的连通域。
在这里插入图片描述

在这里插入图片描述

5. 结论

本文中,我们展示了一个通过边界跟踪分析二值图像拓扑结构的方法。这是区分二值图像外边界孔边界的边界跟踪算法的延伸。我们也呈现了一种统计 1-连通域数量,以及当希望忽视除最外层 1-连通域之外的 1-连通域时提取二值图像边界的方法。这是第一个算法的修改版。这些方法在被一台数字时序计算机使用时快速且有效。我们现在正在研究他们在文档处理上的应用,比如流程图识别。

附录Ⅰ. 算法 1 的正式描述

当我们在算法中说到 “邻域” 时,我们指的是在 4 (8) 连通情况下的 4 (8) 邻域。设输入图像 F = { f i , j } F=\{f_{i,j}\} F={fi,j}。初始化 NBD 为 1 ( F F F 的边框形成了一个特殊的孔边界,并获得序列号 1;NBD 代表着当前边界的序列号)。用电视光栅扫描图片,对每个 f i , j ≠ 0 f_{i,j}≠0 fi,j=0 的像素点执行下述步骤。每次重新开始扫描图片的新一行时,把 LNBD 重置为 1。

(1)选择以下一个:

       (a)如果 f i , j = 1 f_{i,j}=1 fi,j=1 并且 f i , j − 1 = 0 f_{i,j-1}=0 fi,j1=0,判定像素点 (i, j) 是外边界跟踪起始点,NBD 自己加 1,(i2, j2) <-- (i, j-1)。
       (b)或者如果 f i , j > = 1 f_{i,j}>=1 fi,j>=1 f i , j + 1 = 0 f_{i,j+1}=0 fi,j+1=0,判定像素点 (i, j) 是孔边界的边界跟踪起始点, NBD 自加 1,(i2, j2) <-- (i, j+1),当 f i , j > 1 f_{i,j}>1 fi,j>1 时,LNBD <-- f i , j f_{i,j} fi,j
       (c)否则,跳转到 (4)。

(2)根据新找到边界和序列号为 LNBD 的边界 (即当前行遇到的上一个边界) 的种类,如表 1 所示判定当前边界的父边界。

(3)从起始点 (i, j) 跟踪检测到的边缘:这一步由子步骤 (3.1) 到 (3.5) 完成。

       (3.1)从 (i2, j2) 开始,顺时针环顾 (i, j) 的邻域寻找一个非零像素点。把 (i1, j1) 设为第一个找到的非零点。如果没找到非零点,把 f i , j f_{i,j} fi,j 值设为 -NBD,跳转到 (4)。
       (3.2)(i2, j2) <-- (i1, j1),(i3, j3) <-- (i, j)。
       (3.3)从下一个像素点 (i2, j2) 逆时针方向开始,逆时针检查当前像素点 (i3, j3) 的邻域,寻找一个非零像素点,并把找到的第一个设为 (i4, j4)。
       (3.4)如下改变在点 (i3, j3) 处的值 f i 3 , j 3 f_{i_3,j_3} fi3,j3

                 (a)如果在步骤 (3.3) 中像素点 (i3, j3+1) 是被检查过的 0-像素, f i 3 , j 3 f_{i_3,j_3} fi3,j3 <--   -NBD。
                 (b)如果在步骤 (3.3) 中像素点 (i3, j3+1) 不是被检查过的 0-像素并且 f i 3 , j 3 = 1 f_{i_3,j_3}=1 fi3,j3=1 f i 3 , j 3 f_{i_3,j_3} fi3,j3 <-- NBD。
                 (c)否侧, f i 3 , j 3 f_{i_3,j_3} fi3,j3 值不做改变。

       (3.5)如果 (i4, j4) = (i, j) 并且 (i3, j3) = (i1, j1) (回到起始点),跳转到 (4);否则 (i2, j2) <-- (i3, j3),(i3, j3) <-- (i4, j4),跳回到 (3.3)。

(4)如果 f i , j ≠ 1 f_{i,j}≠1 fi,j=1,那么 LNBD <-- | f i , j f_{i,j} fi,j| 并从 (i, j+1) 处重新开始光栅扫描。当光栅到达图片右下角时,算法结束。

附录Ⅱ. 属性 3 的证明

略。

附录Ⅲ. 属性 6 的证明

略。

致谢

作者非常感谢名古屋大学Fukumura教授、Toriwaki教授、Yokoi教授及其同事进行了富有成果的讨论。作者还感谢电工实验室的白井博士提供的宝贵建议。采用电工学实验室开发的图像处理软件包SPIDER进行对比实验。本研究部分得到日本文部科学省科研资助。

参考文献

略。

举例解释算法 1 的实现过程

根据 附录Ⅰ中 算法 1 的正式描述 解释图 3 中边界的查找情况。

具体概念步骤的说明解释还请先看前文,点按如下颜色区分,借鉴的是4连通的情况,省略了部分重复步骤。

在这里插入图片描述
我们可以发现 (i, j) 和 (i1, j1) 确定后,在跟踪这条边界的过程中都不会改变,只用来判断边界是否结束。

(i3, j3) 指向当前点,判断当前值是否要被修改;(i2, j2) 指向上一个当前点;(i4, j4) 指向最新找到的非零点。如果没有回到原点,当前点变为上一个当前点,最新找到的非零点成为当前点,一直到回到原点。这三个值在跟踪边界的过程中一直在变动。

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值