图像轮廓检测算法

本文介绍了四种最常见的环路检测算法。

前两个算法,即用于追踪正方形和追踪摩尔环境的算法,易于实现,因此经常用于确定给定图案的轮廓。 不幸的是,这两种算法都有一些缺点,由于它们的特殊类型的相邻性,使得无法检测出一大类图案的轮廓。

这些算法将忽略模式中的所有“漏洞” 。 例如,如果我们具有与图1所示相似的图案,则算法检测到的电路将与图2所示相似(轮廓由蓝色像素表示)。 在某些应用领域中,这是完全可以接受的,但是在其他领域,例如,在字符识别中,有必要检测图案的内部部分以找到区分特定字符的所有空格。 ( 图3显示了该模式的“完整”轮廓。)

图片


因此,为了获得完整的轮廓,首先需要使用“孔搜索”算法确定给定图案中的孔,然后将轮廓检测算法应用于每个孔。

图片

什么是连接性?


在具有二进制值的数字图像中,像素可以具有以下值之一:1-当它是图案的一部分时,或0-当它是背景的一部分时,即 没有灰色渐变。 (我们将假设值为1的像素是黑色,而值为0的像素是白色)。

为了识别数字图案中的物体 ,我们需要找到彼此“连接”的黑色像素组。 换句话说,给定数字模式中的对象是该模式的连接组件

在一般情况下, 连接的分量是一组黑色像素P ,因此对于P中的每对像素p ip j ,都有一系列像素p i ,...,p j ,使得:

a)序列中的所有像素都在集合P中 ,即 是黑色的

b) 序列中彼此相邻的每2个像素为“邻居”。

一个重要的问题出现了: 我们什么时候可以说2个像素是“邻居”? 由于我们使用正方形像素,因此,由于以下原因,上一个问题的答案并非无关紧要:在正方形细分中,像素具有相同的边或顶点,或者没有任何共同点。 每个像素共有8个像素。 这样的像素构成了该像素的“摩尔邻域”。 我们是否应该考虑只有一个共同顶点的“邻居”像素? 还是为了被视为“邻居”,两个像素必须具有相同的边缘?

因此,存在两种连接类型,即:4连接性和8连接性。

4连接


我们什么时候可以说给定的黑色像素组是4个连接的? 首先,您需要定义4邻居 (也称为直接邻居 )的概念:

4邻居定义 :如果QP具有公共边缘,则像素Q是给定像素P4邻居 。 像素P的4个邻居(称为P2,P4,P6P8 )在下面的图2中显示。


4连接分量的定义 :如果对于P中的每对像素p ip j都有一系列像素p i ,...,p j ,则黑色像素P的集合是4连接分量

a)序列中的所有像素都在集合P中 ,即 是黑色的

b) 序列相邻的每两个像素是4个 相邻像素

4连接模式的示例


下图显示了4连接模式的示例:



8连接


我何时可以说给定的一组黑色像素是8位连接的 ? 首先,我们需要定义8邻居 (也称为间接邻居 )的概念:

8邻居定义 :如果QP具有公共边或顶点,则像素Q是给定像素P8邻居 (或只是邻居 )。 给定像素P的8个邻居组成了该像素的摩尔邻域。

8个连接的分量的定义 :如果对于P中的每对像素p ip j都有一系列的像素p i ,...,p j ,则黑色像素P的集合是8个连接的分量 (或只是一个连接的分量

a)序列中的所有像素都在集合P中 ,即 是黑色的

b) 在此序列相邻的每两个像素是8个 相邻像素

注意 :所有4连接模式都是8连接的,即 4连接模式是许多8连接模式的子集。 另一方面,8连接模式可能无法4连接。

8链接模式示例


下图显示了8连接但不是4连接的模式:



非8连接模式的示例:


下图显示了未连接8个模式的示例,即 由多个连接的组件组成(该图显示了三个连接的组件):



平方迹线算法


主意


平方跟踪算法的思想非常简单。 这可以归因于以下事实:该算法是检测二进制模式轮廓的首批尝试之一。

要了解其工作原理,您需要一点想象力...

假设我们有一个数字模式,例如,在白色像素背景上的一组黑色像素,即 在网格上; 找到黑色像素并将其声明为我们的“ 初始 ”像素。 (查找“ 初始 ”像素可以用许多不同的方法来实现;我们将从网格的左下角开始,从下至上,从最左列到最右端扫描每列像素,直到遇到黑色像素为止。我们将其声明为“ 初始 ”。 “。)

