矢量字体的骨架线提取方法及装置与流程

文档序号:16036699发布日期:2018-11-24 10:08阅读:515来源:国知局

本发明实施例涉及文字图形处理技术领域,尤其涉及一种矢量字体的骨架线提取方法及装置。

背景技术

矢量字体是通过数学曲线来描述的,包含字形边界上的关键点、连线的导数信息等,字体的渲染引擎通过读取这些数学矢量,然后进行数学运算来渲染,其轮廓是由矢量曲线构成,例如直线或bezier曲线(贝塞尔曲线),现有的矢量字体包括type1、truetype、opentype等几类。而字体的骨架线可以作为字体的一种重要的几何特征,与原始字体具有相同的拓扑结构,直接反映了原始字体本身的形状特征。利用字体骨架线表示原始字形,可以在保持原始字形重要拓扑特征的前提下,减少字形中的冗余信息,字体骨架线广泛应用于字形的形状分析、特征提取、字体识别和字体制作等领域。

字体骨架线的提取有多钟方法,目前常用的字体骨架线提取算法是基于内切圆圆心的骨架线提取算法。具体是将笔画的轮廓曲线采用内切圆圆心方法提取骨架线,获取与笔画轮廓相切的内切圆的圆心,通过将圆心连接起来即得到字体的骨架线。然而,该方法提取的骨架线中存在比较多的骨架线“枝丫”,并不能准确的反映字体本身的形状特征,从而导致骨架线提取结果不准确。



技术实现要素:

本发明提供一种矢量字体的骨架线提取方法及装置,可以有效的避免矢量字体的骨架线提取中“枝丫”的产生,并且提高提取的骨架线的精确度。

本发明的一个方面提供一种矢量字体的骨架线提取方法,所述矢量字体由至少一个闭合轮廓构成,每一所述闭合轮廓由若干矢量曲线顺次连接构成一闭合回路,所述方法包括:

识别每一闭合轮廓的笔头曲线和笔尾曲线,其中,所述笔头曲线为位于所述闭合轮廓起笔位置的所述矢量曲线,所述笔尾曲线为位于收笔位置的所述矢量曲线;

基于内切圆圆心算法对中间曲线提取骨架线离散点,其中,所述中间曲线为所述笔头曲线和所述笔尾曲线之间的所述矢量曲线;

将所述中间曲线的每一第一曲线及与其平行对应的第二曲线所提取的骨架线离散点拟合为一条拟合曲线;

提取所述笔头曲线的骨架线和所述笔尾曲线的骨架线;

将每一闭合轮廓的所述笔头曲线的骨架线、各所述拟合曲线和所述笔尾曲线的骨架线顺次连接,得到所述矢量字体的骨架线。

本发明的另一个方面提供一种字体骨架线提取装置,所述矢量字体由至少一个闭合轮廓构成,每一所述闭合轮廓由若干矢量曲线顺次连接构成一闭合回路,所述装置包括:

识别模块,用于识别每一闭合轮廓的笔头曲线和笔尾曲线,其中,所述笔头曲线为位于所述闭合轮廓起笔位置的所述矢量曲线,所述笔尾曲线为位于收笔位置的所述矢量曲线;

提取模块,用于基于内切圆圆心算法对中间曲线提取骨架线离散点,其中,所述中间曲线为所述笔头曲线和所述笔尾曲线之间的所述矢量曲线;

拟合模块,用于将所述中间曲线的每一第一曲线及与其平行对应的第二曲线所提取的骨架线离散点拟合为一条拟合曲线;

所述提取模块还用于提取所述笔头曲线的骨架线和所述笔尾曲线的骨架线;

连线模块,用于将每一闭合轮廓的所述笔头曲线的骨架线、各所述拟合曲线和所述笔尾曲线的骨架线顺次连接,得到所述矢量字体的骨架线。

本发明提供的字体骨架线提取方法及装置,通过识别每一闭合轮廓的笔头曲线和笔尾曲线,对笔头曲线和笔尾曲线之间的中间曲线提取骨架线离散点,对骨架线离散点分段拟合为拟合曲线,并提取笔头曲线和笔尾曲线的骨架线,最后将每一闭合轮廓中的笔头曲线的骨架线、各拟合曲线和笔尾曲线的骨架线顺次连接,得到矢量字体的完整的骨架线,可以有效的避免了骨架线提取中“枝丫”的产生,提高矢量字体骨架线的精确度,并且所得矢量字体骨架线也为矢量曲线,更便于后续矢量字体骨架线的应用。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明一实施例提供的矢量字体的骨架线提取方法流程图;

