软件学报
JOURNAL OF SOFTWARE
1999年 第2期 No.2 1999



一种基于模式的圆的识别算法*
李伟青　彭群生
　　摘要　在工程图纸计算机输入识别和理解系统中,圆和圆弧的识别转换是一个尚未彻底解决的难题.文章介绍了整体识别方法的主要概念和图段数据结构,在此基础上提出了圆的识别算法.算法首先将图段与圆的两类模式进行匹配,从而确定圆的种子图段;然后,通过对其他图段实施跟踪,最终获得圆和圆弧的图形表示.最后给出了实例,结果表明,该识别算法较好地解决了图纸识别中的一个关键问题,具有适应性强、高效可靠的特点.
　　关键词　整体识别,矢量化,细化.
　　中图法分类号　TP391
A Pattern Based Circular Arc Recognition Algorithm 
LI Wei-qing PENG Qun-sheng 
　　Abstract　 Circular arc recognition is a difficult problem that is not entirely solved in engineering drawing recognition and understanding research field. In this paper, some concepts of global recognition method and patch structure are introduced, and a circular arc recognition algorithm is provided. The algorithm matches several patches with two patterns to decide the seeds, and then by tracing the other patches, it converts these patches into circular arcs. Examples are given, which show that the algorithm has effectively solved a key problem of recognizing drawings are given.
　　Key words　Global recognition, vectorization, thinning.
　　在工程图纸矢量转换的众多问题中,圆的识别是目前尚未解决的关键问题之一.细化方法［1,2］用模板与像素进行匹配,找出中心骨架像素,并用短折线拟合.该方法简单易行,但图像中的缺陷对最终结果的影响较大.轮廓匹配方法［3,4］通过跟踪轮廓像素和匹配轮廓矢量,得到图线的中间骨架矢量.该方法有效地避免了缺陷的不利影响,但匹配过程复杂,正确性难以保证.两种方法直接在像素层次上操作,并用一系列直线段去逼近圆和圆弧,因而难以获得圆的图形表达形式.
　　整体识别方法［5］力求从整体上把握图纸中各种线型及其关系.它将图像组织成图段数据结构,据此求取线型的参数并进行跟踪,最终提取各类线型.该方法不拘泥于图像的局部像素细节,因此,图像中的缺陷对最终结果的影响较小;在图像编码过程中,线型之间的拓扑关系已能在图段数据结构中得到体现,在矢量转换过程中,拓扑结构始终得到保证,因而有利于对图纸进行图形重建.
　　文献［6］对直线段的识别提供了较好的算法,但是对圆的识别问题却未作深入的研究.文献［7］利用整体识别方法识别圆和圆弧时,先将图段转换成直线段,在直线段数目超过3时,才可确定圆的几何参数.这就使得原有的图像信息在圆的转换过程中没能充分得到利用.该方法对于图纸中半径较小的圆则无能为力.
　　本文提出的圆的识别算法,将图段与圆的两类模式进行匹配来确定种子图段,通过对其他图段实施跟踪,从而获得圆和圆弧的图形表示.下面,首先介绍有关概念和图段结构,然后给出图段的分割方法,并提出圆的两类模式和基于模式的圆的识别算法,最后对算法进行讨论,并给出了实验结果.
1 整体识别方法的概念和数据结构
1.1 扫描段
　　在同一条扫描线上,由多个连续的黑像素组成的像素的集合称为扫描段.用sij或（xij0,xij1）表示第i行扫描线上的第j条扫描段.
1.2 重叠关系
　　对于扫描段sij和si+1k,如果满足:xij0≤xi+1k0≤xij1或xi+1k0≤xij0≤xi+1k1,则称它们具有重叠关系.如果sij和si+1k具有重叠关系,sij和第i+l行扫描线上的其他扫描段都没有重叠关系,同时,si+1k和第i行扫描线上的其他扫描段也都没有重叠关系,那么,称sij和si+1k为一对一重叠.
1.3 图 段
　　具有一对一重叠关系的所有扫描段组成的集合称为一个图段.图1表示了3个不同的图段.
 