现在,假设您是一只站在起始像素上的瓢虫,如下图1所示。 要获取模式的轮廓,您需要执行以下操作:

, , ,

, , ,

.


圈出的黑色像素将成为图案的轮廓。


正方形轨迹算法的一个重要方面是“方向感”。 向左和向右旋转是相对于当前位置执行的,这取决于您到达当前像素的方式。 因此,为了采取正确的行动,您需要跟踪自己的方向。

演算法


以下是平方跟踪算法的正式描述:

输入:方形镶嵌 T ,其中包含黑细胞的连接成分P。

输出:边界像素的行B(b 1 ,b 2 ,...,b k ,即 轮廓。

开始

  • B定义为空集。
  • 从下到上,从左到右扫描单元T ,直到找到P的黑色像素s为止。
  • s插入B。
  • 将当前像素p设为初始像素s
  • 向左转,即 转到p左侧的相邻像素。
  • 更新p ,即 它成为当前像素。
  • p不等于s时 ,执行

    如果当前像素p是黑色
    • p插入B并向左转(转到p左侧的相邻像素)。
    • 更新p ,即 它成为当前像素。

    否则
    • 向右转(转到p右边的下一个像素)。
    • 更新p ,即 它成为当前像素。

    “再见”周期结束

结束

注意:不应将“左”和“右” 概念与页面或阅读器相关,而应考虑扫描期间进入“当前”像素的方向。

示范


以下是方形跟踪算法如何检测图案轮廓的动画演示。 不要忘记瓢虫以像素为单位移动。 请注意左右旋转时方向的变化。 相对于像素中的当前方向执行左转和右转,即 瓢虫的方向。


分析方法


事实证明,平方跟踪算法的功能非常有限。 他无法检测出在现实应用中经常出现的大量图案轮廓。

这主要是由于以下事实:左右旋转未考虑“沿
对角线”。

让我们看一下具有不同连通性的不同模式,并查看为什么方形跟踪算法失败。 此外,我们将研究提高算法性能的方法,即使在具有特殊连接类型的模式下也可以使其工作。

停止标准


该算法的弱点之一是停止标准的选择。 换句话说,算法什么时候停止执行?

在平方跟踪算法的原始描述中,完成条件是第二次击中初始像素。 事实证明,如果该算法依赖于这样的标准,那么它将无法检测出大量图案的轮廓。

以下是一个动画演示,说明了由于选择了错误的停止标准而导致算法无法检测到图案的精确轮廓的情况:


如您所见,改善停止条件可以成为改善算法整体性能的良好开端。 现有的关闭条件有两种有效的替代方法:

a)仅通过访问起始像素n次来停止,其中n至少为2,或者

b)第二次击中起始像素后停止,就像我们最初击中它一样。

该标准由Jacob Eliosoff提出,因此我们将其称为停止Jacob标准

更改停止条件通常可以提高平方迹线算法的有效性,但不能克服其在具有特殊类型的连接性的情况下所具有的其他缺点。

平方跟踪算法无法检测到连通性为8而不连通性为4的一系列图案的轮廓。

以下是动画演示,演示了方形跟踪算法(使用雅各布的停止准则)如何无法检测到具有连通性8而没有连通性4的模式的正确轮廓:


这个算法完全没用吗?


如果阅读了以上分析,您可能会认为平方迹线算法无法检测到大多数图案的轮廓。 但是事实证明。 有一个特殊的模式系列,其中的路径由平方跟踪算法完全检测到。

P为网格上具有连通性4的黑色像素集。 让网格的白色像素,即 背景像素W也具有4的连通性。事实证明,在这种图案及其背景的条件下,可以证明平方迹线算法(使用雅各布停止准则)将始终成功地处理轮廓的确定。

以下是在图案和背景像素都连接为4的情况下的证明,使用雅各布停止准则时,正方形迹线算法将正确确定轮廓。

证明
给定 :图案P使得图案的所有像素(即黑色)和背景像素(即白色)W具有4的连通性。

初次观察

由于白色像素组W的连通性为4,这意味着图案中不存在任何“ ”(用非正式术语来说,“ ”是指白色像素组完全被图案的黑色像素包围)。

图案中任何“ ”的存在将导致白色像素组与其余白色像素的分离。 但是,许多白色像素会失去连接性4。