图2-(a)为本发明实施例中的带交叉的矢量字体轮廓;图2-(b)为本发明实施例中的去交叉的矢量字体轮廓;

图3为本发明另一实施例提供的矢量字体的骨架线提取方法的处理过程示意图;

图4为本发明又一实施例提供的矢量字体的骨架线提取方法流程图;

图5为本发明又一实施例提供的矢量字体的骨架线提取方法流程图;

图6为本发明实施例提供的矢量字体的骨架线提取装置的结构图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

图1为本发明实施例提供的矢量字体的骨架线提取方法流程图。本发明实施例提供了一种矢量字体的骨架线提取方法,其中所述矢量字体由至少一个闭合轮廓构成,每一所述闭合轮廓由若干矢量曲线顺次连接构成一闭合回路。

需要说明的是,本发明提供的方法主要用于带交叉的矢量字体轮廓,即每个闭合轮廓都由一个基本笔画或几个基本笔画构成的一个完整轮廓,如图2-(a)所示,构成该完整轮廓的矢量曲线为直线或bezier曲线,而对于去交叉的矢量字体轮廓,如图2-(b)所示,需要根据一定的方法将其转化为带交叉的矢量字体轮廓。

如图1所示,该方法具体步骤如下:

s101、识别每一回路轮廓的笔头曲线和笔尾曲线,其中,所述笔头曲线为位于所述闭合轮廓起笔位置的所述矢量曲线,所述笔尾曲线为位于收笔位置的所述矢量曲线。

在本实施例中,在矢量字体中实际上并不存在笔头曲线、笔尾曲线的定义,而是在本发明的矢量字体的骨架线提取方法中,将矢量字体每一闭合轮廓中满足特定条件的矢量曲线定义为笔头曲线和笔尾曲线,而通常情况下,笔头曲线为该闭合轮廓的起笔位置处的矢量曲线,笔尾曲线为收笔位置处的矢量曲线。而对于不同的类型的字体,笔头曲线和笔尾曲线是不同的,例如楷体字体,笔头曲线和笔尾曲线为带有一定弧度的曲线,而对于黑体字体,笔头曲线和笔尾曲线则为直线。在闭合轮廓中如果能够判断出笔头曲线和笔尾曲线,而只对笔头曲线和笔尾曲线之间的中间曲线提取骨架线离散点,则可以有效的避免骨架线提取中“枝丫”的产生。本实施例中对于每一闭合轮廓的笔头曲线和笔尾曲线的识别,可基于矢量字体每一闭合轮廓中的各段矢量曲线的长度、形状、位置等参数来识别。本实施例以“扒”字为例,如图3-(a)中,获取“扒”字每一闭合轮廓的笔头曲线和笔尾曲线,其中线条较粗的、位于笔头、笔尾处的为笔头曲线和笔尾曲线。

s102、基于内切圆圆心算法对所述中间曲线提取骨架线离散点,其中,所述中间曲线为所述笔头曲线和所述笔尾曲线之间的所述矢量曲线。

在本实施例中,现有的内切圆圆心算法是将闭合轮廓离散成一系列的点,用直线将离散点依次串联起来,则闭合轮廓曲线就可以简单的看作由这一系列折线所组成,在每两个相邻离散点连成的直线和与该段直线相平行的、共同构成轮廓的直线之间,找到最小内切圆后,内切圆的圆心即为骨架线离散点,将骨架线离散点连接起来即为骨架线。该方法提取的骨架线离散点是一个几乎重合的封闭回路,而且提取的骨架线存在“枝丫”,本实施例中仅对笔头和笔尾之间的中间曲线提取骨架线离散点,避开了笔头曲线和笔尾曲线的区域产生的骨架线“枝丫”。需要说明的是,在矢量字体中同样不存在中间曲线的定义,本实施例中将闭合轮廓中笔头曲线和笔尾曲线之间的矢量曲线定义为中间曲线。

