基于Potrace算法的中文矢量字库生成方法

文档序号:1156518 发布日期:2020-09-15 浏览:10次 >En<

阅读说明:本技术 基于Potrace算法的中文矢量字库生成方法 (Chinese vector word stock generation method based on Potrace algorithm ) 是由 王存睿 江子傲 于 2020-06-04 设计创作,主要内容包括:基于&lt;I&gt;Potrace&lt;/I&gt;算法的中文矢量字库生成方法,其属于矢量字库生成的技术领域。该方法通过对&lt;I&gt;Potrace&lt;/I&gt;算法中的拟合多边形和贝塞尔曲线片段进行优化和改进,对字体曲线轮廓进行高质量的布点,然后将中文字体图像进行矢量化,生成&lt;I&gt;svg&lt;/I&gt;矢量文件。原有的&lt;I&gt;Potrace&lt;/I&gt;算法生成的结果质量是,细节处字形轮廓上往往布满了冗余的控制点。本方法产生的字体是逼真的高质量结果,在视觉外观上显示出优于其他方法的优势。且轮廓的曲线线条光顺性高,可以精确捕捉整体特征以及局部细节,具有很高的精确度。同时本方法不仅减少了路径点的数量,而且保留了轮廓的关键风格细节。(Based on Potrace A Chinese vector word stock generation method of an algorithm belongs to the technical field of vector word stock generation. The method comprises the steps of Potrace Optimizing and improving the fitting polygon and Bezier curve segment in the algorithm, performing high-quality point distribution on the font curve outline, and performing vectorization on the Chinese font image to generate svg A vector file. Original one Potrace The quality of the result generated by the algorithm is that redundant control points are always distributed on the outline of the glyph at the details. The characters produced by the method are vivid and high-quality results and are better than other characters in visual appearanceThe advantages of the method. And the curve line smoothness of the contour is high, the overall characteristics and the local details can be accurately captured, and the accuracy is high. Meanwhile, the method not only reduces the number of path points, but also reserves the key style details of the contour.)

基于Potrace算法的中文矢量字库生成方法

技术领域

本发明涉及一种矢量字库的生成技术,具体说是基于Potrace算法改进的中文矢量字库生成方法。

背景技术

矢量是具有一定长度、一定方向、一定位置的直线段。一个汉字的笔画周围的轮廓线可以看成曲线,曲线可以用一组首尾相接的矢量去近似地表示,曲线字库中的字体通过采用直线和曲线来描述一个汉字图像的轮廓。与位图字体相比,矢量字体定义为一组参数曲线,可以缩放到任何大小,并且通过某些数字处理比位图字体更容易转换。因此,我们在制作字库时需要将中文字符从位图字体转换为矢量字体。

目前,汉字字库的输出主要采用的是曲线矢量字库,如常见的Truetype和opentype字库,都是通过矢量曲线来描述一个字体图像的轮廓。在曲线字库的制作流程中,将字体图像矢量化,是至关重要的一步,直接决定着整套字库的输出质量。由于现有的矢量化算法暂时无法满足当前字体设计行业的需求和质量要求,目前大多数商业字体产品仍然严重依赖于设计师对字体图像进行人工布点,手动调整来完成字体图像的矢量化工作。生产效率较低,因此研究一种自动生成高质量的矢量字库的方法具有重要的实际意义。

发明内容

为解决现有技术存在上述问题,本申请提供一种基于Potrace算法改进的字体图像矢量化方法,通过对Potrace算法中的拟合多边形和贝塞尔曲线片段进行优化和改进,对字体曲线轮廓进行高质量的布点,然后将中文字体图像进行矢量化,生成svg矢量文件,最后生成完整的中文字体矢量字库。

为实现上述目的,本申请的技术方案为:一种基于Potrace算法改进的中文字体矢量字库生成方法,包括如下步骤:

第一步,设计字体图像:设计字库中的需要字体,制作为bmp格式的图片进行统一保存,然后用字库中对应的unicode编码对每个字体图像进行命名;

