一种基于多尺度提取汉字关键骨架点的方法

未命名 09-22 阅读:87 评论:0


1.本发明属于计算机及汉字矢量化领域,主要关注提高汉字矢量化的质量效果和减少矢量化汉字存储空间大小。


背景技术:

2.为了提高汉字矢量化的质量效果和降低存储大小,引入汉字关键骨架点的提取问题。汉字的关键骨架点是包含汉字所有变化之处的骨架点。已有的提取汉字骨架关键点基本都是只提取了端点、交叉点和拐点。目前的研究成果尚不多,具体如下:
3.文献1:wang,c.,lian,z.,tang,y.,&xiao,j.(2013).automatic correspondence finding for chinese characters using graph matching.2013seventh international conference on image and graphics,545-550.
4.文献1给出的汉字关键骨架提取方法:生成文字的骨架后,对骨架进行修剪,删除一些短分支骨架,再在文字干净的骨架中提取骨架的端点、连接点、角点作为骨架的关键点。但是该文未探讨具体如何提取点、连接点、角点等。
5.文献2:pan,w.,lian,z.,tang,y.,&xiao,j.(2014).skeleton-guided vectorization of chinese calligraphy images.2014ieee 16th international workshop on multimedia signal processing(mmsp),1-6.
6.文献2给出的汉字关键骨架提取方法:生成文字的骨架后,进行骨架的生长和剪枝,最后将骨架中的起点、终点和转折点定位为关键骨架点。但是该文也未探讨具体如何提取起点、终点和转折点。


技术实现要素:

7.本发明目的是克服现有技术存在的上述不足,为了提高汉字矢量化的质量效果和减少存储空间大小,本发明给出采用基于多尺度提取汉字关键骨架点的方法。
8.本发明对输入单个汉字图片,进行预处理生成二值图;采用骨架提取算法提取汉字的骨架;基于聚集度提取骨架的所有端点和所有交叉点;采用小尺度过滤法提取骨架的所有折点;采用大尺度过滤法提取骨架的所有弯点;进一步提取平均笔画宽度变化的所有变宽点;将上述所有端点、交叉点、折点、弯点、以及变宽点记录下来作为该汉字的所有关键骨架点。
9.本发明的技术方案
10.一种基于多尺度提取汉字关键骨架点的方法,所述方法包括具体步骤如下:
11.第1步、输入单个汉字图片;
12.第2步、针对输入的汉字图片进行预处理生成二值图;
13.第3步、针对第2步中的二值图,采用骨架提取算法提取汉字的骨架,汉字的骨架是由全部骨架像素点(i,j)组成,其中0=<i=《(汉字图片的宽度-1),0=《j=《(汉字图片的长度-1);
14.第4步、针对第3步中的骨架,基于聚集度提取骨架的所有端点和所有交叉点;
15.第5步、针对第3步中的骨架,采用小尺度过滤法提取骨架的所有折点;
16.第6步、针对第3步中的骨架,采用大尺度过滤法提取骨架的所有弯点;
17.第7步、针对第3步中的骨架,进一步提取平均笔画宽度变化的所有变宽点;
18.第8步、将上述所有端点、交叉点、折点、弯点、以及变宽点记录下来作为该汉字的所有关键骨架点;
19.第9步、输出该汉字的所有关键骨架点,程序运行结束。
20.进一步的,第3步所述的“采用骨架提取算法提取汉字的骨架”,汉字的骨架是指汉字的基本形状,一般指汉字图像的中轴;提取汉字骨架的过程就是经过一层层的剥离,从原来的汉字中去掉一些像素,但仍要保持原来的形状,直到得到图像的骨架;骨架提取算法可采用如下:
21.第3.1步、针对汉字的二值图,依次遍历全部的骨架像素点(i,j),其中0=《i=《(汉字图片的宽度-1),0=《j=《(汉字图片的长度-1),针对骨架像素点(i,j)即p1执行第3.2步;
22.第3.2步、针对p1即骨架像素点(i,j)构建如下表格所示3*3矩阵,矩阵包含了像素p1的八邻域,值为1时是前景像素点、值为0时是背景像素点;
23.p9p2p3p8p1p4p7p6p5
24.第3.3步、执行光栅扫描并标记满足以下5个条件的所有像素点,满足如下条件的像素p1则标记为删除,条件如下:
25.(1)这是一个前景像素点(值为1);
26.(2)顺时针查看p2、p3、...、p9、p2时,从0到1的变化次数仅为1;
27.(3)p2、p3、...、p9中前景像素的个数在2个以上6个以下;
28.(4)p2、p4、p6中至少有1个值为0(即背景像素点);
29.(5)p4、p6、p8中至少有1个值为0(即背景像素点);
30.将满足条件的所有像素标为0(即背景像素点)。
31.第3.4步、执行光栅扫描并标记满足以下5个条件的所有像素,满足如下条件的像素p1则标记为删除,条件如下:
32.(1)这是一个前景像素点(值为1);
33.(2)顺时针查看p2、p3、

、p9、p2时,从0到1的变化次数仅为1;
34.(3)p2、p3、

