APP下载

基于图的书法字笔画提取研究

2019-06-09朱欣蔚杨长强

软件导刊 2019年4期

朱欣蔚 杨长强

摘 要:中国书法艺术源远流长,随着计算机技术的发展,利用计算机进行书法识别成为可能。为使书法能够在计算机中精确识别,书法笔画的正确分割与提取必不可少。采用基于点到边界方向距离(PBOD)的笔画分割算法,对得到的分割笔画结合原图像构建无向图,根据无向图的连接区域最终组合成单独的笔画。采用200幅随机书法字图像进行实验,结果表明笔画提取的正确率达到95.35%,证明基于图的书法字笔画提取算法准确率高。该算法不仅能正确地对笔画进行提取,而且很好地解决了复杂汉字存在多个笔画交叉区域、在笔画分割后混淆相似子笔画的问题,提高了笔画提取效率。

关键词:PBOD;笔画分割;无向图;笔画组合

DOI:10. 11907/rjdk. 191165

中图分类号:TP317.4文献标识码:A文章编号:1672-7800(2019)004-0184-04

0 引言

提取笔画信息是书法字识别和书写风格分析的重要环节。笔画提取主要有两个问题:①如何解决交叉点的切分歧义问题;②对分割后的子笔画正确组合。

笔画提取研究很多[1-8],现有的笔划提取方法大多采用细化过程。细化是骨架化输入图像最常用的方法,一般通过数学形态学算法[9]或Zhang快速并行细化算法[10]获取书法字骨架,基于书法字骨架提取笔画。刘佳岩等[11]通过细化笔画初步提取进而得到笔顺信息,章夏芬[12]等对笔画细化后通过骨架爬虫提取笔画,还有如轮廓或线邻接图方法等。文献[13]提出了一种利用汉字外轮廓特征点的方法。

然而,从骨架、轮廓或线邻接图中抽取笔划各有各的问题,由于中国书法特殊的性质,这些方法可能是无效的。本文基于笔画的基本性质提出一种书法笔画提取方法,利用点到边界的方向距离(point-to-boundary orientation distance,PBOD)[14]以及笔画之间的连接关系构建书法笔画的无向图。

1 图像预处理

1.1 图像去噪

由于毛笔所含墨汁的状态,毛笔字在书写过程中可能出现“小孔”或“毛刺”。此外,在书法字扫描成图像过程中,可能会因为传输等问题产生噪声,这些噪声会对笔画提取造成影响。因此,首先需要对书法图像进行去噪。

本文采用中值滤波器去噪。用一个奇数点的滑动窗口遍历图像,把滑动窗口的中心对应到目标像素[15],用滑动窗口中所有像素值的中值代替目标像素的像素值,以此去掉不必要的“点”,实现降噪[16]。图1、图2为去噪前后的书法字图像,从中可以看到许多墨点消失了,字体本身也更加平滑。

1.2 图像二值化

在毛笔字書写过程中,不同笔画甚至同一笔画的不同位置手部用力情况是不同的,毛笔字的各个部分墨汁深浅存在差异。本文使用直方图法对图像进行二值化,使图像变为黑白两色,具体方法为:把图像中所有像素点的灰度值放进直方图中,找到直方图中的两个波峰,选择两个波峰中的波谷作为阈值,大于阈值的像素点灰度值设为255,反之,设为0[17]。图3是书法字图像的直方图以及阈值选择,二值化结果见图4。

1.3 提取字符边界

提取图像字符边界采用边界跟踪算法。首先,从上到下、从左到右扫描整个图像,找到第一个像素值为0的像素点,记为A0,并定义一个方向向量dir,用来记录边界点的移动方向,初始值为0。然后,按顺时针方向遍历当前像素的3×3邻域,当找到与当前像素值相同的点时,记此点为A1,并更新dir。一直循环此步骤,直到当前点AN是A1且AN-1是A0时结束跟踪[18]。此时,A0,A1,…AN就是字符边界,把它们存放在一个数组中待使用。

2 交叉区域获取

