《电子技术应用》
您所在的位置:首页 > 其他 > 设计应用 > 一种规则几何图形的计算机识别方法
一种规则几何图形的计算机识别方法
来源:微型机与应用2011年第9期
孙来军,李江游,候 影,叶光忠
(黑龙江大学 黑龙江省电子工程高校重点实验室,黑龙江 哈尔滨 150080)
摘要: 许多领域在进行图片处理时都需要识别出图片中的几何图形,传统的霍夫变换、不变矩等识别方法都存在着耗费大量系统内存、计算速度慢等缺点。基于此,提出一种新的几何图形的识别方法。介绍了该方法的实现原理和实现过程。最后利用C++Builder编写软件对这种方法进行了测试,证明了该方法的正确性和可靠性。
Abstract:
Key words :

摘  要: 许多领域在进行图片处理时都需要识别出图片中的几何图形,传统的霍夫变换、不变矩等识别方法都存在着耗费大量系统内存、计算速度慢等缺点。基于此,提出一种新的几何图形的识别方法。介绍了该方法的实现原理和实现过程。最后利用C++Builder编写软件对这种方法进行了测试,证明了该方法的正确性和可靠性。
关键词: 几何图形;识别;像素

 在计算机视觉领域中,如何从当前的图像中提取出所需要的特征信息是图像识别的关键所在。在许多应用场合中需要快速准确地识别出图像中的几何图形(如圆、矩形、三角形等),从而进行更深一步的操作。例如:在基于图像处理的自动报靶系统中,对靶环的识别就属于这一类应用[1]。在这些应用领域,许多学者提出了多种方法,如霍夫变换、不变矩、骨架构造识别等。这些传统的识别方法虽然检测的准确性很高而且算法成熟,但在进行几何图形识别时都存在需要耗费大量系统内存、计算速度较慢等缺点,并不适合要求对几何图形进行快速检测的领域[2-3]。因此,本文提出了一种全新的基于几何图形(周长、面积以及顶点个数)的图形识别方法。经过测试,该方法可以快速有效地检测出一幅图片中的几何图形并给出该图形的周长、面积等参数。
1 图形识别的基本原理
 一般情况下,从客观景物得到的图像是二维的,可以用一个二维数组f(x,y)来表示。x、y表示二维空间中一个坐标点的位置,而f(x,y)则是代表图像在点(x,y)的某种性质的数值。为了能用计算机对图像进行加工,需要把连续的图像在坐标空间(x,y)和性质空间F都离散化,这种离散化的图像是数字图像,可以用I(x,c)来表示。I(x,c)代表离散后的f(x,y)。为了方便,本方法仍用f(x,y)代表数字图像,图像中每个基本单元称为图像元素(简称像素)。一幅图像必须在空间和灰度上都离散化才能被计算机处理。空间坐标的离散化称为空间采样。假设用一个m×n维的数组中等距地采样来近似表示一幅连续图像f(x,y),即[4]:

 式中,每个元素都是一个离散变量,其右边的矩阵代表数字图像,数组的每个元素即对应像素。由此可见,对图片的处理实际上是对组成图片的像素进行操作。在实际的检测中,一般是根据几何图形所在区域的像素点的灰度级别与图片背景的像素点的灰度级别存在的差异,将属于几何图形的像素点检测出来。对于规则几何图形的识别,本文所提出的算法是根据几何图形的周长、面积以及顶点个数来判断。下面介绍圆形、矩形(其他普通四边形也适用)、三角形的识别原理。

 由灰度比值可知,该比值只有一个确定的下限,而无确定的上限,因此,不能利用周长的平方与面积的比对矩形进行识别。但矩形也有其特殊的地方,即它有4个顶点,而且只有4个顶点。只要对所检测的图形的边界点进行判断并计算顶点的个数,如果个数等于4,则为矩形(或其他四边形);否则就为其他几何图形。与圆形的识别相类似,在对矩形的实际检测过程中也可能会出现顶点个数不为4的现象,这是由于图形绘制不规范所造成的。但只要对已经检测出来的顶点再进行一次“同邻域”判断,看其中是否有些顶点属于同一个邻域范围(一般为8邻域),如果有,只留下一个而将其他的去除,这样就可以对结果进行很好的修正,从而可避免错误检测的出现。利用这种方法就可以很好地识别出所检测的图形为矩形。
    (3)三角形:三角形的识别与矩形的识别方法相类似,也是利用顶点的个数来判断图形所属的几何形状,这里不再赘述。