下面的图2图3显示了两种类型的“ ”,它们可以在具有连通性4的模式中出现:



第二次观察

图案的任何两个黑色像素必须具有一个公共面。

假设两个黑色像素只有一个公共顶点。 然后,为了满足图案的4连接性,必须有一条连接这两个像素的路径,以使该路径上的每两个相邻像素具有4的连通性。但这将提供类似于图3的图案。 换句话说,这将导致白色像素分离。 下面的图4示出了典型的图案,该图案满足以下假设:图案和背景中的像素是4连接的,即,像素为4。 没有“ ”,并且每两个黑色像素有一个公共面:


如下表示这样的模式很有用:

首先我们考虑边界像素,即 模式的轮廓。 然后,如果我们认为每个边界像素具有4个单位长度的边缘,我们将看到其中一些边缘与相邻的白色像素相同。 我们称这种边缘为边界边缘

这样的边界边缘可以被认为是多边形的边缘。 在图片中
在下面的图5中,通过与上面的图4中的图案相对应的多边形示例说明了这一想法:


如果我们考虑可能以这种模式出现的边界像素的所有可能“配置”,我们将看到有两种简单的情况,如下图6图7所示。

边界像素可以是这些情况或其他布置的倍数,即 这两种情况的曲折。 边界肋以蓝色标记为E1,E2,E3E4


第三观察

在上述两种情况下,无论我们选择的初始像素是什么,无论它落入哪个方向,平方跟踪算法都不会“回退”(backtrack) ,也不会两次“穿过” 边界边缘 (仅当它第二次不跟踪边界时)并且永远不会错过边界边 。 看看吧!

这里需要澄清两个概念:

a)算法“返回” ,在跟踪整个边界之前,它返回访问已经访问过的像素,并且

b)对于每个边界肋,有两种“穿过它”的方式 ,即“向内”和“向外”(其中“向内”是指相应多边形的向内运动,而“向外”是指多边形的向外)。

另外,当算法“向内”穿过边界边缘之一时,它将“向外”穿过下一个边界边缘,即 平方迹线算法不应以相同的方式穿过两个连续的边。

最后观察

每个图案都有偶数个 边界边

如果查看图5中的多边形,可以看到:

如果我们要从图中标记的顶点S开始并遵循边界边缘,直到再次到达S ,那么我们注意到在此过程中,我们会交叉偶数个边界边缘。 我们可以将每个边界边缘视为一个单独方向上的“步骤”。 然后,如果要返回到起始位置,则右侧的每个“步骤”都必须在左侧具有一个相应的“步骤”。 垂直的“步骤”也是如此。 因此,“步骤”必须具有相应的对,这解释了为什么每个这些模式都将具有偶数个边界边。

因此,当用于跟踪正方形的算法第二次通过(初始像素的) 初始边界边缘进入时,它将沿与第一次相同的方向进行。

这样做的原因是,由于有两种方式可以穿越边界边缘,并且算法交替地向内和向外移动,并且边界边缘的数量为偶数,因此算法将第二次通过初始边界边缘,方法与第一个。

结论


在4个连接的图案和背景的情况下,平方迹线算法将检测整个边界,即 轮廓,图案,并且将在单次跟踪后停止工作,即 它不会再次跟踪它,因为当它第二次到达初始边界边缘时,它将以与第一次相同的方式输入。 因此,只要模式和背景都为4位连接,具有Jacob停止准则的平方跟踪算法将正确确定任何模式的计数器。

追踪摩尔的环境


主意


Moore-Neighbor跟踪的思想很简单; 但是在解释它之前,我们需要解释一个重要概念:像素的摩尔邻域

摩尔附近


像素P的Moore邻域是8个像素的集合,这些像素具有与该像素相同的顶点或边缘。 这样的像素,即P1,P2,P3,P4,P5,P6,P7和P8图1中示出。

摩尔邻里(也称为8邻居间接邻居 )是文献中经常提到的重要概念。


现在,我们准备熟悉摩尔周围环境背后的观念。

让有一个数字模式,即 一组黑色像素,在白色像素的背景上,即 在网格上; 找到黑色像素并将其声明为“ 初始 ”像素。 (有几种方法可以找到“ 初始 ”像素,但像以前一样,我们将从左下角开始并按顺序扫描所有像素列,直到找到第一个黑色像素为止,我们将其声明为“ 初始 ”。)

