手写体字符细化算法的研究
2015-06-02韩抒真程杰柳青
韩抒真 程杰 柳青
摘要:字符细化是手写体识别预处理中的关键技术,细化结果的好坏直接关系到识别率的高低。由于手写字符的多样性和随意性,目前没有统一的细化算法,因此细化算法的研究受到越来越多学者的关注。该文以非粘连字符作为研究对象,对基于模板的细化算法进行研究。采用FPA细化算法、SPTA细化算法、改进的Hilditch细化算法进行理论分析和编程实现,通过对比细化效果,分析了几种细化算法的优缺点。
关键词:手写体字符;细化;FPA算法;SPTA算法;Hilditch算法
中图分类号:TP18 文献标识码:A 文章编号:1009-3044(2015)09-0226-02
字符细化,即提取字符仅有一个像素宽度的字符骨架,因此也称为字符骨架化[1]。字符骨架化的过程是在保障像素间能够拓扑连接的前提下,对整幅图像的边缘像素进行连续擦除的处理,最终保留仅一个像素宽度组成的字符。
字符进行细化处理后能够消除字符图像中包含的冗余信息,避免不相关因素(如,手写字符的粗细)的干扰,减少计算机的运算量,进而使识别时间缩短。采用不同的字符细化算法提取到的字符骨架不同,会直接影响到在字符骨架的基础上提取的字符特征的好坏,最终对字符识别的正确率产生影响。因此,字符细化算法的研究显得尤为重要。
1 字符细化算法研究
1.1 FPA细化算法
针对经过二值化处理的手写字符图像中的任意一像素,选取周围的窗口做判断处理,如图1所示。FPA方法[2]的原理,将笔划的外围黑像素进行逐层的剥除,最终保留属于字符骨架的像素点。为了确保骨架提取的连续性,将每次处理又分解成两次子处理。
第一次子处理:从所选窗口区域的东南边界和西北角对满足式a)、b)、c)、d)的黑像素点进行剥除处理;
第二次子处理:从所选窗口区域的西北边界和东南角对满足式a)、b)、c')、d')的黑像素点进行剥除处理;
反复执行以上两次子处理,直到得到字符骨架为止。
a) 2≤B(P1)≤6;
b) A(P1)=1;
c) P2×P4×P6=0; c') P2×P4×P8=0;
d) P4×P6×P8=0; d') P2×P6×P8=0;
其中,A(P1)表示P2,P3,P4,P5,P6,P7,P8,P9,P2序列中出现01对的个数,B(P1)表示1在P1的周围八邻域窗口内出现的个数。公式a)用来限制字符骨架的端点不被剥离,公式b)保障字符骨架中间点的存留,如图2所示。公式c)、d)和公式c')、d')分别用来确保细化过程中只剥离东南边和西北角、西北边和东南角中不属于字符骨架的冗余点。
运用此算法对实验分割后的单个汉字进行细化,部分实验结果如下:图3为原图,图4为原图取反后的图,图5为实验得到的细化图。
1.2 SPTA细化算法
SPTA算法[3]同样选取
3)从P1开始,对像素点进行逐对判断,若前一点和后一点的值分别为0和1,则将Ti的值置为1,否则置为0,i的范围为1,2,…,8。若[i=18Ti=1],则表示满足该条件,记为Z0(P0)=1。
4)P1×P3×P7=0即点P1,P3,P7中任意一个或者多个点的值为0,或者Z0(P1)≠1即以P1为基准点的8—邻域点的Z0计算结果值不等于1。
5)P1×P3×P5=0即P1,P3,P5中任意一个或者多个点的值为0,或者Z0(P3)≠1即以P3为基准点的8—邻域点的Z0计算结果值不等于1。
当关注P1和P3的Z0运算时,P1和P3的8—邻域像素点情况示意图分別如图11和图12所示。
明显得知,计算Z0时,需要计算Ti在上述条件c)中,其i的取值范围为[1,8],但是,点P1、P3邻域点的下标与i的取值范围保持不同。
运用此算法对实验分割后的单个汉字进行细化,部分实验结果如下:图13为原图,图14为原图取反后的图,图15为细化后的结果。
2 算法结果分析
本文通过对60个样本的实验分析,从连续性、速度、骨架的保持、细化结果、像素特性、算法实现的难易度、以及细化效果方面对三个算法进行了比较分析,分析结果如表1所示。
3 结论
通过理论研究和实验分析,对三种算法提出了对比论证,FPA算法兼顾了连续性和四周噪声免疫,处理效果较好,容易实现。SPTA算法处理的结果是严格的单像素笔画,便于笔画跟踪提取,并且比较好地代表了笔画的中轴和保持了笔画的连续性,达到了细化的基本要求。对于Hilditch算法的改进,也是一种较好的模板法,细化后的图像没有改变原图像的主要特征,而且很好的排除了大量冗余信息的干扰。
虽然三个算法相对细化效果较好,但都存在一定问题,FPA算法难于排除撇、捺方向交叉笔画的畸变,且不是严格的单一像素。SPTA算法结果虽然是单一像素,但是速度比FPA稍慢,而且SPTA也难于克服45°交叉点畸变的问题。Hilditch算法虽然将转折位置的结构特征保留了下来,但个别多余信息冗余仍然存在,需对细节做进一步处理。
参考文献:
[1] 魏炜, 刘亚宁. 改进的脱机手写汉字细化算法[J]. 计算机系统及应用, 2011, 20(6): 184-187.
[2] 张学东, 张仁秋, 关云虎, 等. 一种快速的手写体汉字细化算法[J]. 计算机应用与软件, 2009,26(11): 17-19.
[3] 黄铁英, 姜昱明. 一种快速手写汉字细化算法[J]. 计算机工程, 2004, 30(19): 121-128.
[4] 白莹. 手写汉字的细化算法研究[D]. 西安电子科技大学, 2014.
[5] 贾瑜, 饶建辉. 一种对文字图像细化的改进Hilditch算法研究[J]. 武汉工业学院学报, 2006(3).