s103、将所述中间曲线的每一第一曲线及与其平行对应的第二曲线所提取的骨架线离散点拟合为一条拟合曲线。

在本实施例中,拟合算法可采用现有技术中的拟合算法,例如最小二乘法直线拟合、最小二乘法bezier曲线拟合算法等等,通过拟合所得到的拟合曲线也为矢量曲线,更便于后续矢量字体骨架线的应用。需要说明的是,拟合曲线可以是直线段也可以是曲线段。如图3-(b)将“扒”字的中间曲线的每一第一曲线及与其平行对应的第二曲线所提取的骨架线离散点拟合为一条拟合曲线,图中“扒”字每一闭合轮廓中心的每一段曲线,即为拟合后的拟合曲线。

s104、提取所述笔头曲线的骨架线和所述笔尾曲线的骨架线。

在本实施例中,通过提取笔头曲线的骨架线和笔尾曲线的骨架线,从而使得矢量字体的骨架线保持完整,并且保留字体笔头、笔尾的笔锋信息,如图3-(c)所示。其中,本实施例中所指的笔头曲线的骨架线和笔尾曲线的骨架线是笔头曲线、笔尾曲线所在位置对应的骨架线。本实施例中具体可根据笔头曲线和笔尾曲线的形状进行提取。

例如,提取所述笔头曲线的骨架线,具体可采用如下方案实现:

若所述笔头曲线为直线,将距所述笔头曲线最近的一条所述拟合曲线延长至与笔头曲线相交,作为笔头曲线的骨架线;或者,若笔头曲线为曲线,将曲线起点与终点连线的中点以及曲线上的曲率最大点之间的连线作为笔头曲线的骨架线。

而提取所述笔尾曲线的骨架线,具体可同样采用如下方案实现:

若所述笔尾曲线为直线,将距所述笔尾曲线最近的一条所述拟合曲线延长至与笔尾曲线相交,作为笔尾曲线的骨架线;或者,若笔尾曲线为曲线,将曲线起点与终点连线的中点以及曲线上的曲率最大点之间的连线作为笔尾曲线的骨架线。

当然对于笔头曲线和笔尾曲线为直线的情况,也可直接采用该直线的垂直平分线做为笔头曲线和笔尾曲线的骨架线。需要说明的是,所提取的笔头曲线的骨架线和笔尾曲线的骨架线也为矢量曲线。

s105、将每一闭合轮廓中的所述笔头曲线的骨架线、各所述拟合曲线和所述笔尾曲线的骨架线顺次连接,得到所述矢量字体的骨架线。

在本实施例中,本实施例中将每一闭合轮廓中的笔头曲线的骨架线、各拟合曲线和笔尾曲线的骨架线顺次连接,如图3(d)所示,得到矢量字体完整的骨架线,其连接方式可以采用将各线的两端进行延长至相邻两线相交,当然也可直接用直线或曲线将相邻两线相连。本实施例最终的到的矢量字体骨架线为矢量字体的完整的、不带“枝丫”的骨架线,且该骨架线也为矢量曲线,从而便于后续矢量字体骨架线的应用。

本实施例提供的矢量字体的骨架线提取方法,通过识别每一闭合轮廓的笔头曲线和笔尾曲线,对笔头曲线和笔尾曲线之间的中间曲线提取骨架线离散点,对骨架线离散点分段拟合为拟合曲线,并提取笔头曲线的骨架线和笔尾曲线的骨架线,最后将每一闭合轮廓中的笔头曲线的骨架线、各拟合曲线和笔尾曲线的骨架线顺次连接,得到矢量字体的完整的骨架线,可以有效的避免了骨架线提取中“枝丫”的产生,提高矢量字体骨架线的精确度,并且所得矢量字体骨架线为矢量曲线,更便于后续矢量字体骨架线的应用。

上述实施例中,s101所述识别每一闭合轮廓的笔头曲线,具体可采用如下方案实现:

确定所述闭合轮廓的最高点,若最高点所在的矢量曲线的后一条矢量曲线是竖直方向的,则最高点所在的矢量曲线为所述笔头曲线;或者,