再次假设您是站在起始像素上的瓢虫,如下图2所示。 不失一般性,我们将通过顺时针旋转图案来检测轮廓。 (无论我们选择哪个方向,最主要的是在算法中不断使用它)。

总体思路是这样的:每次我们到达黑色像素P时 ,我们都会返回,也就是回到我们之前站立的白色像素。 然后, 我们顺时针旋转像素P ,访问摩尔附近的每个像素,直到到达黑色像素。 当起始像素第二次到达起始像素时,算法终止。

算法访问的那些黑色像素将成为图案的轮廓。


演算法


以下是对摩尔邻域跟踪算法的正式描述:

输入:包含黑色单元的相连分量P的方形镶嵌 T。

输出:边界像素的B(b 1 ,b 2 ,...,b k ,即 轮廓。

M(a)表示像素a的摩尔邻域。

p为当前边框像素。

c为正在考虑的当前像素,即 cM(p)中

开始

  • B定义为空集。
  • 从下到上,从左到右,扫描单元T,直到从P找到一个黑色像素s为止
  • s插入B。
  • 我们将点s设置为当前边界点p ,即
  • 让我们回去,即 让我们继续到s的像素。
  • c为 M(p)中 下一个顺时针像素。
  • c不等于s时 ,执行

    • 如果c是黑色
      • c插入B
      • 我们设置p = c
      • 返回(将当前像素c移到我们从中到达p的像素)

      否则
      • 将当前像素c移动到M中的下一个顺时针像素(p)

      再见周期结束

结束

示范


以下是有关Moore邻域迹线如何执行模式轮廓检测的动画演示。 (我们决定顺时针跟踪轮廓。)


分析方法


追踪Moore周围环境的主要缺点在于选择停止标准。

在用于跟踪摩尔环境的算法的原始描述中,停止标准是第二次击中初始像素。 类似于平方跟踪算法,事实证明,使用此准则跟踪Moore的周围环境无法检测到大量图案的轮廓。

以下是一个动画演示,解释了为什么算法由于选择了错误的停止标准而无法找到模式的准确轮廓:


如您所见,改善停止条件可以成为改善跟踪整体性能的良好开端。 有两种有效的关闭准则替代方案,类似于Jacob的关闭准则。

使用Jacob准则显着提高了追踪Moore周围环境的效率,使其成为确定任何图案轮廓的最佳算法,而不论其连通性如何。

其原因主要是因为该算法检查边界像素的整个Moore邻域以搜索下一个边界像素。 不同于仅向左和向右旋转并“对角地”丢失像素的正方形轨迹算法,摩尔的邻域轨迹将始终能够检测任何连接的组件的外边界。 原因是:对于任何8个连接 (或简单连接 )的图案, 下一个边框像素位于当前边框像素的Moore邻域内。 由于Moore的邻域跟踪会检查当前边界像素的Moore邻域中的每个像素,因此它必须检测下一个边界像素。

当Moore邻域的跟踪以与第一次相同的方式第二次到达初始像素时,这意味着已检测到图案的完整 外部轮廓 ,并且如果算法没有停止,它将再次检测到相同的轮廓。

径向扫描


径向扫描算法是一些书中讨论的轮廓检测算法。 尽管名称复杂,但基本思想很简单。 实际上,事实证明径向扫描算法摩尔环境轨迹相同 。 有人可能会问:“我们为什么要提他呢?”

跟踪Moore的周围环境,然后在Moore附近以某个方向(我们选择顺时针方向)搜索当前边界像素,直到找到黑色像素为止。 然后,她将该像素声明为当前边界像素并继续。

径向扫描算法执行相同的操作。 另一方面,它提供了一种有趣的方式来找到给定边界像素的Moore邻域中的下一个黑色像素。

该方法基于以下思想:

每次找到新的边界像素时,将其设为当前像素P ,并绘制一条P先前的边界像素连接起来的假想线段 。 然后,我们相对于P顺时针旋转线段,直到它遇到像素P的Moore邻域中的黑色像素 线的旋转与检查Moore P附近的每个像素相同

我们创建了一个动画演示,演示了径向扫描算法的工作原理以及如何追踪Moore的周围环境。


径向扫描算法何时停止?

让我们使用以下停止条件来解释算法的行为...

停止条件1


让径向扫描算法第二次访问初始像素时完成。

下面是一个动画演示,从中可以清楚地了解到为什么会正确更改中断标准。


还值得一提的是,当在两种算法中都使用此停止准则时,径向扫描算法的有效性与跟踪摩尔定律是相同的。

在平方跟踪算法和摩尔邻域跟踪中,我们发现使用雅各布停止准则可以显着提高两种算法的性能。

Jacob的停止条件要求算法在第二次以与第一次相同的方向访问起始像素时停止执行

不幸的是,我们不能在径向扫描算法中使用雅各布停止准则。原因是径向扫描算法没有定义概念撞击边界像素的“方向”换句话说,尚不清楚算法落入边界像素的“方向”(其定义是不平凡的)。

因此,我们需要提出另一种停止准则,该准则不依赖于击中特定像素的方向,这可以提高径向扫描算法的有效性。

停止条件2


假设算法每次检测到新的边界像素P i时,都会将其插入一系列边界像素P 1,P 2,P 3,...,P i;并声明为当前边框像素。 (P 1我们将考虑初始像素)。这意味着我们知道每个当前边界像素P i的先前边界像素P i-1。 (关于起始像素,我们假设P 0是一个虚构像素,与面对边界像素行中初始像素的网格上的任何像素都不等效

基于以上假设,我们可以如下确定停止标准:

以下情况下,算法停止执行:

a)当前边界像素P i先前满足作为一系列边界像素中的像素P j(其中j <i),并且

b)P i- 1 = P j-1