2 图形识别的实现过程
 利用计算机进行图形识别的过程如图1所示。

 

 

2.1 预处理
 从图1可以看出,对一幅图片进行操作之前需进行必要的预处理,这是因为图片在绘制过程中或输入到计算机的过程中可能引入噪声。通常的预处理过程包括灰度化处理、二值化处理、平滑、滤波等。其步骤如下:
 (1)灰度化:图片实际上是一个像素的二维数组,其中每个像素的颜色由构成这种颜色的红(R)、绿(G)、蓝(B)三种基本色的分量来表示。以真彩图片为例,典型情况下,颜色的每个组分都用一个字节来表示,因此为每种颜色组分提供了256个级别。这种方法为每个像素使用3 B,允许达到256×256×256=16 777 216或1 600万种RGB值(颜色)。由于彩色信息的区分度不高,如果直接对彩色图片的像素进行操作,所得到的检测结果精度也不高。而将图片进行灰度处理后,图片以亮度信息为主要信息,彩色信息为次要信息,则可以在很大程度上提高检测精度,因此需将图片进行灰度处理,把彩色图片转换成为灰度图。灰度图形处理采用的方法有:最大值转换法、平均值转换法、黄金权重转换法等,本文在进行灰度处理时采用的是最大值(亮度)转换法。经过这种方法处理后的图片每一个像素的RGB值都是相同的,即RGB值的范围从(0,0,0)、(1,1,1)一直到(255,255,255)。其中,(0,0,0)是全黑色,(255,255,255)是全白色,中间的是灰色[5]。实现这个过程的部分源代码为:
//利用GetxValue取出每一个点的像素的RGB值
     r=GetRValue(color1);
     g=GetGValue(color1);
     b=GetBValue(color1);
//找出RGB值中最大的值
     np=r>g?r:g;
     np=np>b?np:b;
//将图片变为亮度最高的灰度图
Image1->Picture->Bitmap->Canvas->Pixels[i][j]=
TColor(RGB(np,np,np));
 (2)二值化:虽然经过灰度处理后图片的主要信息仅为亮度信息,但有效检测区域的像素点的灰度级别并不统一。因此,灰度处理后往往还需要对图片再进行二值化处理,以使所要检测的几何图形的区域变为较深的颜色,背景的部分变为较浅的颜色。这样可以更进一步加强区分度,提高检测的精度[6]。本文所使用的二值化方法为大律法,大律法又称最大类间方差法,其处理原理为:取某个灰度值,以它为分界点将图像分为灰度值大小的两类,分别计算这两类中的像素点数及灰度平均值;然后,计算它们的类间方差;最后取所有灰度的类间方差中的最大值对应的灰度为阈值。类间方差的计算公式如下:
 w(i)=n1(i)n2(i)(v1(i)-v2(i))2
 其中,n1(i)、n2(i)分别为灰度小于i的像素以及大于等于i的像素的个数,v1(i)、v2(i)分别为灰度的平均值。
实现这个过程的部分源代码为:
        //二值化处理
  for(i=0;i<w;i++)
  {  for(j=0;j<h;j++)
        {
color=Image1->Picture->Bitmap->Canvas->
                           Pixels[i][j];
ave=Dalu(gray);
if(GetRValue(color)>ave)
         //将背景点变为白色
    Image1->Picture->Bitmap->Canvas->Pixels[i][j]=
TColor(RGB(255,255,255));
Else
        //将几何图形区域变为黑色
   Image1->Picture->Bitmap->Canvas->Pixels[i][j]=
TColor(RGB(0,0,0));
        }
  }
 (3)平滑和滤波。在进行完步骤(1)、(2)的预处理后,如果几何图形还是不十分明显,可以用高斯平滑滤波器和拉普拉斯锐化滤波器结合计算即可得到几何图形突出的图片[7]。
