二值图像的目标识别技术

摘要:目的是建立一种新的图像识别算法。方法是以Visual C++为开发平台 ,用C++语言实现了二值图像目标识别算法。结果该算法有效地实现了二值图像的目标识别。该算法采用局部搜索算法,减 少了时间消耗,提高了效率,并且能一次得到更多的信息,包括图像中目标的个数,每个目标的面积,形心,内、外环的个数 及每个内、外环的所有信息。

在炮管内表面的检测中,要求对炮管内表面的裂痕、蚀炕、膛线等“目标”进行参数检测和分类,我们采用密扫描的方式采集炮管内表面的数据。这就要求我们首先“目标”从密采数据中“识别”出来,并提取所需要的信息。因为“目标”的深度比粗糙度值大许多。所以,对于这些“目标”的识别来说,密扫描数据可以看作是一幅二值图像。我们的问题就转化为二值图像中的目标识别问题,本算法就是在此课题背景下提出来的。

1 目标识别技术探讨

图像中的目标识别有两个核心的过程:①图像分割,即从一幅图像中分离出一个或多个我们感兴趣的“目标”区域来:②对这些“目标”区域进行特征信息提取。图像分割算法一般有边界检测(差分边界检测、梯度边界检测等)、边缘匹配与拟合等方法。图像分割算法对目标识别极其重要,它甚至决定着目标特征信息提取的成败。传统的图像识别技术都是以像素的归类的方式实现的,虽然在算法上比较容易实现,但大都属于全局搜索的算法,并且对目标的识别大多通过和样本图像的相关运算所得到,对目标的许多特征信息如目标边界的内外环信息,都无能为力。

图1 二值图象探讨

2 二值图像探讨

二值图像是以点阵的方式来进行排列的,因此可以看作一个二维数组。为方便,把二值图像上的一个目标看作为一个闭集。因此,我们把图像的像素点分为以下几类(图1)。

  1. 实点和空点 实点为属于某个目标的点,空点为不属于所有目标的点。
  2. 内点和边界点 像素点在某个目标的内部,称为内点。即它至少有一个邻域包含在某个目标中。(像素点的最小邻域为以此点为中心,以一个像素单位为半径的区域)如果一个像素点不是实点,但它至少有一个邻域,这个邻域减去此点所形成的区域包含在某个目标中,我们把此点填充为实点(它成为内点,误差仅为一个像素)。在某个目标的边界称为边界点(即内点和实点的交集且减去毛刺点和孤立点中的点)。
  3. 毛刺点和孤立点 孤立点和毛刺点都为实点,但孤立点至少存在一个邻域,它减去此点后所形成的区域与目标的交集为空。毛刺点的这样的区域与目标的交集只有一个像素点。

3 数据结构

为了更好地实现算法,必须有一个好的数据结构,它应能够完成本算法的所有功能。每个数据类都有自己的方法,低层的数据类的方法在条件满足的情况下,能够获得自己的所有信息。为高层数据类在高层次(不考虑低层实现)上的编程提供基础。

4 边界搜寻

