一种从曲线图形中提取曲线数据的方法与流程

文档序号:16505263发布日期:2019-01-05 08:59阅读:786来源:国知局
一种从曲线图形中提取曲线数据的方法与流程

本发明涉及计算机图形处理与识别领域,特别是涉及一种从曲线图形中提取曲线数据的方法。



背景技术:

从曲线图形中自动识别并提取曲线数据,在计算机图形处理与识别领域,特别是在科学计算与数据处理方面,具有非常重要的应用价值。

目前,相关领域的应用软件系统,主要采用人工手动拾取的方式,将曲线图形转换为数字化的二维曲线坐标。即:在一个预先定义的二维坐标空间里,依靠人工沿曲线图形走向逐点标记并拾取各节点坐标值。手动标记点的准确性与操作者的经验、软件系统反馈等密切相关。因此,这一标记方法的技术缺陷(特别是数值误差)是显而易见的。

对曲线图形进行自动识别的难点在于以下几个方面。(1)曲线自身的联通性可能很复杂。对于单一线段,通常比较容易识别。但对于存在复杂连接关系和拓扑属性的曲线图形来说,如何准确判定相邻线段之间的连接关系或重叠属性,是图形处理与自动识别技术的焦点和难点。(2)曲线线宽与图形栅格化像素之间不匹配,导致对曲线段线长与线宽的界定是比较模糊,因而很难构造具有普适性且鲁棒的自动识别方法。

本发明根据栅格化曲线图形灰度值的分布特点与联通性原则,提出了一种从曲线图形中提取曲线数据的方法,可以显著提高曲线图形数据转换的效率和数值精度。本方法可以不失一般性地拓展至对三视图(或等价的多视图)中三维曲线或曲面的自动识别与数据重建工作。



技术实现要素:

本发明旨在提供一种从曲线图形中提取该曲线数据的方法,以避免人工抓取曲线节点的操作失误或数值分辨率误差。

本发明公开的从曲线图形中提取曲线数据的方法,包括以下步骤:

(1)以有限像素对曲线图形所在的二维区域进行栅格化标记;

(2)沿长(x)或宽(y)方向,逐列或逐行标记连续涂色的像素集合;

(3)根据边缘及相邻像素的灰度值分布特征,计算连续涂色像素集合的边界位置;

(4)精确计算上述集合所描述的曲线段或节点坐标;

(5)根据相邻涂色像素集合之间的连通性,依次输出上述曲线段集合或节点集合的坐标及其链式关系。

其中,步骤(1)对曲线图形进行栅格化标记,可细分为以下几步:

(1a)根据二维图形的最大范围,按指定的像素大小∆(∆与曲线线宽约为一个量级),将该曲线图形栅格化,分别记二维图形在长(x)、宽(y)方向的最大像素点数为n和m;

(1b)标记曲线图形在每个像素中的灰度值f1(f1=0~255),rgb彩色图可根据r、g、b分量法或加权平均法转换为灰度图;

(1c)遍历上述像素集合,以最大灰度值max{f1}为模,将所有涂色像素的灰度值归一化,即f2=0~1。

上述步骤(2),沿长(x)或宽(y)方向,逐列或逐行标记连续涂色的像素集合,可细分为以下几步:

(2a)记ε为预先设定的灰度阈值。从x方向的第一个像素点(x1,y1)开始,判定其灰度值是否大于ε;若大于ε,则将其记入第一个涂色像素队列x1_r1{};

(2b)提取上述像素点沿y方向的相邻点,如(x1,y2),同上,若其灰度值大于ε,则将其记入队列x1_r1{},否则不记入;

(2c)若(x1,y2)的灰度值ε且x1_r1{}非空,则第x1列的涂色像素集合数加1,记为x1_r2{};

(2d)重复上述第(2b)至第(2c)步,遍历第x1列的所有像素点,得到所有线段对应的连续涂色像素队列集合{x1_ri};

(2e)提取x1右侧的相邻像素x2,重复上述第(2a)至第(2d)步,得到曲线图在第x2列的所有连续涂色像素队列集合{x2_rj};