、p9中前景像素的个数在2个以上6个以下;
35.(4)p2、p4、p8中至少有1个为0(背景像素点);
36.(5)p2、p6、p8中至少有1个为0(背景像素点);
37.第3.5步、若全部的像素点遍历完毕,则执行第3.6步;否则执行第3.1步;
38.第3.6步、在汉字二值图中删除所有标记为“删除”的像素点,剩下的输出结果即为二值图的骨架。
39.进一步的,第4步所述的“基于聚集度提取骨架的端点和交叉点”,是通过针对给定的骨架像素点来计算它的骨架像素点区域的聚集度、并进一步比较聚集度与阈值的大小来
获取端点和交叉点这两类关键骨架点;骨架像素点区域是指以该像素点为中心点、以给定的边长所围成的正方形区域,区域的边长可取值为2*radius,其中radius值为(max(汉字图片的宽度,汉字图片的长度)*0.1)/2;阈值包括最大阈值和最小阈值,最大阈值可取值为9,最小阈值可取值为6;骨架的端点和交叉点具体获取方法如下:
40.第4.1步、依次遍历全部的骨架像素点(i,j),其中0=《i=《(汉字图片的宽度-1),0=《j=《(汉字图片的长度-1),针对当前的骨架像素点(i,j)执行第4.2步;
41.第4.2步、利用公式(1)和(2)计算当前的骨架像素点(i,j)的聚集度degree
i,j
,其中i为当前骨架像素点的宽度坐标,j为当前骨架像素点的长度坐标,k为(i-radius,i+radius)范围内的全部可能值,l为(j-radius,j+radius)范围内的全部可能值;
[0042][0043]
其中,p
k,l
是像素点(k,l)处的取值,若像素点(k,l)是前景则p
k,l
为1、否则为0,即p
k,l
取值如公式(2):
[0044][0045]
第4.3步、比较像素点(i,j)的聚集度degree
i,j
和最大阈值与最小阈值的大小关系:
[0046]
如果像素点(i,j)的聚集度degree
i,j
》最大阈值,则此像素点(i,j)是交叉点,记录下该像素点(i,j)为交叉点;
[0047]
否则,如果像素点(i,j)的聚集度degree
i,j
《最小阈值,则此像素点(i,j)是端点,记录下该像素点(i,j)为端点;
[0048]
否则,此像素点(i,j)既不是端点、又不是交叉点,不用记录下来;
[0049]
第4.4步、若全部的骨架像素点遍历完毕,则执行第4.5步;否则执行第4.1步;
[0050]
第4.5步、骨架的所有端点和所有交叉点获取完毕,其中骨架的所有端点和所有交叉点都是关键骨架点。
[0051]
进一步的,第5步所述的“采用小尺度过滤法提取骨架的所有折点”,是通过在给定骨架像素点的“小区域”上获取所有骨架像素点、进一步将靠近该“小区域”边界的骨架像素点作为直线的端点、并获取该“小区域”中距离此直线最大的骨架像素点作为折点类型的关键骨架点,其中该“小区域”的宽度、长度分别为汉字图片宽度、长度的0.1倍;骨架的折点具体获取方法如下:
[0052]
第5.1步、依次遍历全部的骨架像素点(i,j),其中0=《i=《(汉字图片的宽度-1),0=<j=<(汉字图片的长度-1),针对当前的骨架像素点(i,j)执行第5.2步;
[0053]
第5.2步、计算当前的骨架像素点(i,j)的“小区域”,如图2所示,以当前的骨架像素点(i,j)为中心扩展出对应的“小区域”,“小区域”的宽度、长度分别为汉字图片宽度、长度的0.1倍;
[0054]
第5.3步、计算第5.2步的“小区域”中关键骨架点的所有“连通分量”,其中每个“连通分量”是指汉字骨架中连续不中断的几个骨架像素点组成的骨架像素点数组;并进一步
将每个“连通分量”放入到一个数组point[n]中,其中n是该“连通分量”中骨架像素点个数;进一步计算每个“连通分量”point[n]靠近“小区域”边界的数目,如果靠近“小区域”边界的数目等于2,则记录这两个边界骨架像素点为此“连通分量”的起点和结束点,并以这两个起点和结束点作为直线的两个端点,利用公式(4)(5)(6)求得直线w方程;进一步再利用公式(7)计算此“连通分量”中所有骨架像素点到直线w的距离,结果放入到数组dist[n],其中n是该“连通分量”中骨架像素点个数;
[0055]
直线w的方程为ax+by+c=0,其中:
[0056]
a=point[n-1].y-point[0].y
ꢀꢀꢀ
(4)
[0057]
b=point[0].x-point[n一1].x
ꢀꢀꢀ
(5)
[0058]
c=point[n-1].x
×
point[0].y-point[0].x
×
point[n-1].y
ꢀꢀ
(6)
[0059]
像素点point[i]到直线w距离为,其中0<=i<n:
[0060][0061]
第5.4步、获取dist[n]中最大值的数组索引号z,即dist[z]为最大值,其中n是该“连通分量”中骨架像素点个数;进一步比较dist[z]与“距离阈值”的大小关系,如果dist[z]>距离阈值,则dist[z]所对应的骨架像素点point[z]为折点,记录下该骨架像素点point[z]为折点,其中距离阈值可取值为max(“小区域”宽度,“小区域”长度)*0.1,本步骤已将当前“小区域”中所有折点提取了出来;
[0062]
第5.5步、按照给定的步长移动第5.2步中的“小区域”,步长大小设置为“小区域”宽高的四分之一;若遍历了全部骨架像素点,则执行第5.6步;否则执行第5.2步;
[0063]
第5.6步、骨架的所有折点获取完毕,其中骨架的所有折点都是关键骨架点。
[0064]
进一步的,第6步所述的“采用大尺度过滤法提取骨架的所有弯点”,是通过在给定骨架像素点的“大区域”上获取所有骨架像素点、进一步将靠近该“大区域”边界的骨架像素点作为直线的端点,并获取该“大区域”中距离此直线最大的骨架像素点作为弯点类型的关键骨架点,其中该“大区域”的宽度、长度分别为汉字图片宽度、长度0.2倍;骨架的弯点具体获取方法如下:
[0065]
第6.1步、依次遍历全部的骨架像素点(i,j),其中0=《i=《(汉字图片的宽度-1),0=《j=《(汉字图片的长度-1),针对当前的骨架像素点(i,j)执行第6.2步;
[0066]
第6.2步、计算当前的骨架像素点(i,j)的“大区域”,如图3所示,以当前的骨架像素点(i,j)为中心扩展出对应的“大区域”,“大区域”的宽度、长度分别为汉字图片宽度、长度0.2倍;
[0067]
第6.3步、计算第6.2步的“大区域”中关键骨架点的所有“连通分量”,并将每个“连通分量”放入到一个数组point[n]中,其中n是该“连通分量”中骨架像素点个数;计算每个“连通分量”point[n]靠近“大区域”边界的数目,如果靠近“大区域”边界的数目等于2,则记录这两个边界骨架像素点为此连通分量的起点和结束点,以这两个起点和结束点作为直线的两个端点,并且利用公式(4)(5)(6)求得直线w方程;进一步再利用公式(7)计算此连通分量中所有骨架像素点到直线w的距离,结果放入数组dist[n],其中n是该“连通分量”中骨架像素点个数;
[0068]
第6.4步、获取dist[n]中最大值的数组索引号t,即dist[t]为最大值,其中n是该“连通分量”中骨架像素点个数;进一步比较dist[t]与“距离阈值”的大小,如果dist[t]》距离阈值,则dist[t]所对应的骨架像素点point[t]为弯点,记录下该骨架像素点point[t]为弯点,其中距离阈值可取值为max(“大区域”宽度,“大区域”长度)*0.1,本步骤已将当前“大区域”中所有弯点提取了出来;
[0069]
第6.5步、按照给定的步长移动第6.2步中的“大区域”,步长大小设置为“大区域”宽高的四分之一;若遍历了全部骨架像素点,则执行第6.6步;否则执行第6.2步;
[0070]
第6.6步、骨架的所有弯点获取完毕,其中骨架的所有弯点都是关键骨架点。
[0071]
进一步的,第7步所述的“提取平均笔画宽度变化的所有变宽点”,是依据公式(8)提取相较于附近区域笔画平均宽度变化较大的关键骨架点即变宽点,其中sw为给定区域中笔画宽度的集合,sw
nxt
为给定区域的相邻区域的笔画宽度的集合,avg()为笔画宽度的平均值;骨架的变宽点具体获取方法如下:
[0072]
avg(sw)-avg(sw
nxt
)>t
ꢀꢀꢀ
(8)
[0073]
第7.1步、针对第2步中的汉字二值图计算出对应的汉字笔画宽度图,汉字笔画宽度图是一个和原图大小相同的图像,但是每个像素的值为此处笔画宽度的大小,背景部分的像素的值为-1;
[0074]
第7.2步、根据第7.1步中的汉字笔画宽度图,获取所有骨架像素点处的笔画宽度;
[0075]
第7.3步、依次遍历第3步中汉字骨架的全部骨架像素点(i,j),其中0=<i=<(汉字图片的宽度-1),0=<j=《(汉字图片的长度-1),针对当前的骨架像素点(i,j)执行第7.4步;
[0076]
第7.4步、计算当前的骨架像素点(i,j)的区域,区域的宽度、长度分别为汉字图片宽度、长度的0.1倍;
[0077]
第7.5步、在第7.4步的区域中,计算该区域内各个骨架像素点处对应原图的笔画宽度,根据该区域内各个骨架像素点处的笔画宽度计算该区域的平均笔画宽度avg(sw),进一步比较它与相邻区域的平均笔画宽度avg(sw
nxt
)的差值;如果大于宽度阈值,则两个区域中间的临界骨架像素点被认为是变宽点,其中宽度阈值可取为此处笔画宽度的0.2倍;
[0078]
第7.6步、若遍历完全部骨架像素点,则执行第7.7步;否则执行第7.3步;
[0079]
第7.7步、骨架的所有变宽点获取完毕,其中骨架的所有变宽点都是关键骨架点。
[0080]
本发明所涉及的具体内容及所述术语的含义是:
[0081]
(1)汉字骨架:汉字的骨架是指汉字的基本形状,一般指汉字图像的中轴。提取汉字骨架的过程就是经过一层层的剥离,从原来的汉字中去掉一些像素,但仍要保持原来的形状,直到得到图像的骨架。
[0082]
(2)像素点就是像素,二者含义相同。骨架像素点就是骨架点,二者含义相同。
[0083]
(3)汉字关键骨架点:汉字的关键骨架点是指包含汉字所有变化之处的骨架点。目前已有文章提取的关键骨架点是:端点、交叉点和拐点。本发明基于汉字笔画类型和笔画宽度提取的汉字关键骨架点包括:骨架的端点、交叉点、弯点、折点、平均笔画宽度变化点即变宽点。
[0084]
(4)端点即为每个笔画开始和结束的点。
[0085]
(5)交叉点即为几个笔画交叉之处。
[0086]
(6)折点是指拐弯之处角度比较尖锐的地方,如“折”、“勾”等笔画折笔之处。
[0087]
(7)弯点是指拐弯之处不那么尖锐的地方,例如“撇”、“捺”等笔画的弯曲之处。
[0088]
(8)变宽点是指如果当前区域平均笔画宽度相较于相邻区域平均笔画宽度变化较大,则两个区域中间的临界骨架点被认为是变宽点。
[0089]
(9)聚集度:给每个前景像素点定义一个区域,这个区域即为以此像素点为中心、边长为二倍的radius的一个正方形区域,计算此区域内的前景像素点个数,此个数即为像素点的聚集度。
[0090]
(10)小尺度过滤法:区域大小初始化一般设置为整体图像宽高的0.2倍,通过遍历图中所有前景像素点的区域,过滤汉字所有折点的方法。
[0091]
(11)大尺度过滤法:区域大小初始化一般设置为整体图像宽高的0.1倍,通过遍历图中所有前景像素点的区域,过滤汉字所有弯点的方法。
[0092]
(12)笔画宽度图是一个和汉字原图大小相同的图像,但是每个像素的值为此处笔画宽度的大小,背景部分的像素为-1。
[0093]
(13)连通分量是指汉字骨架图中连续不中断的几个骨架像素点组成的骨架像素点数组。
[0094]
本发明的优点和积极效果:
[0095]
本发明能够有效提高汉字矢量化的质量效果和减少矢量化汉字存储空间大小。
[0096]
本发明采用基于多尺度提取汉字关键骨架点,分别获取骨架的端点、交叉点、弯点、折点、平均笔画宽度变化点即变宽点等汉字关键骨架点,从而一方面确保汉字矢量化的高质量,另一方面则有效地减少矢量化汉字的存储空间大小。
附图说明
[0097]
图1是本发明中基于多尺度提取汉字关键骨架点的方法流程图。
[0098]
图2是本发明中给定骨架像素点的“小区域”示意图。
[0099]
图3是本发明中给定骨架像素点的“大区域”示意图。
[0100]
图4是本发明中汉字“冬”的二值图。
[0101]
图5是本发明中汉字“冬”的骨架图。
[0102]
图6是本发明中汉字“冬”的骨架中提取到的所有端点和所有交叉点示意图。
[0103]
图7是本发明中汉字“冬”的骨架中提取到的所有折点示意图。
[0104]
图8是本发明中汉字“冬”的骨架中提取到的所有弯点示意图。
[0105]
图9是本发明中汉字“冬”的骨架中提取到的所有平均笔画宽度变化的变宽点示意图。
[0106]
图10是本发明中汉字“冬”的骨架中提取到的所有关键骨架点示意图。
[0107]
图11是本发明中端点提取实例示意图。
[0108]
图12是本发明中交叉点提取实例示意图。
[0109]
图13是本发明中变宽点提取实例示意图。
具体实施方式
[0110]
本发明提供了一种基于多尺度提取汉字关键骨架点的方法,具体方法步骤如下:
[0111]
第1步、输入单个汉字图片;
[0112]
第2步、针对输入的汉字图片进行预处理生成二值图;
[0113]
第3步、针对第2步中的二值图,采用骨架提取算法提取汉字的骨架,汉字的骨架是由全部骨架像素点(i,j)组成,其中0=《i=《(汉字图片的宽度-1),0=《j=《(汉字图片的长度-1);
[0114]
第4步、针对第3步中的骨架,基于聚集度提取骨架的所有端点和所有交叉点;
[0115]
第5步、针对第3步中的骨架,采用小尺度过滤法提取骨架的所有折点;
[0116]
第6步、针对第3步中的骨架,采用大尺度过滤法提取骨架的所有弯点;
[0117]
第7步、针对第3步中的骨架,进一步提取平均笔画宽度变化的所有变宽点;
[0118]
第8步、将上述所有端点、交叉点、折点、弯点、以及变宽点记录下来作为该汉字的所有关键骨架点;
[0119]
第9步、输出该汉字的所有关键骨架点,程序运行结束。
[0120]
为能进一步了解本发明的技术内容、特点及功效,兹列举以下应用实例,并配合附图详细说明如下:
[0121]
一种基于多尺度提取汉字关键骨架点的方法,如图1所示,所述方法包括具体步骤如下:
[0122]
第1步、输入单个汉字图片;
[0123]
第2步、针对输入的汉字图片进行预处理生成二值图;
[0124]
输入汉字“冬”的原始图片,通过使用opencv中的cvtcolor库函数将原图转为灰度图,进一步对灰度图进行非局部去噪,并进一步将去噪后的图片使用opencv中的threshold库函数将图片二值化,生成图片的二值图,如图4所示。
[0125]
第3步、针对第2步中的二值图,采用骨架提取算法提取汉字的骨架,汉字的骨架是由全部骨架像素点(i,j)组成,其中0=《i=《(汉字图片的宽度-1),0=《j=《(汉字图片的长度-1);
[0126]
如图5所示,根据汉字“冬”的二值图生成汉字“冬”的骨架图,其中图5中的白色线段为汉字骨架。
[0127]
第4步、针对第3步中的骨架,基于聚集度提取骨架的所有端点和所有交叉点;
[0128]
如图6所示,从汉字“冬”的骨架中提取到的所有端点和所有交叉点。
[0129]
第5步、针对第3步中的骨架,采用小尺度过滤法提取骨架的所有折点;
[0130]
如图7所示,从汉字“冬”的骨架中提取到的所有折点类型的关键骨架点。
[0131]
第6步、针对第3步中的骨架,采用大尺度过滤法提取骨架的所有弯点;
[0132]
如图8所示,从汉字“冬”的骨架中提取到的所有弯点类型的关键骨架点。
[0133]
第7步、针对第3步中的骨架,进一步提取平均笔画宽度变化的所有变宽点;
[0134]
如图9所示,从汉字“冬”的骨架中提取到的所有变宽点。
[0135]
第8步、将上述所有端点、交叉点、折点、弯点、以及变宽点记录下来作为该汉字的所有关键骨架点;
[0136]
如图10所示,从汉字“冬”的骨架中提取到所有关键骨架点,关键骨架点包括端点、交叉点、折点、弯点、以及变宽点等类型。
[0137]
第9步、输出该汉字的所有关键骨架点,程序运行结束。
[0138]
按照本发明提供的提取方法,第3步所述的“采用骨架提取算法提取汉字的骨架”,汉字的骨架是指汉字的基本形状,一般指汉字图像的中轴;提取汉字骨架的过程就是经过一层层的剥离,从原来的汉字中去掉一些像素,但仍要保持原来的形状,直到得到图像的骨架;骨架提取算法可采用如下:
[0139]
第3.1步、针对汉字的二值图,依次遍历全部的像素点(i,j),其中0=<i=<(汉字图片的宽度-1),0=<j=《(汉字图片的长度-1),针对像素点(i,j)即p1执行第3.2步;
[0140]
第3.2步、针对p1即像素点(i,j)构建如下3*3矩阵,如下表1所示,矩阵包含了像素p1的八邻域,值为1时是前景像素、值为0时是背景像素;
[0141]
表1
[0142]
p9p2p3p8p1p4p7p6p5
[0143]
例如,表格2,表格3分别是不同的像素点的3*3矩阵:
[0144]
表2
[0145]
001011000
[0146]
表3
[0147]
001011100
[0148]
第3.3步、执行光栅扫描并标记满足以下5个条件的所有像素,满足如下条件的像素p1则标记为删除,条件如下:
[0149]
(1)这是一个前景像素点(值为1);
[0150]
(2)顺时针查看p2、p3、