第二步,将字体图片进行二值化和去噪:设置全局阈值,扫描图像,将图像进行进行二值化处理;用形态学运算和各向异性扩散来过滤二值图像,其目的是在不去除图像内容重要部分的情况下降低噪声。最后将二值化后的图片栅格化为像素点阵;

第三步,路径分解:随机选择一对颜色不同但相邻像素,旋转图像使选择的黑色像素在左侧,白色像素块在右侧。选择长度为1的路径为起始路径,沿着两个像素的缝隙移动扩展,保持每个新边缘在其左侧具有黑色像素,在右侧具有白色像素。通过判断周围像素的颜色选择方向前进,一直持续回到开始的顶点。通过此方式将像素转换为封闭路径,通过递归应用上述算法将图像全部转换为封闭的路径。

第四步,多边形拟合路径:用直线片段去拟合各段封闭路径,用这些直线片段构建一个带索引序列的多边形,然后选取最优多边形;

第五步,多边形转为矢量轮廓:将上一步骤中的多边形转为光滑的矢量轮廓,调整多边形顶点的位置来使它尽量接近源位图,根据临近的线片段的长度和它们间的夹角来计算转角和曲线,最后用三次贝塞尔曲线完成多边形轮廓的拟合。

第六步:将矢量曲线轮廓写成svg格式的路径,进而生成svg矢量图。

第七步:读取svg文件并进行解析,将所有字体的svg数据写入TrueType格式的字库并保存。

进一步的,为了让本申请中矢量字体的生成效果更好,即轮廓片段更少,在第四步中,将找到一个最优多边形的问题简化为一个在有向图中找到一个最优环形。使用一个标准的图论算法来寻找有向图中的最优环形。通过计算图,在时间复杂度O(nm)内找到最优环形,其中n是输入路径的大小,m是最长的可能的片段长度。

进一步的,在第五步中,在经过转角检测和光滑化之后,输出由贝塞尔曲线片段和直线片段构成的曲线,通过连接临近的贝塞尔曲线段来优化曲线数量;首先连接临近的凸性一致曲线片段,再连接总的方向改变少于179度的曲线片段,通过连接上述短的曲线片段得到一条新的贝塞尔曲线片段C,再对曲线片段C定义一个数值的惩罚来判断该片段对于原轮廓的近似拟合误差是否在可接受的范围,最后,按照上述过程将利用图论算法得到的最短多边形路径都转换成近似误差在可接受范围内的的曲线片段集合,由此完成多边形轮廓的拟合。

本发明的有益效果:该方法通过对Potrace算法中的拟合多边形和贝塞尔曲线片段进行优化和改进,对字体曲线轮廓进行高质量的布点,然后将中文字体图像进行矢量化,生成svg矢量文件。原有的Potrace算法生成的结果质量是,细节处字形轮廓上往往布满了冗余的控制点。本方法产生的字体是逼真的高质量结果,在视觉外观上显示出优于其他方法的优势。且轮廓的曲线线条光顺性高,可以精确捕捉整体特征以及局部细节,具有很高的精确度。同时本方法不仅减少了路径点的数量,而且保留了轮廓的关键风格细节。

附图说明

图1是本申请的流程图。

图2是本申请的算法原理图。

图3是本申请的字体矢量化效果图。

具体实施方式

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

本发明提供了一种根据设计师提供的汉字字体图像,通过改进的potrace图像矢量化算法,将其压缩为矢量数据,并自动生成矢量字库的方法。将字体图像二值化和去噪后,通过优化potrace算法中的多边形和曲线片段,将字体图像转为矢量路径,并写入曲线字库。

本发明流程图如图1所示,以及原理如图2所示,具体实施步骤如下:

将设计师设计好的字体图片进行二值化和去噪后设置全局阈值,扫描图像,将图像进行进行二值化处理,在用形态学运算和各向异性扩散来过滤二值图像,其目的是在不去除图像内容重要部分的情况下降低噪声。