(2f)遍历队列{x2_rj},标记其与队列{x1_ri}之间的联通关系,例如:对涂色像素队列x2_rj,若其左侧相邻的涂色像素集合{x1_yk}分属于队列集合{x1_rm},则标记x2_rj左侧与队列集合{x1_rm}联通;

(2g)重复上述第(2a)至第(2f)步,遍历x方向的所有像素点,得到曲线图对应的所有连续涂色像素队列集合{xi_rj},并已从左至右,标记相邻两列涂色像素之间的联通关系。

上述步骤(3),根据边缘及相邻像素的灰度值分布特征,计算连续涂色像素集合的边界位置,可细分为以下几步:

(3a)若队列集合{x1_rj}非空,则取队列x1_r1,依次记其两个下边界点和两个上边界点p(-2)、p(-1)、p(1)、p(2),且记初始值为0;

(3b)在队列x1_r1中,取第一个像素(x1,yj),若其归一化的灰度值f(j)>1-ε,则该队列下边界点p(-1)的坐标值为(∆/2,(j-1/2)∆);

(3c)若元素(x1,yj)的灰度值f(j)<1-ε,且其相邻像素(x1,yj+1)的灰度值f(j+1)>1-ε,则下边界点p(-2)的坐标值为(∆/2,(j-f(j)/2)∆),下边界点p(-1)的坐标值为(∆/2,(j+1/2)∆);

(3d)若元素(x1,yj)的灰度值f(j)<1-ε,且其相邻像素(x1,yj+1)的灰度值0<f(j+1)<1-ε,则继续查找在队列x1_r1中的相邻像素集合{(x1,yk)},直至第一个灰度值满足条件f(k)>1-ε,此时记p(-1)的坐标值为(∆/2,(k-1/2)∆)、p(-2)的坐标值为(∆/2,(k-1-f(k-1)/2)∆);否则,记p(-2)的坐标值为(∆/2,(j-1/2)∆)、p(-1)仍为初值0;

(3e)若元素(x1,yj)的灰度值f(j)<1-ε,且其相邻元素(x1,yj+1)不在队列x1_r1,则其下边界点p(-2)的坐标值为(∆/2,(j-1/2)∆);

(3f)同理,取队列x1_r1的上边界像素(x1,yj)及其相邻元素(x1,yj-1),计算其上边界点p(1)、p(2)的坐标值;

(3g)遍历队列集合{x1_rj},重复上述第(3a)至第(3f)步;

(3h)遍历队列集合{xi_rj},重复上述第(3a)至第(3g)步。

上述步骤(4):精确计算上述集合所描述的曲线段或节点坐标,可为以下几步:

(4a)若队列集合{x1_rj}非空,则取队列x1_r1,其灰度像素区的上、下边界点依次为p(-2)、p(-1)、p(1)、p(2),记拟提取的线段数据上、下边界点为q1、q2;

(4b)若p(-2)、p(-1)、p(1)、p(2)均大于0,则q1的坐标为p(-2)和p(-1)基于灰度值的加权平均值,q2的坐标为p(1)和p(2)基于灰度值的加权平均值;

(4c)若p(-1)与p(1)中有且仅有一个为0,则q1和q2的坐标值分别为p(-2)、p(2)与非0坐标点p(-1)或p(1)基于灰度值的加权平均值;

(4d)若p(-1)与p(1)都为0,则q1和q2为同一点,且等于p(-2)和p(2)基于灰度值的加权平均值;

(4e)若|q1-q2|<∆,则令g=(q1+q2)/2,q1=q2=g;

(4f)遍历{x1_rj},得到曲线图在第x1列所有线段的上、下边界点坐标;

(4g)遍历队列集合{xi_rj},得到曲线图在各列像素中标记的线段边界点坐标。

上述步骤(5):根据相邻涂色像素集合之间的连通性,依次输出上述曲线段集合或节点集合的坐标及其链式关系,可细分为以下几步:

(5a)若涂色队列集合{xi_rj}非空,则取其第1个元素(队列)x1_r1,记第1条线段l1,其端点即为x1_r1的上、下边界点q1和q2;

(5b)若x1_r1的左侧相邻涂色队列非空,记为x0_r0,且记x0_r0的上、下边界点为q0_1、q0_2;计算q1、q2与q0_1、q0_2之间的距离值,即:d1=|q1-q0_1|、d2=|q1-q0_2|、d3=|q2-q0_1|、d4=|q2-q0_2|;