若所述最高点所在的矢量曲线的后一条矢量曲线非竖直方向,则沿着最高点所在的矢量曲线的方向查找第一条长度短于第一预设长度且其前一条矢量曲线和其后一条矢量曲线平行的矢量曲线,作为所述笔头曲线。

本实施例中,确定闭合轮廓的最高点,若最高点所在的矢量曲线的后一条矢量曲线是竖直方向的,说明该笔画的起笔为竖向,故最高点为笔头曲线;否则对于非竖向的起笔,沿着最高点所在的矢量曲线的方向查找第一条长度短于第一预设长度且其前一条矢量曲线和其后一条矢量曲线平行的矢量曲线,作为所述笔头曲线。本发明中,“前一条”、“后一条”均是指沿着轮廓的方向。另外,本实施例中的“平行”可以是绝对平行,也可以是近似平行。

上述实施例中,s101所述识别每一的闭合轮廓的笔尾曲线,具体可采用如下方案实现:

确定闭合轮廓中的曲线长度短于第二预设长度和/或曲线曲率大于预设曲率、且其前一条矢量曲线和其后一条矢量曲线平行的矢量曲线,作为备选笔尾曲线;将所述备选笔尾中前一条矢量曲线到其后一条矢量曲线的距离最小的备选笔尾曲线为所述笔尾曲线。

当然,笔头曲线和笔尾曲线可以直接通过查找闭合轮廓中前一条矢量曲线和后一条矢量曲线平行、且方向相反的矢量曲线,将在一个闭合轮廓中满足该条件的矢量曲线分别作为笔头曲线和笔尾曲线。

在上述实施例的基础上,如图4所示,s102所述基于内切圆圆心算法对所述中间曲线提取骨架线离散点之前,还包括:

s201、识别所述闭合轮廓中的内轮廓和外轮廓。

在本实施例中,对于例如“口”、“日”等字体轮廓中可能存在内轮廓。对内轮廓和其所对应的外轮廓不需要识别笔头和笔尾曲线(此时没有笔头和笔尾曲线),因此进行单独处理。首先需要识别内轮廓和外轮廓,由于在矢量字体中,构成内轮廓和外轮廓的轮廓方向是不同的,可根据轮廓方向进行判断。

s202、将构成所述内轮廓的每一矢量曲线作为所述第一曲线,查找与该第一曲线平行且距离最短的非第一曲线的矢量曲线作为所述第二曲线。

在本实施例中,内轮廓的第一曲线所对应的第二曲线为与第一曲线平行且距离最短的矢量曲线,其中,平行可以是绝对平行,也可以是近似平行。对于含有内轮廓的字体,同样基于内切圆圆心的方法提取,即对内轮廓的第一曲线和与其对应的第二曲线提取骨架线离散点,其后续的各步骤与上述实施例相同,此处不再赘述。

更具体的,s201所述识别所述闭合轮廓中的内轮廓和外轮廓,可由如下方案实现:

获取内轮廓或外轮廓的轮廓多边形的顶点坐标;

根据如下公式计算所述轮廓多边形的面积:

其中,所述轮廓多边形ω为m边形,所述轮廓多边形的顶点坐标依次为(x1,y1),(x2,y2),...(xm,ym);

根据所述轮廓多边形的面积的正负,则识别出闭合轮廓中的内轮廓和外轮廓。

本实施例中,在闭合轮廓中,假定外轮廓为逆时针方向,内轮廓为顺时针方向。若轮廓多边形的面积为负,则该轮廓多边形顶点为顺时针方向,即该回路轮廓为内轮廓,否则,轮廓多边形的面积为正,轮廓多边形顶点为逆时针方向,回路轮廓为外轮廓。需要注意的是,在实际判断内外轮廓的时候,需要注意字体轮廓曲线的坐标原点是窗口的左上角(窗口坐标原点)还是左下角(实际坐标原点)。若字体轮廓曲线的坐标原点是窗口坐标原点,则内外轮廓的判断结果正好相反。

上述实施例中,s102所述基于内切圆圆心算法对所述中间曲线提取骨架线离散点,如图5所示,具体包括:

s301、对所述第一曲线及与其平行对应的所述第二曲线每隔预定步长取离散点;

s302、连接所述第一曲线上中的任意相邻的两个离散点构成线段,以所述线段的中点为切点、以预设半径作与所述线段相切的圆,并利用极坐标表示圆心坐标;