2.2 特征提取
 完成图片的预处理后,即可进行图片的特征提取。由于是规则的几何图形,因此所要提取的特征信息即为几何图形的周长、面积和顶点的个数。计算图形周长和顶点个数时用的是Laplace边缘检测算法。Laplace算法有两类:正相Laplace算法和反相Laplace算法,两者都反映了一类边缘,但其所用模板和参数不同[8]。假设一个3×3邻域内的像素分布如图2所示,设LP、LN分别为正相Laplace算法和反相Laplace算法的处理结果,其计算公式如下:
 LP=[f(A0)+f(A1)+…+f(A7)]-8f(C)
 LN=8f(C)-[f(A0)+f(A1)+…+f(A7)]
 这两个公式也可用卷积模板来表示,如图3(b)、(c)所示。由图可知,边缘检测模板中各因子之和为0,其物理意义是:在图像的均匀区域处理输出为0,在像素数据有突变的地方则输出较大的值。以此来检测图像中的边缘。

 用Laplace边缘检测算法对几何图形进行检测完成后,累加边界点的个数即为几何图形的周长。然后再对这些边界点进行进一步区分,找出顶点。检测几何图形的面积则要简单得多,只要统计出有效检测区域内所有符合条件的点即为几何图形的面积。实现这个过程的部分源代码为:
//计算周长、面积和顶点
  int x,y,sum=0;
  for(i=0;i<w;i++)
  {  for(j=0;j<h;j++)
       {
color=Image1->Picture->Bitmap->Canvas->
                         Pixels[i][j];
 if(GetRValue(color)==0)
  { mianji++; //计算面积
    if(Laplace(GetRValue(color)))
      zhouchang++; //计算周长
    if(Dingdian(GetRValue(color)))
      dingdian++; //计算顶点
   }
       }
  }
2.3 分析判断
 在完成图像的预处理和特征提取之后,便可以开始根据特征信息对几何图形的形状进行判断。在这个过程中首先判断几何图形是否为圆形,即判断这个图形周长的平方与面积的比是否在规定的范围内。如果在,则为圆形;否则,再判断顶点的个数,等于3即为三角形,等于4即为矩形。在识别几何图形形状的同时还可输出这个图形的周长和面积。因为规则几何图形的周长、面积和顶点坐标已知,故可计算出边长、形心等参数。实现这个过程的部分源代码为:
//根据周长的平方与面积的比以及顶点的个数确定图形的形状
   float  ratio;
ratio=(zhouchang*1.0*zhouchang*1.0)/mianji*1.0;
//判断是否为圆形
if(ratio>=9&&ratio<=15)
   Edit1->Text="圆形或椭圆";
else
   {
//判断是否为三角形
         if(dingdian==3)
     Edit1->Text="三角形";
//判断是否为矩形
     if(dingdian==4)
     Edit1->Text="矩形";
   }
//输出面积和周长
   Edit2->Text=mianji;
   Edit3->Text=zhouchang;
    基于上述的基本原理和实现过程,利用C++ Builder6.0编写软件,几何图形识别结果如图4所示[9]。从识别结果可知,本文所述的方法可以快速而准确地识别出图像中的规则几何图形,从而证明了该法的可行性和正确性。

 与传统的检测方法相比,本文提出的基于几何图形周长、面积和顶点个数的检测方法可以很好地识别出几何图形的形状,并能给出边长、形心等其他参数,且识别速度快、准确率高。但这种识别方法也存在一些不足,它的识别对象只是几种简单的规则几何图形,无法识别复杂的不规则几何图形。这些不足还有待于在日后的研究中不断克服,以使这种检测方法能够更加稳定实用。
参考文献
[1] 顾筠.基于霍夫变换和几何特性的图像识别方法[J].自动化博览,2002,8(1):86-88.
[2] 邱桑敏.一种快速霍夫变换算法[J].计算机工程,2004,1(2):148-150.
[3] 李海军,宁玉富.规则几何图形的识别分析与算法实现[J].常熟理工学院学报,2007,4(4):111-115.
[4] 董莉,王玲,江沸波.一种基于医学图像中感兴趣区域的数字水印算法[J].电子技术应用,2007,33(1):136-139.
[5] 高士忠,卢易枫,蔡振伟,等.基于灰度共生矩阵的帘子布疵点检测研究[J].电子技术应用,2008,34(1):117-119.
[6] 刘玉红,熊兴良.图像的带参二值化理论和技术及其应用[J].计算机应用研究,2008,25(1):277-280.
[7] 鲁志波,王鑫,胡国恩.结合结构张量和Wiener滤波的图像去噪算法[J].计算机科学,2007,34(7):229-231.
[8] 刘佳,肖晓明,彭骏驰.基于改进的Laplacian算子的图像边缘检测[J].电子技术应用,2006,32(11):31-32.
[9] 蒙祖强,龚涛.C++ Builder程序员成长攻略[M].北京:中国水利水电出版社,2007.

此内容为AET网站原创,未经授权禁止转载。