(5c)根据最短联通路径,构建线段l1左侧的链式关系,如d1=min{d1,d2,d3,d4},则将q0_1嵌入q1的左侧连接链表中;

(5d)同理,若x1_r1的右侧相邻涂色队列非空,则重复(5b)至(5c),建立l1的右侧链式关系;

(5e)遍历{xi_rj},建立所有曲线段{lk}各节点间的链式关系(链表),并予以输出。

附图说明

图1是本发明一种从曲线图形中提取曲线数据的方法的流程图。

具体实施方式

下面结合附图,详细阐述本发明的具体实施方式。图1给出了本发明一种从曲线图形中提取曲线数据的方法的流程图,包括以下步骤:

步骤1:以有限像素对曲线图所在的二维区域进行栅格化标记;

步骤2:沿长(x)或宽(y)方向,逐列或逐行标记连续涂色的像素集合;

步骤3:根据边缘及相邻像素的灰度值分布特征,计算连续涂色像素集合的边界位置;

步骤4:精确计算上述集合所描述的曲线段或节点坐标;

步骤5:根据相邻涂色像素集合之间的连通性,依次输出上述曲线段集合或节点集合的坐标及其链式关系,也即该曲线图形在无限细分像素空间中的精确数学描述。

上述步骤1,对曲线图形所在的二维区域进行栅格化标记,旨在以有限像素对数字化的曲线图形进行离散化,并利用图形灰度值来标记曲线所占据的有效像素空间。该步骤的操作流程可细分为以下几步:

步骤101:根据二维图形的最大范围,按指定的像素大小∆(∆与曲线线宽约为一个量级),将该曲线图形栅格化,分别记二维图形在长(x)、宽(y)方向的最大像素点数为n和m;

步骤102:标记曲线图形在每个像素中的灰度值f1(f1=0~255),rgb彩色图可根据r、g、b分量法或加权平均法转换为灰度图;

步骤103:遍历上述像素集合,以最大灰度值max{f1}为模,将所有涂色像素的灰度值归一化,即f2=0~1。

上述栅格化的像素大小∆与曲线图形线宽约为一个量级。因此,步骤2,沿长(x)或宽(y)方向,逐列或逐行标记连续涂色的像素集合,将可以准确记录曲线图形在当前列或行上的线段集或点集合。步骤2的操作流程,可细分为以下几步:

步骤201:记ε为预先设定的灰度阈值。从x方向的第一个像素点(x1,y1)开始,判定其灰度值是否大于ε;若大于ε,则将其记入第一个涂色像素队列x1_r1{};

步骤202:提取上述像素点沿y方向的相邻点,如(x1,y2),同上,若其灰度值大于ε,则将其记入队列x1_r1{},否则不记入;

步骤203:若(x1,y2)的灰度值ε且x1_r1{}非空,则第x1列的涂色像素集合数加1,记为x1_r2{};

步骤204:重复上述第201步至第203步,遍历第x1列的所有像素点,得到所有线段对应的连续涂色像素队列集合{x1_ri};

步骤205:提取x1右侧的相邻像素x2,重复上述第201步至第204步,得到曲线图在第x2列的所有连续涂色像素队列集合{x2_rj};

步骤206:遍历队列{x2_rj},标记其与队列{x1_ri}之间的联通关系,例如,对涂色像素队列x2_rj,若其左侧相邻的涂色像素集合{x1_yk}分属于队列集合{x1_rm},则标记x2_rj左侧与队列集合{x1_rm}联通;

捕捉207:重复上述第201步至第206步,遍历x方向的所有像素点,得到曲线图对应的所有连续涂色像素队列集合{xi_rj},并已从左至右,标记相邻两列涂色像素之间的联通关系。

上述步骤3是基于图形边缘灰度值线性变化的原则,来定义图形边缘、与边缘相邻的内点(针对线段)等图形属性,即:根据边缘及相邻像素的灰度值分布特征,精确计算连续涂色像素集合的边界位置。该步骤的操作流程可细分为以下几步:

步骤301:若队列集合{x1_rj}非空,则取队列x1_r1,依次记其两个下边界点和两个上边界点p(-2)、p(-1)、p(1)、p(2),且记初始值为0;