、p9、p2时,从0到1的变化次数仅为1;
[0151]
(3)p2、p3、

、p9中前景像素的个数在2个以上6个以下;
[0152]
(4)p2、p4、p6中至少有1个值为0(背景像素点);
[0153]
(5)p4、p6、p8中至少有1个值为0(背景像素点);
[0154]
将满足条件的所有像素标为0(即为背景像素点)。
[0155]
第3.4步、执行光栅扫描并标记满足以下5个条件的所有像素,满足如下条件的像素p1则标记为删除,条件如下:
[0156]
(1)这是一个前景像素点(1);
[0157]
(2)顺时针查看p2、p3、

、p9、p2时,从0到1的变化次数仅为1;
[0158]
(3)p2、p3、

、p9中前景像素的个数在2个以上6个以下;
[0159]
(4)p2、p4、p8中至少有1个为0(背景像素点);
[0160]
(5)p2、p6、p8中至少有1个为0(背景像素点);
[0161]
第3.5步、若全部的像素点遍历完毕,则执行第3.6步;否则执行第3.1步;
[0162]
第3.6步、在汉字二值图中删除所有标记为“删除”的像素点,剩下的输出结果即为
二值图的骨架。
[0163]
针对如上表格2、表格3,表格2中p1位置的像素点满足第3.3步或第3.4步,则将其标记删除;表格3中p1位置的像素点既不满足第3.3步也不满足第3.4步,则不被标记删除。
[0164]
按照本发明提供的提取方法,第4步所述的“基于聚集度提取骨架的端点和交叉点”,是通过针对给定的骨架像素点来计算它的骨架像素点区域的聚集度、并进一步比较聚集度与阈值的大小来获取端点和交叉点这两类关键骨架点;骨架像素点区域是指以该像素点为中心点、以给定的边长所围成的正方形区域,区域的边长可取值为2*radius,其中radius值为(max(汉字图片的宽度,汉字图片的长度)*0.1)/2;阈值包括最大阈值和最小阈值,最大阈值可取值为9,最小阈值可取值为6;骨架的端点和交叉点具体获取方法如下:
[0165]
第4.1步、依次遍历全部的骨架像素点(i,j),其中0=《i=《(汉字图片的宽度-1),0=《j=《(汉字图片的长度-1),针对当前的骨架像素点(i,j)执行第4.2步;
[0166]
第4.2步、利用公式(1)和(2)计算当前的骨架像素点(i,j)的聚集度degree
i,j
,其中i为当前骨架像素点的宽度坐标,j为当前骨架像素点的长度坐标,k为(i-radius,i+radius)范围内的全部可能值,l为(j-radius,j+radius)范围内的全部可能值;
[0167][0168]
其中,p
k,l
是像素点(k,l)处的取值,若像素点(k,l)是前景则p
k,l
为1、否则为0,即p
k,l
取值如公式(2):
[0169][0170]
第4.3步、比较像素点(i,j)的聚集度degree
i,j
和最大阈值与最小阈值的大小关系:
[0171]
如果像素点(i,j)的聚集度degree
i,j
》最大阈值,则此像素点(i,j)是交叉点,记录下该像素点(i,j)为交叉点;
[0172]
否则,如果像素点(i,j)的聚集度degree
i,j
《最小阈值,则此像素点(i,j)是端点,记录下该像素点(i,j)为端点;
[0173]
否则,此像素点(i,j)既不是端点、又不是交叉点,不用记录下来;
[0174]
第4.4步、若全部的骨架像素点遍历完毕,则执行第4.5步;否则执行第4.1步;
[0175]
第4.5步、骨架的所有端点和所有交叉点获取完毕,其中骨架的所有端点和所有交叉点都是关键骨架点。
[0176]
如图11所示,当前区域中的聚集度degree
i,j
为4,小于最小阈值,则骨架像素点(i,j)记录为端点;
[0177]
如图12所示,当前区域中的聚集度degree
i,j
为13,大于最大阈值,则骨架像素点(i,j)记录为交叉点;
[0178]
按照本发明提供的提取方法,第5步所述的“采用小尺度过滤法提取骨架的所有折点”,是通过在给定骨架像素点的“小区域”上获取所有骨架像素点、进一步将靠近该“小区域”边界的骨架像素点作为直线的端点、并获取该“小区域”中距离此直线最大的骨架像素
点作为折点类型的关键骨架点,其中该“小区域”的宽度、长度分别为汉字图片宽度、长度的0.1倍;
[0179]
如图2所示,图为给定骨架像素点的“小区域”。
[0180]
骨架的折点具体获取方法如下:
[0181]
第5.1步、依次遍历全部的骨架像素点(i,j),其中0=<i=<(汉字图片的宽度-1),0=<j=《(汉字图片的长度-1),针对当前的骨架像素点(i,j)执行第5.2步;
[0182]
第5.2步、计算当前的骨架像素点(i,j)的“小区域”,如图2所示,以当前的骨架像素点(i,j)为中心扩展出对应的“小区域”,“小区域”的宽度、长度分别为汉字图片宽度、长度的0.1倍;
[0183]
第5.3步、计算第5.2步的“小区域”中关键骨架点的所有“连通分量”,其中每个“连通分量”是指汉字骨架中连续不中断的几个骨架像素点组成的骨架像素点数组;并进一步将每个“连通分量”放入到一个数组point[n]中,其中n是该“连通分量”中骨架像素点个数;进一步计算每个“连通分量”point[n]靠近“小区域”边界的数目,如果靠近“小区域”边界的数目等于2,则记录这两个边界骨架像素点为此“连通分量”的起点和结束点,并以这两个起点和结束点作为直线的两个端点,利用公式(4)(5)(6)求得直线w方程;进一步再利用公式(7)计算此“连通分量”中所有骨架像素点到直线w的距离,结果放入到数组dist[n],其中n是该“连通分量”中骨架像素点个数;
[0184]
直线w的方程为ax+by+c=0,其中:
[0185]
a=point[n-1].y-point[0].y
ꢀꢀꢀ
(4)
[0186]
b=point[0].x-point[n-1].x
ꢀꢀꢀ
(5)
[0187]
c=point[n-1].x
×
point[0].y—point[0].x
×
point[n-1].y
ꢀꢀ
(6)
[0188]
像素点point[i]到直线w距离为,其中0《=i《n:
[0189][0190]
第5.4步、获取dist[n]中最大值的数组索引号z,即dist[z]为最大值,其中n是该“连通分量”中骨架像素点个数;进一步比较dist[z]与“距离阈值”的大小关系,如果dist[z]>距离阈值,则dist[z]所对应的骨架像素点point[z]为折点,记录下该骨架像素点point[z]为折点,其中距离阈值可取值为max(“小区域”宽度,“小区域”长度)*0.1,本步骤已将当前“小区域”中所有折点提取了出来;
[0191]
第5.5步、按照给定的步长移动第5.2步中的“小区域”,步长大小设置为“小区域”宽高的四分之一;若遍历了全部骨架像素点,则执行第5.6步;否则执行第5.2步;
[0192]
第5.6步、骨架的所有折点获取完毕,其中骨架的所有折点都是关键骨架点。
[0193]
如图2中区域为以当前骨架像素点(i,j)为中心的小区域,图中连通分量point[n](n=7)存储了从point[0]到point[6]的骨架像素点,其中距离直线w最远的点point[3]的距离大于距离阈值,则记录该骨架点(i,j)为折点。
[0194]
按照本发明提供的提取方法,所述的,第6步所述的“采用大尺度过滤法提取骨架的所有弯点”,是通过在给定骨架像素点的“大区域”上获取所有骨架像素点、进一步将靠近该“大区域”边界的骨架像素点作为直线的端点,并获取该“大区域”中距离此直线最大的骨
架像素点作为弯点类型的关键骨架点,其中该“大区域”的宽度、长度分别为汉字图片宽度、长度0.2倍;
[0195]
如图3所示,图为给定骨架像素点的“大区域”。
[0196]
骨架的弯点具体获取方法如下:
[0197]
第6.1步、依次遍历全部的骨架像素点(i,j),其中0=《i=《(汉字图片的宽度-1),0=《j=《(汉字图片的长度-1),针对当前的骨架像素点(i,j)执行第6.2步;
[0198]
第6.2步、计算当前的骨架像素点(i,j)的“大区域”,如图3所示,以当前的骨架像素点(i,j)为中心扩展出对应的“大区域”,“大区域”的宽度、长度分别为汉字图片宽度、长度0.2倍;
[0199]
第6.3步、计算第6.2步的“大区域”中关键骨架点的所有“连通分量”,并将每个“连通分量”放入到一个数组point[n]中,其中n是该“连通分量”中骨架像素点个数;计算每个“连通分量”point[n]靠近“大区域”边界的数目,如果靠近“大区域”边界的数目等于2,则记录这两个边界骨架像素点为此连通分量的起点和结束点,以这两个起点和结束点作为直线的两个端点,并且利用公式(4)(5)(6)求得直线w方程;进一步再利用公式(7)计算此连通分量中所有骨架像素点到直线w的距离,结果放入数组dist[n],其中n是该“连通分量”中骨架像素点个数;
[0200]
第6.4步、获取dist[n]中最大值的数组索引号t,即dist[t]为最大值,其中n是该“连通分量”中骨架像素点个数;进一步比较dist[t]与“距离阈值”的大小,如果dist[t]》距离阈值,则dist[t]所对应的骨架像素点point[t]为弯点,记录下该骨架像素点point[t]为弯点,其中距离阈值可取值为max(“大区域”宽度,“大区域”长度)*0.1,本步骤已将当前“大区域”中所有弯点提取了出来;
[0201]
第6.5步、按照给定的步长移动第6.2步中的“大区域”,步长大小设置为“大区域”宽高的四分之一;若遍历了全部骨架像素点,则执行第6.6步;否则执行第6.2步;
[0202]
第6.6步、骨架的所有弯点获取完毕,其中骨架的所有弯点都是关键骨架点。
[0203]
如图3中区域为以当前骨架像素点(i,j)为中心的大区域,图中连通分量point[n](n=15)存储了从point[0]到point[14]的骨架像素点,其中距离直线w最远的点point[7]的距离大于距离阈值,则记录该骨架点(i,j)为弯点。
[0204]
按照本发明提供的提取方法,所述的,第7步所述的“提取平均笔画宽度变化的所有变宽点”,是依据公式(8)提取相较于附近区域笔画平均宽度变化较大的关键骨架点即变宽点,其中sw为给定区域中笔画宽度的集合,sw
nxt
为给定区域的相邻区域的笔画宽度的集合,avg()为笔画宽度的平均值;骨架的变宽点具体获取方法如下:
[0205]
avg(sw)-avg(sw
nxt
)>t
ꢀꢀꢀ
(8)
[0206]
第7.1步、针对第2步中的汉字二值图计算出对应的汉字笔画宽度图,汉字笔画宽度图是一个和原图大小相同的图像,但是每个像素的值为此处笔画宽度的大小,背景部分的像素的值为-1;
[0207]
第7.2步、根据第7.1步中的汉字笔画宽度图,获取所有骨架像素点处的笔画宽度;
[0208]
第7.3步、依次遍历第3步中汉字骨架的全部骨架像素点(i,j),其中0=<i=<(汉字图片的宽度-1),0=<j=<(汉字图片的长度-1),针对当前的骨架像素点(i,j)执行第7.4步;
[0209]
第7.4步、计算当前的骨架像素点(i,j)的区域,区域的宽度、长度分别为汉字图片宽度、长度的0.1倍;
[0210]
第7.5步、在第7.4步的区域中,计算该区域内各个骨架像素点处对应原图的笔画宽度,根据该区域内各个骨架像素点处的笔画宽度计算该区域的平均笔画宽度avg(sw),进一步比较它与相邻区域的平均笔画宽度avg(sw
nxt
)的差值;如果大于宽度阈值,则两个区域中间的临界骨架像素点被认为是变宽点,其中宽度阈值可取为此处笔画宽度的0.2倍;
[0211]
第7.6步、若遍历完全部骨架像素点,则执行第7.7步;否则执行第7.3步;
[0212]
第7.7步、骨架的所有变宽点获取完毕,其中骨架的所有变宽点都是关键骨架点。
[0213]
如图13所示,“区域1”相较于附近区域“区域2”的平均笔画宽度变化大于宽度区域,所以中间临界骨架像素点被提取为变宽点。
[0214]
考虑到在此公开的对本发明的描述和特例的实施例,本发明的其他实施例对于本领域的技术人员来说是显而意见的。这些说明和实施例仅作为例子来考虑,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