s303、逐步调整所述圆的半径,直至所述第二曲线中存在且仅存在一个离散点到所述圆心的距离等于所述圆的半径,以该圆心为骨架线离散点;

其中,s303所述逐步调整所述圆的半径,直至所述第二曲线中存在且仅存在一个离散点到所述圆心的距离等于所述圆的半径,具体可采用如下方案实现:

获取所述第二曲线中任意离散点到圆心的距离,若不存在距离小于或等于所述圆的半径的所述离散点,则将所述圆的半径调整为二倍的所述圆的半径;若存在距离小于或等于所述圆的半径的所述离散点,且所述离散点多于一个,则采用二分法调整所述圆的半径,直至所述第二曲线中存在且仅存在一个离散点到所述圆心的距离等于所述圆的半径。

在本实施例中,内切圆圆心坐标的计算准确程度直接影响字体骨架线离散点提取效果的优劣,为了能够更加准确的计算出内切圆的圆心坐标,使用二分法搜索内切圆的半径,并使用极坐标的方法计算内切圆圆心的坐标,以提高内切圆圆心坐标的计算精度。

具体的,利用极坐标计算内切圆圆心坐标的计算公式为:设点(x0,y0)是相邻的两个离散点构成线段ab的中点,则以(x0,y0)为切点,半径为r的圆心坐标为:

其中α是线段ab垂直平分线与水平方向的夹角。

上述实施例中,s103所述将所述中间曲线的每一所述第一曲线及与其平行的所述第二曲线对应的骨架线离散点拟合为一条拟合曲线,具体包括:

将所述骨架线离散点拟合为直线段,若各所述骨架线离散点与所述直线段之间的误差超过预设范围,则采用逐次调整拟合参数的最小二乘法将所述骨架线离散点拟合为三次bezier曲线。

本实施例中,由于矢量字体的闭合轮廓通常由直线段和三次bezier曲线两类曲线构成,因此将提取的骨架线离散点拟合为直线段或三次bezier曲线。

为了有更好的拟合效果,可以通过使用逐次调整拟合参数的最小二乘法进行拟合。其中利用最小二乘法将离散点拟合为三次bezier曲线的方法如下:

设三次bezier曲线的方程为:

其中p0(x0,y0),p3(x3,y3)分别是三次bezier曲线的起点和终点,p1(x1,y1),p2(x2,y2)分别是三次bezier曲线的两个控制点。设骨架线离散点的坐标为(xi,yi)(i=1,...,n),其中p0的坐标为离散点的起点坐标(x1,y1),p3为离散点的终点坐标(xn,yn),在拟合的过程中只需确定控制点p1(x1,y1),p2(x2,y2)的坐标。对离散点进行最小二乘法拟合,使得拟合曲线上的点与离散点之间距离的平方差之和达到最小,即:

取得最小值,只需令

通过解方程组可以求出两个控制点p1(x1,y1),p2(x2,y2)的坐标。

在求控制点的坐标时拟合参数ti是需要确定的,确定拟合参数ti常用的是“累加弦长法”。实现方法为:设li是离散点(xi,yi)和(xi-1,yi-1)之间的距离,其中l1=0,则离散点(xi,yi)对应的拟合参数

利用逐次调整拟合参数对离散点进行最小二乘法拟合的方法如下:

(1)利用“累加弦长法”确定拟合参数told_i,对离散点使用最小二乘法进行拟合,得到拟合的三次bezier曲线cold。

(2)对任意离散点(xi,yi),在拟合曲线cold找到距离离散点(xi,yi)最近的点所对应的参数t,作为离散点(xi,yi)新的拟合参数tnew_i。

(3)根据新确定的拟合参数tnew_i,对离散点重新进行最小二乘法拟合,得到新的拟合曲线cnew。

重复上述过程,通过逐次调整拟合参数,可以对骨架线离散点获取比较好的拟合效果。

上述实施例中,s105根据权利要求1所述的方法,其特征在于,所述将每一闭合轮廓中的所述笔头曲线的骨架线、各所述拟合曲线和所述笔尾曲线的骨架线顺次连接,具体包括:

延长所述笔头曲线的骨架线、所述笔尾曲线的骨架线以及各所述拟合曲线,获取相邻各线的交点,并对延长至交点后的各所述拟合曲线重新拟合。

本实施例中,可以首先将拟合曲线进行延长并离散化,实现方法是将拟合曲线为直线段的视为一次bezier曲线,对于所有bezier曲线取参数t∈[-0.2,1.2]范围内的离散点,则可以实现bezier曲线的延长和离散化。然后求相邻两个bezier曲线延长的离散点集的交点,根据相邻两个离散点集的交点,将延长至交点后的各所述拟合曲线进行重新拟合。通过上述方法,保证了矢量字体的骨架线的完整,并且避免了骨架线的各段连接过程中产生“枝丫”。

本实施例中,所述延长所述笔头曲线的骨架线、所述笔尾曲线的骨架线以及各所述拟合曲线后,获取相邻各线的交点前,还可包括:

若存在一拟合曲线,其前一拟合曲线的延长线与其后一拟合曲线的延长线相交,则将该拟合曲线删除。

在笔画的转折处,采用内切圆圆心法后所得的骨架线离散点通常不准确,拟合后会存在较短的一段偏离笔画的拟合曲线,该段拟合曲线并不能作为笔画转折处的骨架线,因此需要予以删除,通过判断是否存在一拟合曲线,其前一拟合曲线的延长线与其后一拟合曲线的延长线相交,来判断该拟合曲线是否是笔画转折处的拟合曲线,若是则将其删除。而在进行将各拟合曲线延长时,由于删除了转折处的拟合曲线,此时延长该拟合曲线的前一条和后一条拟合曲线,从而保证转折处的骨架线的准确度。

最后,上述实施例所提取的矢量字体骨架线可以写入pdf文件。上述提取的矢量字体骨架线是矢量曲线,可以将提取的骨架线曲线利用生成pdf的开源库将骨架线曲线写入到pdf文件,得到的pdf文件可以在illustrator等设计软件中打开,在illustrator中利用抽取的矢量字体的骨架线可以方便的设计个性化的字体。

图6为本发明实施例提供的矢量字体的骨架线提取装置的结构图。本发明实施例提供的矢量字体的骨架线提取装置可以执行上述矢量字体的骨架线提取方法实施例提供的处理流程,如图6所示,本实施例提供一种矢量字体的骨架线提取装置,所述矢量字体由至少一个闭合轮廓构成,每一所述闭合轮廓由若干矢量曲线顺次连接构成一闭合回路,所述装置包括:识别模块11、提取模块12、拟合模块13及连线模块14。

其中,识别模块11用于识别每一闭合轮廓的笔头曲线和笔尾曲线,其中,所述笔头曲线为位于所述闭合轮廓起笔位置的所述矢量曲线,所述笔尾曲线为位于收笔位置的所述矢量曲线;

提取模块12用于基于内切圆圆心算法对中间曲线提取骨架线离散点,其中,所述中间曲线为所述笔头曲线和所述笔尾曲线之间的所述矢量曲线;

拟合模块13用于将所述中间曲线的每一第一曲线及与其平行对应的第二曲线所提取的骨架线离散点拟合为一条拟合曲线;

提取模块11还用于提取所述笔头曲线的骨架线和所述笔尾曲线的骨架线;

连线模块14用于将每一闭合轮廓中的所述笔头曲线的骨架线、各所述拟合曲线和所述笔尾曲线的骨架线顺次连接,得到所述矢量字体的骨架线。

进一步的,所述识别模块11具体用于:

确定所述闭合轮廓的最高点,若最高点所在的矢量曲线的后一条矢量曲线是竖直方向的,则最高点所在的矢量曲线为所述笔头曲线;或者,

若所述最高点所在的矢量曲线的后一条矢量曲线非竖直方向,则沿着最高点所在的矢量曲线的方向查找第一条长度短于第一预设长度且其前一条矢量曲线和其后一条矢量曲线平行的矢量曲线,作为所述笔头曲线;

所述识别模块11具体还用于:

确定闭合轮廓中的曲线长度短于第二预设长度和/或曲线曲率大于预设曲率、且其前一条矢量曲线和其后一条矢量曲线平行的矢量曲线,作为备选笔尾;