步骤302:在队列x1_r1中,取第一个像素(x1,yj),若其归一化的灰度值f(j)>1-ε,则该队列下边界点p(-1)的坐标值为(∆/2,(j-1/2)∆);

步骤303:若元素(x1,yj)的灰度值f(j)<1-ε,且其相邻像素(x1,yj+1)的灰度值f(j+1)>1-ε,则记下边界点p(-2)的坐标值为(∆/2,(j-f(j)/2)∆),下边界点p(-1)的坐标值为(∆/2,(j+1/2)∆);

步骤304:若元素(x1,yj)的灰度值f(j)<1-ε,且其相邻像素(x1,yj+1)的灰度值0<f(j+1)<1-ε,则继续查找在队列x1_r1中的相邻像素集合{(x1,yk)},直至第一个灰度值满足条件f(k)>1-ε,此时记p(-1)的坐标值为(∆/2,(k-1/2)∆)、p(-2)的坐标值为(∆/2,(k-1-f(k-1)/2)∆);否则,记p(-2)的坐标值为(∆/2,(j-1/2)∆)、p(-1)仍为初值0;

步骤305:若元素(x1,yj)的灰度值f(j)<1-ε,且其相邻元素(x1,yj+1)不在队列x1_r1,则其下边界点p(-2)的坐标值为(∆/2,(j-1/2)∆);

步骤306:同理,取队列x1_r1的上边界像素(x1,yj)及其相邻元素(x1,yj-1),计算其上边界点p(1)、p(2)的坐标值;

步骤307:遍历队列集合{x1_rj},重复上述第301步至第306步;

步骤308:遍历队列集合{xi_rj},重复上述第301步至第307步。

上述步骤4,采用加权平均算法,精确计算由步骤3标记的曲线段端点或节点坐标。该步骤的操作流程可细分为以下几步:

步骤401:若队列集合{x1_rj}非空,则取队列x1_r1,其灰度像素区的上、下边界点依次为p(-2)、p(-1)、p(1)、p(2),记拟提取的线段数据上、下边界点为q1、q2;

步骤402:若p(-2)、p(-1)、p(1)、p(2)均大于0,则q1的坐标为p(-2)和p(-1)基于灰度值的加权平均值,q2的坐标为p(1)和p(2)基于灰度值的加权平均值;

步骤403:若p(-1)与p(1)中有且仅有一个为0,则q1和q2的坐标值分别为p(-2)、p(2)与非0坐标点p(-1)或p(1)基于灰度值的加权平均值;

步骤404:若p(-1)与p(1)都为0,则q1和q2为同一点,且等于p(-2)和p(2)基于灰度值的加权平均值;

步骤405:若|q1-q2|<∆,则令g=(q1+q2)/2,q1=q2=g;

步骤406:遍历{x1_rj},得到曲线图在第x1列所有线段的上、下边界点坐标;

步骤407:遍历队列集合{xi_rj},得到曲线图在各列像素中标记的线段边界点坐标。

在确定曲线段端点或节点坐标后,上述步骤5,根据相邻涂色像素集合之间的连通性,依次输出上述曲线段集合或节点集合的坐标及其链式关系。该步骤的具体操作流程,可细分为以下几步:

步骤501:若涂色队列集合{xi_rj}非空,则取其第1个元素(队列)x1_r1,记第1条线段l1,其端点即为x1_r1的上、下边界点q1和q2;

步骤502:若x1_r1的左侧相邻涂色队列非空,记为x0_r0,且记x0_r0的上、下边界点为q0_1、q0_2,计算q1、q2与q0_1、q0_2之间的距离值,即:d1=|q1-q0_1|、d2=|q1-q0_2|、d3=|q2-q0_1|、d4=|q2-q0_2|;

步骤503:根据最短联通路径,构建线段l1左侧的链式关系,如d1=min{d1,d2,d3,d4},则将q0_1嵌入q1的左侧连接链表中;

步骤504:同理,若x1_r1的右侧相邻涂色队列非空,则重复第502步至第503步,建立l1的右侧链式关系;

步骤505:遍历{xi_rj},建立所有曲线段{lk}各节点间的链式关系(链表),并予以输出。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1