换句话说,算法在第二次访问边界像素P时完成执行再次,如果该边界像素P(在一系列边界象素)在所述第二时间是相同的,其是P,当P是由被访问的像素的第一时间。

如果满足停止条件的条件并且算法没有关闭,则径向扫描算法将第二次继续检测相同的边界。

使用此停止准则的径向扫描算法的性能类似于使用Jacob停止准则跟踪Moore邻域的性能。

Theo Pavlidis算法


主意


该算法是Theo Pavlidis提出的最新的环路检测算法之一。他在1982年的《图形和图像处理算法》(第7章,第5节)中对此进行了引用。它不像跟踪正方形或跟踪摩尔的算法那样简单,但是却没有那么复杂(这对于大多数边缘检测算法而言都是典型的)。

我们将不会以他的书中介绍的方法来解释该算法。我们的方法更容易理解,并给出了算法基础的总体思路。

在不失一般性的前提下,我们决定顺时针旋转循环以匹配本文介绍的所有其他算法的顺序。另一方面,Pavlidis选择逆时针方向。这不会影响算法的性能。唯一的区别是绕轮廓时我们将进行的相对运动方向。

现在让我们继续这个想法...

假设我们有一个数字模式,即在白色像素背景上的一组黑色像素,即在网格上;找到黑色像素并将其声明为“ 初始 ”像素。您可以按照多种方式搜索“ 开始 ”像素,例如,如上所述。

寻找首字母使用此方法的像素是可选的。取而代之的是,我们选择的初始像素满足规定的初始像素算法Pavlidis的选择以下限制:

在我们进入初始像素输入方向的一个重要的限制是

实际上可以选择在任何黑色边框像素最初在这种情况下:如果您最初站在它上面,左相邻像素不是黑色。换句话说,您需要以左相邻像素为白色的方向输入起始像素(此处的“左”是相对于我们输入起始像素的方向)。

现在想象你是一只站在上面的瓢虫起始像素,如下图1所示。在执行算法期间,我们只会对您面前的三个像素感兴趣,即图1所示的P1,P2P3。 (我们将P2指定为前面像素P1P2左侧的像素P3P2右侧的像素)。


与正方形轨迹算法一样,Pavlidis算法中最重要的是“方向感”。向左和向右转是相对于当前位置的,这取决于您输入当前像素的方式。因此,为了做出正确的动作,跟踪当前方向很重要。但是,无论您位于何处,都如上所述确定像素P1,P2和P3。

有了这些信息,我们就可以解释算法了。

每次您站在当前边界像素(首先是初始像素)上时,我们都会执行以下操作:

首先,检查像素P1。如果P1为黑色,则声明P1当前边界像素并向前移动一步,然后向左移动一步以到达P1(移动顺序非常重要)。

图2下面说明了此情况。到达P1的路径以蓝色显示。


并且仅当P1为白色时,我们才继续检查P2 ...

如果P2为黑色,则将P2声明当前边界像素,并向前移动一步P2上这种情况在下面的图3中显示。P2上需要遵循的路径以蓝色显示。