本文采用PBOD算法对笔画交叉区域进行提取。PBOD算法的基本原理是根据图像中每个像素点到字符边界的距离将字符中的点分为端点、普通点和交叉点,这3类点又构成字符的端点区域、普通点区域和交叉点区域。具体做法为:把每一个像素点从0°~360°每隔3°计算这个方向上点到字符边界的距离,这样每个像素点就可得到120个数据。把得到的数据以X轴为度数、Y轴为距离画出曲线图。观察曲线图的波峰数目:波峰数为1此点为端点;波峰数为2此点为普通点;波峰数大于等于3此点为交叉点[19]。图5、图6是多个波峰和一个波峰的情况。

如图7所示,图5的多个波峰对应图7中的交叉区域,图6的单个波峰对应图7中的端点区域。

3 笔画提取

3.1 字符图表示

以往的笔画提取研究大多直接对所有子笔画进行组合测试,以此判断两个子笔画之间是否组成一个笔画,比较复杂。本文采取对字符进行建模形成无向图的方式,使一个子笔画只同和它连接在同一个交叉区域的其它子笔画进行组合测试,大大提高了效率和准确性。具体如下:

在使用PBOD算法找到所有交叉区域后,把交叉区域分开的端点区域和普通点区域看成一部分,则一个字符就由子笔画和交叉区域两部分组成。建立一个无向图[G=][(V,E)]对每个字符建模,其中V和E是节点和边的集合。G中每个节点v代表字符中的一个子笔画或交叉区域[20]。如果一个交叉区域和一个子笔画在字符中是相互连接的,则它们分别对应的节点vi和vj之间有一条边ei,记为[(vi,vj)∈][E][21-22]。图8、图9为汉字“夫”构建的无向图示例。

无向图在计算机中以矩阵的形式存储,矩阵行和列的数量为无向图的节点数(即字符的子笔画和交叉区域数),矩阵中每个元素的值表示节点之间的连接关系:若节点之间有边连接,则对应的矩阵值为1;反之,则为0。图9中无向图矩阵表示为式(1)。

为了在笔画组合过程中方便确定每个区域的位置和其对应的无向图中的节点,对整个字符建立坐标系,以图像左下角的点为坐标原点。取每个区域的重心表示该区域和该区域在无向图中对应的节点[23],重心Ai(xi,yi)公式如下:

3.2 笔画组合

在把整个汉字分成各个子笔画区域后,需要对子笔画进行组合进而形成一个个完整的笔画,算法过程如下:

(1)对整张图像遍历,通常选取图像左上角的子笔画(图8中的a区域),根据公式(2)得到的重心确定该子笔画在坐标系中的位置和在无向图中对应的节点(图9中的节点a)。

(2)通过无向图找到与该节点相连的节点(图9中的c节点),即找到无向图中该节点在存储矩阵中所代表的行值为1的元素(矩阵(1)中第1行第3个元素)。之后再通过公式(2)得到的重心确定相连节点在字符中的位置(图8中的c区域)。

(3)重复步骤(2),找到相连的节点(图9中的b节点、d节点和j节点),确定其在字符中的位置(图8中的b区域、d区域和j区域)。将这些区域根据无向图的连接关系相连,分别作连续性分析(即把图8中的a区域与c区域相连之后分别与b区域、d区域和j区域相连)。连续性分析方法:对相连的3个区域,计算中间区域像素的PBOD曲线,若PBOD曲线只有两个波峰且波峰之间的度数相距大约180°,则这3个区域为同一个笔画[24]。

(4)重复步骤(3)直到没有与之相连的节点,至此组成了一个完整的笔画(图8中的a区域、c区域、j区域、g区域、h区域组成一个完整的笔画)。

(5)返回步骤(1),继续遍历图像,找到一个仍然没有组成完整笔画的子笔画(如图8中的b区域)。

(6)图像中所有子笔画都组合成了完整的笔画(图8中的a、c、j、g、h为一个笔画,b、c、d为一个笔画,e、g、f为一个笔画,g、i为一个笔画),结束遍历。

4 实验结果

为验证本文算法的有效性,对一组汉字图像进行一系列实验。在Visual Studio 2017的平台环境下,随机选取一组不同艺术家书写的200幅楷体书法字图像作为实验对象,进行预处理、交叉区域获取和笔画组合,结果共包含   1 285个交叉区域和2 276个笔画,笔画提取正确率达到95.35%。图10为汉字“堵”的笔画提取示例。

5 结语

本文利用无向图对PBOD分割的子笔画进行排列,在笔画组合过程中只让彼此相连的子笔画进行笔画组合,与笔画分割后所有子笔画进行组合相比,提高了笔画组合的准确性,降低了笔画提取复杂度。