图1　3个不同的图段 
1.4 父子关系
　　如果图段p的最后一条扫描段与图段q的第1条扫描段有重叠关系,那么,称图段p和图段q为父子关系.图1中,图段p与图段q、图段p与图段r都属于父子关系.
1.5 兄弟关系
　　如果图段q的第1条（或最后1条）扫描段与图段r的第1条（或最后1条）扫描段处于同一条扫描线上,且它们都与图段p构成父子关系,那么,称图段q和图段r为兄弟关系（如图1所示）.
　　扫描段数据结构为:
　　typedef struct {
　　　　int x_start,x_end; // 扫描段两个端点的x坐标值
　　} SCANSEG;
　　图段数据结构为:
　　typedef struct {
　　　　int y_start,y_end; // 图段中第1条和最后一条扫描段的y坐标值
　　　　int top,bottom;// 连接与图段存在父子、兄弟关系的其他图段
　　　　SCANSEG *seg;// 指向图段所包含的扫描段数组的指针
　　} PATCH; 
2 圆的识别算法
2.1 图段分割
　　如果图段经过采样求得参数后,能完全确定其属性,那么,该图段为简单图段;如果图段既不属于直线段,也不属于圆,那么,该图段为复杂图段.
　　对复杂图段必须进行分割,从中分离出各个简单图段.复杂图段通常有3类:直线与直线相接、圆与圆相接以及直线与圆相接.投影分割算法［5］能较好地处理直线与直线相接的复杂图段,此处着重解决后两类情况.
　　理想状态下,直线图段每一点处的二阶差分为零,而圆图段的每一点处的二阶差分均不相同,由此可以计算出复杂图段中各点处的二阶差分,并对二阶差分进行累加.直线的二阶差分累加和可用水平线来拟合,圆的二阶差分累加和可用斜率非零的直线来拟合.图2表示了圆弧段与圆弧段、圆弧段与直线段相联结的二阶差分累加和曲线,点p为两线型的连接点.
 
图2　二阶差分和曲线
2.2 圆的两个模式
　　图段数据结构以扫描段形式保存原始图像数据,如果扫描段sij的长度xij1-xij0+1大于一个给定的阈值,可以断定该扫描段属于一条水平线.因此,在矢量转换过程的开始,可以首先处理水平线,然后再转换圆.
　　根据制图规则,在绘制圆或圆弧时,通常应将它们的对称中心线一并画出,对称中心线通常由一条水平线和一条竖直线构成.如果水平线能被正确识别,可由此入手,寻找圆的种子图段.另一方面,半径较大的圆的顶部或底部的图段也会因为存在较长的扫描段而被识别成水平线,这也可成为寻找种子图段的入口.
　　针对上述情形,我们引入了圆的两个模式,分别如图3、4所示,其中h为水平线,阴影区域为图段.显然,它们都可能会有一些变化形式.
2.3 种子图段的确定
　　对于模式1,求初始几何参数时的3点取法为:第1点取自图段1的1/3处,第2点取自水平线h,第3点取自图段2的2/3处,3点分别如图3中的p,q和r所示.
 
图3　模式1
　　对于模式2,求初始几何参数时的3点取法为:第1点取自图段2的2/3处,第2点取自水平线h,第3点取自图段4的2/3处,3点分别如图4中的p,q和r所示.