仅当P1和P2均为白色时,再检查P3 ...

如果P3为黑色,则将P3声明当前边框像素,并向右移动一级,然后向左移动一级,如下图4所示。


仅此而已!三个简单案例的三个简单规则。正如您所看到的,转弯时保持跟踪方向很重要,因为所有移动都是相对于当前方向进行的。但是似乎我们忘记了什么?如果我们面前的所有三个像素都是白色怎么办?然后,我们顺时针旋转(位于当前边界像素处)90度,以看到我们前面的一组新的三个像素。然后,对这些新像素进行相同的检查。您可能仍然有一个问题:如果所有三个像素都是白色怎么办?然后,我们再次沿顺时针方向旋转90度,站在同一像素上。在检查Moore像素的整个邻域之前,您可以旋转3次(每次顺时针旋转90度)。

如果我们旋转了3次却没有找到黑色像素,则意味着我们正站在一个未连接到任何其他黑色像素孤立像素上。这就是为什么该算法允许您旋转三遍,然后完成其执行的原因。

另一方面:算法何时完成执行?

该算法在两种情况下终止:

a)如上所述。该算法允许您旋转3次(每次顺时针旋转90度),完成执行并声明像素隔离后;或

b)当前边界像素为初始像素时,该算法通过“声明”检测到图案轮廓来完成执行。

演算法


以下是对Pavlidis算法的正式描述:

输入:包含黑色单元连接成分P的方形镶嵌 T。输出:边界像素的B(b 1,b 2,...,b k,即 轮廓。定义:





  • p表示当前边界像素,即 我们站立的像素。
  • 如下定义P1,P2P3:(另请参见上面的图1)
  • P2是您前方的像素,与您所站立的像素相邻,即 像素为p
  • P1 — , P2 .
  • P3 — , P2 .
  • «» .

开始

  • B .
  • T , s P (. , )
  • s B .
  • p s .
  • :
    P1
    • P1 B
    • p=P1
    • ,

    P2
    • P2 B
    • p=P2
    • (. 3)

    P3
    • P3 B
    • p=P3
    • , (. 4)

    90 , p
    • 终止程序并声明p为 孤立像素

    否则
    • 顺时针旋转90度,站在当前像素p

    到目前为止,p = s(结束重复循环)

结束

示范


以下是有关Pavlidis算法如何检测给定图案轮廓的动画演示。不要忘记我们以像素为单位行走;注意在向左或向右旋转时方向如何变化。为了尽可能详细地解释该算法,我们在其中包括了所有可能的情况。


分析方法


如果您认为Pavlidis算法是检测图案轮廓的理想选择,那么您应该改变主意……

此算法实际上比跟踪Moore的环境要复杂一些,在Moore中,没有特殊情况需要单独处理,但是他无法确定较大轮廓的轮廓。具有某种连通性的一系列模式。

该算法在4连接模式下效果很好。跟踪一些不是4连接的8连接的模式时,会发生其问题。下面是一个动画演示,演示了Pavlidis算法如何无法检测到8个连接模式(不是4个连接模式)的正确轮廓-它跳过了大部分边框。


有两种简单的方法可以修改算法以显着提高其性能。

a)替换停止条件

您可以在算法第三次甚至第四次访问起始像素时结束算法,而不是在算法第二次访问起始像素时完成算法。这将提高算法的整体性能。



b)找到问题的根源,即在选择起始像素之前,

存在对起始像素进行输入的方向的重要限制。本质上,您需要输入起始像素,以便当您站在其上时,左侧的像素为白色。之所以引入这个限制是因为我们总是考虑三个像素我们以某种顺序,在某些模式中,我们将跳过直接位于初始像素左侧的边界像素。

我们冒着风险,不仅会丢失初始像素中的左相邻像素,还会丢失其正下方像素(如分析所示)。此外,在一些模式将被跳过对应像素的像素[R图5的下方。因此,我们假设需要以以下图5所示的像素L,WR对应的像素为白色的方向命中起始像素


在这种情况下,可以正确检测到演示中所示的模式,并且Pavlidis算法的有效性将大大提高。另一方面,找到满足这些要求的初始像素可能具有挑战性,并且在许多情况下将不可能找到这样的像素。在这种情况下,您应该使用另一种方法来改进Pavlidis算法,即第三次访问起点后算法的完成。

Source: https://habr.com/ru/post/zh-CN467611/


All Articles