连通域算法的原理及C++程序实现

利用连通区域算法计算图像中的各个轮廓,一般可以分4领域和8领域,如图所示。有两种经典的连通区域分析算法:Two-Pass(两次遍历)和Seed Filling(种子填充)。下面以四连通区域为例,分别介绍两种分析方法的原理。
连通域算法的原理及C++程序实现_第1张图片

1. Two-Pass算法

Two-Pass算法,顾名思义需要两次遍历图像,第一次遍历给图像所有的像素设置一个标记,并记录各个标记属于哪个连通域,第二次遍历将每个像素标记为所属的连通域。

具体流程如下:

  1. 图像二值化。
  2. 第一次按行扫描图像时,图像中的每个像素值从上到下,从左到右扫描,给每一个有效的像素值一个标签label,规则如下:
    (1)如果该像素的4邻域中左边像素值和上边像素值都为0且都没有标签,则给该像素一个新的标签label;
    (2)如果该像素的4邻域中左边像素值或上边像素值有一个为1,则该像素的标签是像素值为1的标签;
    (3)如果该像素的4邻域中左边像素值和上边像素值都为1,且标签相同,则该像素的标签就是此标签;
    (4)如果该像素的4邻域中左边像素值和上边像素值都为1,且标签不同,则把其中较小的标签作为该像素的标签。这样标记完后,会出现一个连通域里有好几个不同标签,将该像素的左边像素的标签和该像素的上边像素的标签记为相等关系。<

你可能感兴趣的:(C++与Python,算法,c++,计算机视觉)