技术特征:
1.一种基于多尺度提取汉字关键骨架点的方法,其特征在于,所述方法包括具体步骤如下:第1步、输入单个汉字图片;第2步、针对输入的汉字图片进行预处理生成二值图;第3步、针对第2步中的二值图,采用骨架提取算法提取汉字的骨架,汉字的骨架是由全部骨架像素点(i,j)组成,其中0=<i=<(汉字图片的宽度-1),0=<j=<(汉字图片的长度-1);第4步、针对第3步中的骨架,基于聚集度提取骨架的所有端点和所有交叉点;第5步、针对第3步中的骨架,采用小尺度过滤法提取骨架的所有折点;第6步、针对第3步中的骨架,采用大尺度过滤法提取骨架的所有弯点;第7步、针对第3步中的骨架,进一步提取平均笔画宽度变化的所有变宽点;第8步、将上述所有端点、交叉点、折点、弯点、以及变宽点记录下来作为该汉字的所有关键骨架点;第9步、输出该汉字的所有关键骨架点,程序运行结束。2.根据权利要求1所述的方法,其特征在于,第4步所述的“基于聚集度提取骨架的端点和交叉点”,是通过针对给定的骨架像素点来计算它的骨架像素点区域的聚集度、并进一步比较聚集度与阈值的大小来获取端点和交叉点这两类关键骨架点;骨架像素点区域是指以该像素点为中心点、以给定的边长所围成的正方形区域,区域的边长可取值为2*radius,其中radius值为(max(汉字图片的宽度,汉字图片的长度)*0.1)/2;阈值包括最大阈值和最小阈值,最大阈值可取值为9,最小阈值可取值为6;骨架的端点和交叉点具体获取方法如下:第4.1步、依次遍历全部的骨架像素点(i,j),其中0=<i=<(汉字图片的宽度-1),0=<j=<(汉字图片的长度-1),针对当前的骨架像素点(i,j)执行第4.2步;第4.2步、利用公式(1)和(2)计算当前的骨架像素点(i,j)的聚集度degree
i,j
,其中i为当前骨架像素点的宽度坐标,j为当前骨架像素点的长度坐标,k为(i-radius,i+radius)范围内的全部可能值,l为(j-radius,j+radius)范围内的全部可能值;其中,p
k,l
是像素点(k,l)处的取值,若像素点(k,l)是前景则p
k,l
为1、否则为0,即p
k,l
取值如公式(2):第4.3步、比较像素点(i,j)的聚集度degree
i,j
和最大阈值与最小阈值的大小关系:如果像素点(i,j)的聚集度degree
i,j
>最大阈值,则此像素点(i,j)是交叉点,记录下该像素点(i,j)为交叉点;否则,如果像素点(i,j)的聚集度degree
i,j
<最小阈值,则此像素点(i,j)是端点,记录下该像素点(i,j)为端点;否则,此像素点(i,j)既不是端点、又不是交叉点,不用记录下来;第4.4步、若全部的骨架像素点遍历完毕,则执行第4.5步;否则执行第4.1步;
第4.5步、骨架的所有端点和所有交叉点获取完毕,其中骨架的所有端点和所有交叉点都是关键骨架点。3.根据权利要求1所述的方法,其特征在于,第5步所述的“采用小尺度过滤法提取骨架的所有折点”,是通过在给定骨架像素点的“小区域”上获取所有骨架像素点、进一步将靠近该“小区域”边界的骨架像素点作为直线的端点、并获取该“小区域”中距离此直线最大的骨架像素点作为折点类型的关键骨架点,其中该“小区域”的宽度、长度分别为汉字图片宽度、长度的0.1倍;骨架的折点具体获取方法如下:第5.1步、依次遍历全部的骨架像素点(i,j),其中0=<i=<(汉字图片的宽度-1),0=<j=<(汉字图片的长度-1),针对当前的骨架像素点(i,j)执行第5.2步;第5.2步、计算当前的骨架像素点(i,j)的“小区域”,以当前的骨架像素点(i,j)为中心扩展出对应的“小区域”,“小区域”的宽度、长度分别为汉字图片宽度、长度的0.1倍;第5.3步、计算第5.2步的“小区域”中关键骨架点的所有“连通分量”,其中每个“连通分量”是指汉字骨架中连续不中断的几个骨架像素点组成的骨架像素点数组;并进一步将每个“连通分量”放入到一个数组point[n]中,其中n是该“连通分量”中骨架像素点个数;进一步计算每个“连通分量”point[n]靠近“小区域”边界的数目,如果靠近“小区域”边界的数目等于2,则记录这两个边界骨架像素点为此“连通分量”的起点和结束点,并以这两个起点和结束点作为直线的两个端点,利用公式(4)(5)(6)求得直线w方程;进一步再利用公式(7)计算此“连通分量”中所有骨架像素点到直线w的距离,结果放入到数组dist[n],其中n是该“连通分量”中骨架像素点个数;直线w的方程为ax+by+c=0,其中:a=point[n-1].y-point[0].y
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(4)b=point[0].x-point[n-1].x(5)c=point[n-1].x
×
point[0].y-point[0].x
×
point[n-1].y(6)像素点point[i]到直线w距离为,其中0<=i<n:第5.4步、获取dist[n]中最大值的数组索引号z,即dist[z]为最大值,其中n是该“连通分量”中骨架像素点个数;进一步比较dist[z]与“距离阈值”的大小关系,如果dist[z]>距离阈值,则dist[z]所对应的骨架像素点point[z]为折点,记录下该骨架像素点point[z]为折点,其中距离阈值可取值为max(“小区域”宽度,“小区域”长度)*0.1,本步骤已将当前“小区域”中所有折点提取了出来;第5.5步、按照给定的步长移动第5.2步中的“小区域”,步长大小设置为“小区域”宽高的四分之一;若遍历了全部骨架像素点,则执行第5.6步;否则执行第5.2步;第5.6步、骨架的所有折点获取完毕,其中骨架的所有折点都是关键骨架点。4.根据权利要求1、3所述的方法,其特征在于,第6步所述的“采用大尺度过滤法提取骨架的所有弯点”,是通过在给定骨架像素点的“大区域”上获取所有骨架像素点、进一步将靠近该“大区域”边界的骨架像素点作为直线的端点,并获取该“大区域”中距离此直线最大的骨架像素点作为弯点类型的关键骨架点,其中该“大区域”的宽度、长度分别为汉字图片宽
度、长度0.2倍;骨架的弯点具体获取方法如下:第6.1步、依次遍历全部的骨架像素点(i,j),其中0=<i=<(汉字图片的宽度-1),0=<j=<(汉字图片的长度-1),针对当前的骨架像素点(i,j)执行第6.2步;第6.2步、计算当前的骨架像素点(i,j)的“大区域”,以当前的骨架像素点(i,j)为中心扩展出对应的“大区域”,“大区域”的宽度、长度分别为汉字图片宽度、长度0.2倍;第6.3步、计算第6.2步的“大区域”中关键骨架点的所有“连通分量”,并将每个“连通分量”放入到一个数组point[n]中,其中n是该“连通分量”中骨架像素点个数;计算每个“连通分量”point[n]靠近“大区域”边界的数目,如果靠近“大区域”边界的数目等于2,则记录这两个边界骨架像素点为此连通分量的起点和结束点,以这两个起点和结束点作为直线的两个端点,并且利用公式(4)(5)(6)求得直线w方程;进一步再利用公式(7)计算此连通分量中所有骨架像素点到直线w的距离,结果放入数组dist[n],其中n是该“连通分量”中骨架像素点个数;第6.4步、获取dist[n]中最大值的数组索引号t,即dist[t]为最大值,其中n是该“连通分量”中骨架像素点个数;进一步比较dist[t]与“距离阈值”的大小,如果dist[t]>距离阈值,则dist[t]所对应的骨架像素点point[t]为弯点,记录下该骨架像素点point[t]为弯点,其中距离阈值可取值为max(“大区域”宽度,“大区域”长度)*0.1,本步骤已将当前“大区域”中所有弯点提取了出来;第6.5步、按照给定的步长移动第6.2步中的“大区域”,步长大小设置为“大区域”宽高的四分之一;若遍历了全部骨架像素点,则执行第6.6步;否则执行第6.2步;第6.6步、骨架的所有弯点获取完毕,其中骨架的所有弯点都是关键骨架点。5.根据权利要求1所述的方法,其特征在于,第7步所述的“提取平均笔画宽度变化的所有变宽点”,是依据公式(8)提取相较于附近区域笔画平均宽度变化较大的关键骨架点即变宽点,其中sw为给定区域中笔画宽度的集合,sw
nxt
为给定区域的相邻区域的笔画宽度的集合,avg()为笔画宽度的平均值;骨架的变宽点具体获取方法如下:avg(sw)-avg(sw
nxt
)>t
ꢀꢀꢀꢀꢀ
(8)第7.1步、针对第2步中的汉字二值图计算出对应的汉字笔画宽度图,汉字笔画宽度图是一个和原图大小相同的图像,但是每个像素的值为此处笔画宽度的大小,背景部分的像素的值为-1;第7.2步、根据第7.1步中的汉字笔画宽度图,获取所有骨架像素点处的笔画宽度;第7.3步、依次遍历第3步中汉字骨架的全部骨架像素点(i,j),其中0=<i=<(汉字图片的宽度-1),0=<j=<(汉字图片的长度-1),针对当前的骨架像素点(i,j)执行第7.4步;第7.4步、计算当前的骨架像素点(i,j)的区域,区域的宽度、长度分别为汉字图片宽度、长度的0.1倍;第7.5步、在第7.4步的区域中,计算该区域内各个骨架像素点处对应原图的笔画宽度,根据该区域内各个骨架像素点处的笔画宽度计算该区域的平均笔画宽度avg(sw),进一步比较它与相邻区域的平均笔画宽度avg(sw
nxt
)的差值;如果大于宽度阈值,则两个区域中间的临界骨架像素点被认为是变宽点,其中宽度阈值可取为此处笔画宽度的0.2倍;第7.6步、若遍历完全部骨架像素点,则执行第7.7步;否则执行第7.3步;第7.7步、骨架的所有变宽点获取完毕,其中骨架的所有变宽点都是关键骨架点。

技术总结
本发明公开了一种基于多尺度提取汉字关键骨架点的方法,属于计算机及汉字矢量化领域。基于多尺度提取汉字关键骨架点的方法包括:输入单个汉字图片,进行预处理生成二值图;采用骨架提取算法提取汉字的骨架;基于聚集度提取骨架的所有端点和所有交叉点;采用小尺度过滤法提取骨架的所有折点;采用大尺度过滤法提取骨架的所有弯点;进一步提取平均笔画宽度变化的所有变宽点;将上述所有端点、交叉点、折点、弯点、以及变宽点记录下来作为该汉字的所有关键骨架点。本发明能够有效的提取汉字所有变化之处的关键骨架点、有效减少非关键的骨架点数目,从而在确保汉字矢量化高质量的前提下有效减少矢量化汉字的存储空间大小。有效减少矢量化汉字的存储空间大小。有效减少矢量化汉字的存储空间大小。


技术研发人员:李旭东 赵彩云
受保护的技术使用者:南开大学
技术研发日:2023.07.10
技术公布日:2023/9/20
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