将所述备选笔尾中前一条矢量曲线到其后一条矢量曲线的距离最小的备选笔尾曲线为所述笔尾曲线。

进一步的,所述提取模块11具体用于:

若所述笔头曲线为直线,将距所述笔头曲线最近的一条所述拟合曲线延长至与笔头曲线相交,作为笔头曲线的骨架线;或者,若笔头曲线为曲线,将曲线起点与终点连线的中点以及曲线上的曲率最大点之间的连线作为笔头曲线的骨架线;

所述提取模块11具体还用于:

若所述笔尾曲线为直线,将距所述笔尾曲线最近的一条所述拟合曲线延长至与笔尾曲线相交,作为笔尾曲线的骨架线;或者,若笔尾曲线为曲线,将曲线起点与终点连线的中点以及曲线上的曲率最大点之间的连线作为笔尾曲线的骨架线。

进一步的,所述识别模块11还用于:

识别所述闭合轮廓中的内轮廓和外轮廓;

将构成所述内轮廓的每一矢量曲线作为所述第一曲线,查找与该第一曲线平行且距离最短的非第一曲线的矢量曲线作为所述第二曲线。

更具体的,所述识别模块11具体还用于:

获取内轮廓或外轮廓的轮廓多边形的顶点坐标;

根据如下公式计算所述轮廓多边形的面积:

其中,所述轮廓多边形ω为m边形,所述轮廓多边形的顶点坐标依次为(x1,y1),(x2,y2),…(xm,ym);

根据所述轮廓多边形的面积的正负,则识别出闭合轮廓中的内轮廓和外轮廓。

进一步的,所述提骨架线离散点提取模块12具体用于:

对所述第一曲线及与其平行对应的所述第二曲线每隔预定步长取离散点;

连接所述第一曲线上中的任意相邻的两个离散点构成线段,以所述线段的中点为切点、以预设半径作与所述线段相切的圆,并利用极坐标表示圆心坐标;

逐步调整所述圆的半径,直至所述第二曲线中存在且仅存在一个离散点到所述圆心的距离等于所述圆的半径,以该圆心为骨架线离散点;

其中,所述逐步调整所述圆的半径,直至所述第二曲线中存在且仅存在一个离散点到所述圆心的距离等于所述圆的半径,具体为:

获取所述第二曲线中任意离散点到圆心的距离,若不存在距离小于或等于所述圆的半径的所述离散点,则将所述圆的半径调整为二倍的所述圆的半径;若存在距离小于或等于所述圆的半径的所述离散点,且所述离散点多于一个,则采用二分法调整所述圆的半径,直至所述第二曲线中存在且仅存在一个离散点到所述圆心的距离等于所述圆的半径。

进一步的,所述拟合模块13具体用于:

将所述骨架线离散点拟合为直线段,若各所述骨架线离散点与所述直线段之间的误差超过预设范围,则采用逐次调整拟合参数的最小二乘法将所述骨架线离散点拟合为三次bezier曲线。

进一步的,所述连线模块14具体还用于:

延长所述笔头曲线的骨架线、所述笔尾曲线的骨架线以及各所述拟合曲线,获取相邻各线的交点,并对延长至交点后的各所述拟合曲线重新拟合。

进一步的,所述连线模块14具体还用于:

若存在一拟合曲线,其前一拟合曲线的延长线与其后一拟合曲线的延长线相交,则将该拟合曲线删除。

本发明实施例提供的矢量字体的骨架线提取装置可以具体用于执行上述实施例提供的矢量字体的骨架线提取方法,具体功能此处不再赘述。

本实施例矢量字体的骨架线提取装置,通过识别每一闭合轮廓的笔头曲线和笔尾曲线,对笔头曲线和笔尾曲线之间的中间曲线提取骨架线离散点,对骨架线离散点分段拟合为拟合曲线,并提取笔头曲线的骨架线和笔尾曲线的骨架线,最后将每一闭合轮廓中的笔头曲线的骨架线、各拟合曲线和笔尾曲线的骨架线顺次连接,得到矢量字体的完整的骨架线,可以有效的避免了骨架线提取中“枝丫”的产生,提高矢量字体骨架线的精确度,并且所得矢量字体骨架线也为矢量曲线,更便于后续矢量字体骨架线的应用。

在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。

上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

本领域技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

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