搜索边界是目标识别中最关键的一步,其目的是把所有的边界点搜索出来并连接成环,其程序流程如下:

  1. 找出一个边界点来,作为环头。对于任一个像素点可以建立一个坐标系,把相邻8个点逆时针顺序进行标记。(这里规定,如果邻点超出图像范围,一律为空点)如图1所示。由以上的定义可以看出,边界点必须为实点,并且其8个邻点至少有一个空点和一个实点,如果一个像素的8个邻点都为实点,则此像素为内点。如果一个像素的8个邻点都为空点,则为孤立点,可根据需要进行处理。(例如,可以去掉孤立点,相当于中值滤波)。搜寻图像,直到找出一个边界点。作为环头,并做记录。
  2. 以环头为起点,进行环的生成:①以环头为环中的第一个边界点,建立(1)所述的坐标系,并且定义邻点0—7,规定邻点I的前点为I-1,后点为I+1,如果I为0,则其前点为7,如果I为7,其后点为0:使其8个邻点形成一个逆时针的环。②搜寻和边界点相邻的下一个边界点。从其邻点0开始,按0—7的顺序依次确定其各邻点的特征:1.空点2.出点3.入点4.实点。规定出点为它的前点为实点,后点为空点的像素点,入点为它的前点为空点,后点为实点的像素点。(0点的前点为7点,7点的后点为0点。)(一般一个边界点所有邻点中只有一个出点和入点。否则,其邻点中必有毛刺点,可以进行特殊处理)。③以边界点搜寻的第一个入点为下一个边界点,并对此点作标记,返回b,直到边界点N的下一个边界点为环头。于是我们生成了一个环。这是一个链表结构,其每个节点(边界点)的位置和节点总数N都可以知道。对环数加1。进行第(3)步。
  3. 寻找下一个没有经过标记且为边界点的像素,返回(1)重新进行环的生成,直到图像中没有既是边界点又没有被标记的点。到此,我们生成了所有的环(边界)。

图2 内外环的特性

5 边界处理

我们首先对环的类型和其面积进行讨论。
到此为至,我们得到了L个环及其环头。下一步应判断环的类型:内环、外环。
首先应提到,按第(2)步中的方法所生成的环,其内环都为顺时针,外环都为逆时针。以下提出两个定理(图2所示)。

  1. 环L的面积S→L S→L=1∮LKm→×dl→(其中K为平面上任意一点)2(1)
    其证明可以用格林公式进行证明(参看郑军所著《表面离散数据的三维体重构及其应用(华北工学院硕士论文)》

  2. 定义qLK为环L对点K的环角,则有 qLK=∮L(Km→× dl→)/|Km→|(2)
    可以证明,当K在环外时,q
    LK为零,当K在外环内时,qLK为2p,当K在内环内时,qLK为-2p。
    对于外环其面积为负,内环为正。所以从其面积的正负可以判断环的类型。

6 环的重组和目标生成

目标在二维平面上是由内环和外环组成的,外环代表了目标的外边界,内环代表目标内部的孔洞,由此可以得出,一个目标只有一个外环(外边界)但可以有多个内环(内边界)。因此,有一个外环就有一个目标,环的重组和目标生成的目的就是将外环和它包含的内环识别出来(形成一个目标的外边界和内边界)。问题归结为处理环与环的关系问题。
首先假设环与环不相交,因为如果相交的两个环总可以通过处理使其生成一个环。
确定环的关系的流程如下:

  1. 在所有的环中选取一个外环(并作标记),判断与其它的内环的关系。在没有标记的内环上选取一点(通常选取其环头)K连接Km(m 为外环上的点),计算(如图2所示)K点和此外环的环角,并根据环角值判断K点是否在外环内。因为假定了环与环没有相交,所以,如果K点在外环内,则K点所在的内环必然位于外环内。对在外环内的内环作标记。(表示其内环已经有归属)(对于离散计算,必须考虑计算容差)。
  2. 取下一个外坏,直到所有的外环都处理完毕。
到此,对外环和内环都处理完毕。我们以每一外环代表一个目标,在外环内的内环代表目标的一个孔洞。我们可以计算每个目标的面积(为外环和内环的面积的代数和再取绝对值)。

7 本算法的特点

本文所提出的算法采用新的方式——几何的方式来实现,并采用局部搜索算法,在一次搜索后获得目标边界的所有特征信息,在此基础上对边界进行按目标意义上的重组,方便快捷地实现目标的特性计算。而且,由于是几何方式的实现,目标的边界很容易转换成为矢量的方式(边界拟合等),更增加了其应用的范围。对每一个目标可得到所处的矩形范围,为后续的处理提供了方便。

作者:西部车床,如若转载,请注明出处:https://www.lathe.cc/2023/11/3735.html