将位图图像被放置在坐标系上,使得每个像素的角具有整数坐标,设置图像的背景颜色是白色,前景颜色是黑色,位于位图边界之外的坐标平面部分填充有白色像素。通过以下步骤将图构造有向图,设p是整数坐标点,同时p与四个像素相邻。如果四个像素的颜色不完全相同,既存在一个像素的颜色与其他三个像素颜色不同,这样的点我们称为拐点。如果图像中两个拐点的欧几里得距离为1,则存在两个顶点连接的边,并且如果从顶点v到顶点w的直线段将黑色像素与白色像素分开,当线段的方向为从顶点v到顶点w时,黑色像素位于其左侧,白色像素位于其右侧。如果一个路径是由一系列拐点{v0,...,vn}所组成,对所有点i=0,...n-1都存在一条边从vi到vi+1。如果vn=v0,由于两个像素点的欧几里得距离为1,所以所得路径的长度为边的个数。即路径分解的目标为在所有拐点中找到一个封闭路径使得每条边都只出现一次。

为使曲线更加近似与多边形,在点ai上画一个单位方形。然后找到平行于

Figure BDA0002523355750000062

的线Li,并在ai的周围接触到方形,且它尽可能地接近直线

Figure BDA0002523355750000061

令c为Li

Figure BDA0002523355750000063

的交点,并令γ为

Figure BDA0002523355750000064

的长度和的商。令并考虑贝塞尔曲线链接bi-1和bi用参数α。这条曲线切线于bi-1ai,Li,aibi这3条线。

最后使用计算的参数α来进行转角检测决定最终从bi-1到bi的曲线。如果α≤1,然后我们绘制一条光滑的贝塞尔曲线在这个顶点,如果α>1,这里没有凸的贝塞尔曲线来链接bi-1和bi并切线于Li。检测了一个转角且通过两条相交于点ai的直线片段链接bi-1和bi。α的值被调整为0.55和1之间。α>0.55是为了阻止曲线太"平",α<1是为了保证结果贝塞尔曲线是凸的。

假定有这样的一条曲线C,必须与相切,则可以找到的交点O,则曲线中只留下一个自由度需要考虑,即参数α。如果我们增加一个约束——被曲线C与

Figure BDA00025233557500000611

所包围的面积和被原曲线片段与所包围的面积必须相等,便可以确定参数α。此时便得到一条唯一的Bezier曲线C,它是一个近似给定线段的候选曲线。

然后检查这条近似给定的曲线片段C是否是可接受的,如果是的话,就给它一个数值的惩罚。这里采用一个简单的相切来检查,对于每个i=1,...,n-1,在C上找到点zi,其位置上的切线将平行于

Figure BDA0002523355750000071

令di为zi到线片段的欧几里得距离。接着再对于每个i=1,...,n,在C上找到点z′i,其在C上的切线平行于另d′i为z′i到线片段Li的欧几里得距离,如果z′i和ai在Li的同一边上,则记为正的,否则为负。

如果di≤ε,z′i>-ε,且zi在线

Figure BDA0002523355750000074

上的正交投影位于ai和aj+1之间,则认为这个近似是可接受的。这里值ε是一个常量值,叫做曲线优化算法的容忍度;它的预设为0.2,可以用--opttolerance命令行选项来更改。

如图3所示,本方法可以产生逼真的高质量结果,在视觉外观上显示出优于其他方面的优势。原有的Potrace算法能够矢量化整低分辨率的图像,但生成的结果是低质量的。当放大细节时,字形轮廓上往往布满了冗余的控制点,如图3(a),并且轮廓的曲线线条光顺性很低,它无法精确捕捉整体特征以及局部细节,因此缺乏精确度。

相反,本申请提出的方法不仅减少了路径点的数量,而且保留了轮廓的关键风格细节。除了视觉外观,本申请的方法在矢量化质量品质方面也优于其他方法。

7页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:流程图生成方法、装置、计算机设备和存储介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!