发明内容
本发明提供一种交错线矢量化提取及图形识别方法,该方法能改善矢量化识别的结果,提高矢量化识别的运算速率,并具有适用范围广、矢量化识别精度高、运算速度快等优点,对于工程图纸矢量化系统处理以及三维重建等工作具有重要意义和实用价值。
为实现上述目的,本发明的技术方案是:一种交错线矢量化提取及图形识别方法,包括在通用计算机平台上采用MFC微软的基础类库进行图像预处理和矢量化处理,具体步骤如下:
1.图像预处理:
(1)去除工程图像的噪声点
(2)工程图纸二值化处理
首先将蓝色背景的工程图纸的RGB表示方式转变成为HSI表示方式,然后结合RGB表示方法中的B分量对图像的I分量进行二值化处理,而后,利用B分量二值化结果对I分量的二值化结果进行校正,在获得灰度直方图后进行直方图的软平滑滤波,求取灰度直方图两个峰值点之间的局部最小值点,该局部最小值点作为全局阈值。
2.矢量化处理:
(1)初始中轴点获取
1)对整个图像进行扫描,扫描线进入矢量化区域的点c1{x,y1},扫描线跃出矢量化区域的点为c2{x,y2}像素的位置信息;
2)对c1和c2进行平均,获得中间点p1{x,(y1+y2)/2};
3)以p1点为中心进行上下扫描,得到c1和c2平均值p2{(x1+x2)/2,(y1+y2)/2};
4)判断p1和p2之间的像素距离,即(x1+x2)/2和x之间的差值,如果该差值小于一个像素值,则将p2点作为初始中轴点;否则从p2点开始横向扫描,返回步骤1)继续2)、3)、4)步;
(2)中轴点链扫描获取
从初始中轴pix1点开始,将pix1点保存在中轴点链的中轴点列表中,并将相应的宽度信息加入到链表中,宽度信息是该中轴点纵向方向的碰撞距离;
(3)中轴点链扫描条件判断
在进入点链获取扫描前,先进行三个条件的判断:
4)宽度一致性检验;
5)方向一致性检验;
6)扫描步长限制条件检验;
(4)中轴点多义线处理
得到整张图纸的中轴点链信息后,采用多义线处理的手段对这些信息进行压缩,该过程是对中轴点链的再次扫描;
(5)节点复原
首先放弃当前的中轴点,将前一个中轴点设置为当前中轴点,缓冲计数器自动加1,然后对该中轴点的与中轴点扫描方向一致的最大扫描步长进行设置,使其进行折半处理,重新进行一次中轴点横向和纵向扫描,通过循环过程后,系统会获得整张工程图纸的中轴点链,该中轴点链包括中轴点的链表信息、中轴点的宽度信息以及该中轴点链的方向信息;
(6)轴出中轴点链
上述第二步骤中,峰值点的求取过程和它们之间的局部最小值点的求取过程如下:
1)定义一个灰度直方图类CImageHist,该类中主要包含了一个一维向量m_ImgeHist、对向量进行平滑的滤波函数Filter()、对一维向量进行求取峰值点的函数getMaxVector()以及求取某峰值点之间的局部最小值点的函数getLocalMin();
2)灰度直方图的一维向量m_ImgeHist,其维度为256,对应于像素值的0到255;
3)平滑的滤波函数Filter()中选择不同的滤波方法,使用平滑方法,利用灰度值统计变化最大阈值来平滑直方图,对向量m_ImgeHist从0点开始扫描,以此对变化幅度进行比较,当变化幅度大于某个阈值时,则根据变化方向加减该位置的元素值,否则,保持原数值不变;该函数的输出为一个bool变量,以表示正确执行,方便后续函数的调用;
4)对一维向量进行求取峰值点函数getMaxVector()返回值为一个峰值列表,比较大小,若发现后值比前值小,则认为前值所对应的数值为一个峰值点;
5)对给定峰值点求取局部最小值点getLocalMin(),返回值为一个一维数组,数组中包含两个元素,第一个元素表示该最小值点的数值,第二个点表示该最小值点所对应的灰度值。
上述第四步骤中,对于一条中轴点链,该过程如下:
5)设置第一个中轴点为当前中轴点,第二个中轴点为拓展中轴点,当前中轴点与拓展中轴点进行连线处理;
6)连线处理是在拓展中轴点上以该中轴点的宽度为直径,以该中轴点为圆心作圆,在用当前的中轴点与这个圆做两条切线;
7)从拓展中轴点开始找下一个中轴点,对其作圆,方法与连线处理过程一样,如果这个圆落在这两条切线内,则将该中轴点删除;再找下一个中轴点,重复本次操作;
8)直到有中轴点的圆与切线相切,则将该中轴点作为当前中轴点,该当前中轴点的第二个中轴点设置为扩展中轴点,重复2)、3)步骤直到该条中轴点链扫描完成。
本发明的有益效果是:本发明方法是一种工程CAD图纸的矢量化图形识别方法具有适用范围广、矢量化精度高、运算速度快等优点,对于工程图纸矢量化系统以及三维重建等工作具有重要意义和实用价值。
具体实施方式
以下结合附图和实施例对本发明的技术方案作进一步描述。
如图1所示,本发明的交错线矢量化提取及图形识别方法,包括在通用计算机平台上采用MFC微软的基础类库进行图像预处理和矢量化处理,具体步骤如下:
1.图像预处理:
(1)去除工程图像的噪声点
(2)工程图纸二值化处理
2.矢量化处理:
(1)初始中轴点获取
(2)中轴点链扫描获取
(3)中轴点链扫描条件判断
(4)中轴点多义线处理
(5)节点复原
(6)轴出中轴点链
本实施例中的图像采集装置采用三星KV-S3065CWCN型号的一体机扫描仪,其性能如下:
扫描元件:CIS;
设计类型:文件扫描仪;
扫描范围:227×2540mm;
光学分辨率:600×600;
色彩位数:黑白(二值,半色调模式),灰度(8bit),彩色(24bit);
扫描速度:60ppm/110ipm;
传输接口:Ultra SCSI(SCSI-III)传输速率:20M-byte/sec,
接口器:50细针,USB2.0;
扫描介质:文件;
光源性能:双管白色荧光灯。
本实施例中的计算机平台性能如下:
CPU主频:Celon 2.66G;
内存容量:516M;
运行操作系统为Windows XP;
一个并行打印端口,配置为USB端口。
本发明在通用计算机平台上启动矢量化系统,矢量化系统关联扫描设备启动程序,使其对扫描设备进行扫描,获得图纸的BMP格式文件,各步骤的具体细节描述如下:
1、在通用计算机平台上的矢量化系统采用了MFC的结构设计,在该结构中设计了一个扫描工具、一个矢量化工具以及识别工具:
第一步:对于获得的图像进行二值化和基本的预处理,如采用形态学滤波的方法对图像的噪声点进行去除。
MFC是微软的基础类库,它提供有很方便的构建软件系统架构的能力,其使用的关键之处在于消息和命令的传递机制。本发明的扫描工具、矢量化工具以及识别工具就是使用命令机制构造的。使用需求的定义如下:
扫描工具进程直接调用三星扫描仪的API函数进行,该过程的调用方法和传统的函数调用方法类似,本发明不再予以陈述。矢量化工具启动2步骤的矢量化过程。识别工具启动了一个MFC的对话框,在该对话框中具有不同图形的拓展复选框,可供用户选择,如“直线”、“圆弧”、“椭圆弧”、“点划线”以及“全部图形”等。
对于该系统的具体实现概要如下:
设扫描工具的ID号为ID_SCAN,矢量化工具的ID号为ID_VECTOR,识别工具的ID号为ID_RECO。这些ID号在MFC框架的Resouce.h文件中定义,其定义方法也是非常成熟的技术,这里不再叙述。
为了使ID号与程序的调用子函数对应,这里使用了MFC的消息传递和命令传递机制。在系统的视图类CMyView中,定义了这样的一个映射关系:
ON_COMMAND(ID_VECTOR,OnVectorization)
ON_COMMAND(ID_RECO,OnRecognition)
2、系统的矢量化工具采用了区域增长和矢量化区域包围合以及多条件限制的方法,该方法分为四步进行,其具体过程如下:
由于工程机械图纸是一种蓝色背景的图像,而单纯的矢量化方法需要在二值化图像上进行,本发明的二值化方法采用的是一种自适应的二值化方法,能够有效去除工程图纸的无效背景。具体过程如下:
第一、首先将蓝色背景的工程图纸的RGB表示方式转变成为色彩耦合度很小的HSI表示方式,在这种表示方式中,H分量反映的是色度信息;S分量反映的是饱和度信息;I分量反映的是对比度信息。对比度信息将RGB分量的所有能够反映的对比度特征用一个分量表达出来了,这种方式有利于使用灰度图像处理方法来处理彩色图像,保证了对比度信息的缺失。
第二、结合RGB表示方法中的B分量对图像的I分量进行二值化处理。B分量反映了图像的蓝色分量,工程图纸的蓝色分量反映出其背景信息,所谓二值化其实就是对背景信息的滤除。本发明对B分量和I分量分别进行自适应的二值化处理,而后,利用B分量二值化结果对I分量的二值化结果进行校正。图像的全局阈值使用了灰度直方图低谷点的方法,所谓灰度直方图是对灰度图像像素灰度值的一种统计结果,即统计整张图像在0~255个灰度等级下的分布。在获得了灰度直方图后进行直方图的软平滑滤波,求取灰度直方图两个峰值点之间的局部最小值点,该局部最小值点作为全局阈值。为了获得较快速的处理过程,本发明的峰值点的求取过程和它们之间的局部最小值点的求取过程如下:
1)定义一个灰度直方图类CImageHist,该类中主要包含了一个一维向量m_ImgeHist、对向量进行平滑的滤波函数Filter()、对一维向量进行求取峰值点的函数getMaxVector()以及求取某峰值点之间的局部最小值点的函数getLocalMin()。
2)灰度直方图的一维向量m_ImgeHist,其维度为256,对应于像素值的0到255;
3)平滑的滤波函数Filter()中有一个方法选择参数,即选择不同的滤波方法,本实施例中使用了软件开关的平滑方法,利用了灰度值统计变化最大阈值来平滑直方图,对向量m_ImgeHist从0点开始扫描,以此对变化幅度进行比较,当变化幅度大于某个阈值时,则根据变化方向加减该位置的元素值,否则,保持原数值不变;该函数的输出为一个bool变量,以表示正确执行,方便后续函数的调用。
4)对一维向量进行求取峰值点函数getMaxVector()返回值为一个峰值列表,本实施例中使用比较大小,若发现后值比前值小,则认为前值所对应的数值为一个峰值点。本实施例中使用两次求峰值方法,得出的峰值点列表再作为输出。
5)对给定峰值点求取局部最小值点getLocalMin(),该方法返回值为一个一维数组,数组中包含两个元素,第一个元素表示该最小值点的数值,第二个点表示该最小值点所对应的灰度值。
如图2所示为本步骤所获得的图去噪处理后的图像。
第三、为了保留工程机械图纸的有效信息,本发明对二值图图像中包含的噪声点进行类似形态学滤波的处理过程,该形态学滤波方法考虑了像素的局部灰度信息分布特征。形态学因子选择了5×5的正方形窗口,在图像中进行全局扫描,扫描窗口中对应的区域进行了灰度统计,如果统计结果大于一个给定的数字,且该窗口所对应的形态不是预先给定的如图2所示的几种形态时,本实施例中使用3,则说明该处为孤立噪声点,将该窗口的中心点所对应的图像像素灰度值赋值为0,表明为背景。
第二步:获取二值化图像某一个矢量的初始中轴点。
1)对整个图像进行扫描,一旦扫描线碰到从1到0的状态时,则表明该扫描线即将进入矢量化区域,并对该点进行标记c1。标记方法使用像素的位置信息{x,y1},从该点开始继续扫描,如果碰到从0到1的状态时,则表明扫描线即将跃出矢量化区域,并记录该点为c2{x,y2};
2)对c1和c2进行平均,获得中间点,标记为p1点{x,(y1+y2)/2};
3)以p1点为中心进行上下扫描,向上扫描时,如果碰到从0到1的状态时,则将相应的点记录为c1,{x1,(y1+y2)/2},对应于向下扫描时,记录点为c2,{x2,(y1+y2)/2};在对c1和c2进行平均,得到p2点,{(x1+x2)/2,(y1+y2)/2};
4)判断p1和p2之间的像素距离,即(x1+x2)/2和x之间的差值,如果该差值小于一个像素值,则将p2点作为初始中轴点;否则从p2点开始横向扫描,返回步骤1)继续2)、3)、4)步,扫描过程仍然是先横向扫描后纵向扫描,像素距离判断仍然使用(x1+x2)/2和x之间的差值。
5)以上步骤都要记录中间点p1和p2的横向和纵向扫描距离,如p1点的横向扫描距离可以使用从c1到p1的距离与p1点到c2点的距离和表示。初始中轴点横向和纵向的扫描距离进行比较,如果横向距离大于纵向距离,则标记该次矢量化区域为横向的,否则标记为纵向。
第三步,迭代跟踪
首先定义输出的中轴点链,该中轴点链为一个二维数组,其中一维表示了中轴点的列表,另外一维表示中轴点链中中轴点所对应的宽度信息。
从初始中轴(设为pix1)点开始,首先将pix1点保存在中轴点
链的中轴点列表中,并将相应的宽度信息加入到链表中,宽度信
息是该中轴点纵向方向的碰撞距离;
如果矢量化区域为横向标记:
从该点开始进行两个方向的扫描,在一个方向扫描完成后执行另外一个方向的扫描,这两个方向的扫描过程一致。假设向右扫描:以该初始中轴点横向扫描,直到碰到像素过渡区域,即从0到1状态的变化时,记录该点为c1;再从c1点出发向下扫描,碰到0到1状态变化时,记录该点为c2点,将c1点和c2点的中间点pix2记录下来,将c1到c2的距离保存为宽度;
如果矢量化区域标记为纵向:
从该点开始进行两个方向的扫描,在一个方向扫描完成后执行另外一个方向的扫描,这两个方向的扫描过程一致。假设向右扫描:以该初始中轴点纵向扫描,直到碰到像素过渡区域,即从0到1状态的变化时,记录该点为c1;再从c1点出发向右扫描,碰到0到1状态变化时,记录该点为c2点,将c1点和c2点的中间点pix2记录下来,将c1到c2的距离保存为宽度;将这些信息加入到中轴点链中。
计算该中轴点和上一个中轴点之间的距离,并保存为pixdist,进行下一个中轴点的扫描,在真正进入点链获取扫描前,先进行四个条件的判断:
7)宽度一致性检验;
宽度一致性检验是要求点链跟踪时,每个点链获取的宽度保持一致,本发明要求点链中的中轴点宽度保持在一定的数量之内,也就是说两个点链宽度相差不超过4~5个像素。这里涉及到中轴点宽度的计算问题:当点链方向标志为横向时,中轴点纵向的扫描碰撞到的两个点之间的像素距离为中轴点的宽度。
8)方向一致性检验;
方向一致性检验是要求点链的方向信息一致,方向信息是根据中轴点横向扫描与纵向扫描的比值确定的,如果比值大于1,则表明该中轴点为横向的,否则则表示中轴点为纵向的。
9)扫描步长限制条件检验;
扫描步长限制条件检验是系统预先给予一个最大的扫描步长,无论是中轴点的横向扫描还是纵向扫描,都要满足这一最大扫描步长。由于该方法所涉及到的系统分辨率变化多样,也就是图纸线的信息所使用的像素点的个数变化较大,但对于一种图纸分辨率变化是不大的,本发明提出一种自适应的最大扫描步长,该步长的计算是在初始化中轴点的过程中给出的,取初始化中轴点横向扫描宽度和纵向扫描宽度的平均值。
方法如上,当进行第一次碰撞时,得到c1点,计算c1点和当前中轴点之间的距离,如果与pixdist比较大于某个数值,则将碰撞距离减半,继续进行扫描,如果宽度条件不满足,继续将碰撞距离减半。这里限制减半次数为两次。
第四步,节点复原
当系统满足第三步的三个要求后,中轴点链的获取扫描过程开始启动,在根据第三步的方法每获得一个中轴点后,都会进行以上三个条件的判断,当条件不满足时并非立刻退出扫描,本发明设计了一个缓冲计数器:首先放弃当前的中轴点,将前一个中轴点设置为当前中轴点,缓冲计数器自动加1,然后对该中轴点的与中轴点扫描方向一致的最大扫描步长进行设置,使其进行折半处理,重新进行一次中轴点横向和纵向扫描,如果仍然不满足扫描条件,缓冲计数器再次加1,最大扫描步长再次进行折半处理。这样进行两次缓冲,如果仍然不满足条件,则放弃该方向的中轴点扫描,改为从初始化中轴点处的另外一个方向扫描或者扫描结束。如果满足条件后,则中轴点的扫描继续进行,且将最大扫描步长恢复为系统预先设置的最大扫描步长。
第二步到第四步为一个循环过程,该循环过程的结束条件是扫描整张图纸后没有不被占有的矢量化区域存在。该循环过程结束后,系统会获得整张工程图纸的中轴点链,该中轴点链包括了中轴点的链表信息、中轴点的宽度信息以及该中轴点链的方向信息。
第五步,多义线处理
得到整张图纸的中轴点链信息后,本发明采用多义线处理的手段对这些信息进行压缩,该过程是对中轴点链的再次扫描。对于一条中轴点链,该过程如下:
9)设置第一个中轴点为当前中轴点,第二个中轴点为拓展中轴点,当前中轴点与拓展中轴点进行连线处理。
10)连线处理是在拓展中轴点上以该中轴点的宽度为直径,以该中轴点为圆心作圆,在用当前的中轴点与这个圆做两条切线。
11)从拓展中轴点开始找下一个中轴点,对其作圆,方法与连线处理过程一样,如果这个圆落在这两条切线内,则将该中轴点删除;再找下一个中轴点,重复本次操作;
12)直到有中轴点的圆与切线相切,则将该中轴点作为当前中轴点,该当前中轴点的第二个中轴点设置为扩展中轴点,重复2)、3)步骤直到该条中轴点链扫描完成。
如图3所示是本步骤中经过矢量化提取过程后的图像。
综上所述仅为本发明的较佳实施例而已,并非用来限定本发明的实施范围。即凡依本发明申请专利范围的内容所作的等效变化与修饰,都应为本发明的技术范畴。