虽然本文算法笔画提取的准确性较高,但还需进行以下工作:本文算法目前只能对楷书这种较规范的字体进行笔画提取,而对于草书等笔画连绵、狂乱的字体在交叉区域的提取、无向图的构建和子笔画的组合上还有待完善,要解决这方面的问题很大程度上依赖汉字书写的先验知识。因此,对各种书法字体笔画的提取是今后要研究的主题。

参考文献:

[1] YU K,WU J,YUAN Z. Stroke extraction for chinese calligraphy characters[J]. Journal of Computational Information Systems, 2012,8(6):2493-2500.

[2] LAM J H M,YAM Y. Structural analysis based stroke segmentation for Chinese characters[C]. Proceedings of the IEEE Conference on Decision and Control,2009:3118-3123.

[3] LIU C L,KIM I J,JIN H K. Model-based stroke extraction and matching for handwritten chinese character recognition[J]. Pattern Recognition, 2001,34(12): 2339-2352.

[4] FAN K C,WU W H. A run-length coding based approach to stroke extraction of Chinese characters [J]. Pattern Recognition,2000,33(11):1881-1895.

[5] 李國宏,施鹏飞. 基于笔划方向特征和非对称分布的手写体汉字识别[J]. 上海交通大学学报,2005,39(12):35-41.

[6] 程立,王江晴,李波,等. 基于轮廓的汉字笔画分离算法[J]. 计算机科学,2013, 40(7):307-311.

[7] 钱自强. 基于图像处理的毛笔书法参数化辨识研究[J].  工业控制计算机,2016,29(9):124-125.

[8] 邓学雄,李京陶,李牧. 毛笔书法临帖的计算机评价[J]. 图学学报, 2014, 35(6):899-904.

[9] 李杰,彭月英,元昌安,等. 基于数学形态学细化算法的图像边缘细化[J].  计算机应用, 2012, 32(2):514-520.

[10] 吴选忠. Zhang快速并行细化算法的扩展[J].  福建工程学院学报,2006,4(1):89-92.

[11] 刘佳岩,章夏芬. 基于书写规则的书法字笔画及笔顺提取[J]. 微型机与应用, 2015, 34(15):51-54.

[12] 章夏芬,刘佳岩. 用爬虫法提取书法笔画[J]. 计算机辅助设计与图形学学报,2016,28(2):301-309.

[13] MA X,PAN Z,ZHANG F. The automatic generation of Chinese outline font based on stroke extraction[J]. Journal of Computer Science & Technology,1995,10(1):42-52.

[14] TAN C L,CAO R. A model of stroke extraction from Chinese character images[C]. International Conference on Pattern Recognition, 2000.

[15] 王偉华. 基于机器视觉的表贴芯片缺陷检测系统的研究[D]. 西安:西安建筑科技大学,2017.

[16] 张艳楠. 图像处理中的中值滤波及其改进[J]. 中国新通信, 2018,20(2):230-231.

[17] 何春. 一种基于直方图的图像二值化算法[J]. 宜宾学院学报, 2016,16(12):53-55.

[18] 杨琦. 毛笔书法中笔画的提取[D]. 青岛:山东科技大学, 2015.

[19] 陈睿,唐雁,邱玉辉. 基于笔画段分割和组合的汉字笔画提取模型[J]. 计算机科学,2003, 30(10):74-77.

[20] 周昌乐. 一种手写汉字拓扑图表示及其动态获取[J]. 计算机科学, 1996,23(5):60-62.

[21] WANG X,LIANG X,SUN L,et al. Triangular mesh based stroke segmentation for Chinese calligraphy[C]. International Conference on Document Analysis and Recognition, 2013.

[22] 朱程辉,曹敏,王建平. 基于过程神经网络的汉字特征提取方法的研究[J]. 合肥工业大学学报:自然科学版,2013(10):1203-1209.

[23] 王民,曾宝莹,要趁红,等. 中国书法的特征提取及识别[J]. 信息通信, 2015(7):19-20.

[24] SUN Y,QIAN H,XU Y. A geometric approach to stroke extraction for the Chinese calligraphy robot[C]. IEEE International Conference on Robotics & Automation,2014.

(责任编辑:杜能钢)