图4　模式2
　　由水平线出发,寻找符合上述模式的图段,选取3个点求得初始参数后,应对这些图段的合法性作进一步检查,即检查模式1中的图段1、2和模式2中的图段2、4,以决定它们是否确实能共圆.如果图段是一个合法的圆弧图段,则可将它们作为种子图段.
2.4 图段跟踪
　　从一个种子图段出发,根据图段之间的相互关系,按一定的规则往前跟踪,找出下一个属于同一圆的图段,这就是图段的跟踪过程.刚开始跟踪时的初始图段被分别标识为起始图段和终止图段,每跟踪出一个图段,便把新的图段作为起始图段.每次跟踪时,记录下一个图段所处的位置（是左半圆还是右半圆）、跟踪方向（向上或向下跟踪）、走势（顺时针或逆时针）.
　　在图段的跟踪方向上可能会有多个图段与之相连接,此时,需要考虑下列3种情况:
　　(1)　如果某一图段p的每一条扫描段（在允许的误差范围内）均被已求得的圆穿过,表明p正是要找的图段.如果图段p的扫描段数超过一个给定的阈值,那么,必须重新调整圆的几何参数.
　　(2)　如果不存在上述类型的图段,那么,需要判断一下当前被跟踪的图段p是否为圆的顶部（或底部）图段,若是,则从该图段出发,改变下一图段所处位置（左半圆改为右半圆,反之亦
然）、跟踪方向（向上跟踪改为向下跟踪,反之亦然）,同时,将图段p标记为起始图段.
　　(3)　如果排除了上述两种情形,那么应考虑是否满足下列任何一条终止条件,以决定是否要继续跟踪:① 在跟踪方向上不再有图段;② 在跟踪方向上的图段不属于该圆;③ 在跟踪方向上的图段为终止图段.
　　对于条件③而言,从起始图段向前跟踪,最终找到了终止图段（如模式1中,从图段1出发,按顺时针方向跟踪,最终到达图段2）,表明一个整圆被成功提取.否则,因条件①、②而终止时,必须互换起始图段和终止图段,从新的起始图段（原先的终止图段）及新的图段位置、跟踪方向和走势向前跟踪.
3 讨论和实例
　　基于图段结构的整体识别方法已经在浙江大学CAD&CG国家重点实验室研制的“工程图纸扫描输入、识别系统”中予以实现.图5、图7分别给出了两个实例,它们已经过图像处理和字符的分离过程,图6、图8分别为矢量化结果.由结果可以看出,基于整体识别方法的圆的识别算法具有很强的识别能力,能处理绝大部分的圆,而且,最终识别的结果与原有图纸吻合得比较好.

　　　　　　　　　　　　
　　图5　图纸的图像 　　　　　　　　　　　　　　　图6　矢量转换结果

　　　　　　　　　　　　
　　图7　图纸的图像 　　　　　　　　　　　　　　　图8　矢量转换结果 
　　从图例中能够看出,识别一些短小的圆弧段时仍会遇到一些困难,原因是这些圆弧段所能提供的有效信息过少,以至于难以将它们与小直线段区分开.
　　整体识别方法还有许多值得完善的地方,它最困难之处是短小线型的转换的正确性不高,这还有待于进一步的研究.
作者介绍：李伟青,1965年生,博士,讲师,主要研究领域为工程图纸扫描识别,三维几何造型.
　　　　　彭群生,1947年生,博士,教授，博士生导师,主要研究领域为计算机图形学,产品信息模型,工程图扫描识别等.
本文通讯联系人:彭群生，杭州 310027,浙江大学CAD&CG国家重点实验室
作者单位：李伟青　彭群生　浙江大学CAD&CG国家重点实验室 杭州　310027
参考文献
　［1］Smith R W. Computer processing of line images: a survey. Pattern Recognition, 1987,20(1):7～15
　［2］Shaoxing Z, Nishihara S. Eliminating shape distortions in thinning of engineering drawings. In: Staudhammer J, Peng Qun-sheng eds. Proceedings of CAD/Graphics'91. Hangzhou, 1991. 472～477
　［3］Yang Li-rui, Zhou Ji. Contour shape analysis-directed vectorization of engineering drawings. In: Yang S, Zhou Ji, Li C eds. Proceedings of the CAD/Graphics'95. Wuhan, 1995. 150～154
　［4］Jiang Hua et al. Knowledge based mechanical drawing interpretation. In: Yang S, Zhou Ji, Li C eds. Proceedings of the CAD/Graphics'95. Wuhan, International Academic Publishers, 1995. 868～872
　［5］谭建荣.工程图纸扫描图像的整体识别及图形重建研究［博士学位论文］.浙江大学, 1992(Tan Jian-rong. Research on global recognition and graph reconstruction of scanned image of engineering drawings［Ph.D. Thesis］. Zhejiang University, 1992)
　［6］谭建荣,彭群生.基于图形约束的工程图扫描图像直线整体识别方法.计算机学报,1994,17(8):561～569(Tan Jian-rong, Peng Qun-sheng. A global line recognition approach to scanned image of engineering drawings based on graphics constraint. Chinese Journal of Computers, 1994,17(8):561～569)
　［7］陈勇,朱林,常明.机械图纸中直线圆弧的整体识别方法.计算机辅助设计与图形学学报,1996,8(增刊):225～230(Chen Yong, Zhu Lin, Chang Ming. A global line and arc recognition approach to scanned image of mechanical drawings. Journal of Computer-Aided Design and Computer Graphics, 1996,8(supplement):225～230)
本文1997-10-21收到原稿,1998-03-02收到修改稿 
