手写文字识别

2024-06-03

手写文字识别(通用8篇)

手写文字识别 篇1

1 引言

计算机文字识别,俗称光学字符识别,英文全称是Optical Character Recognition(简称OCR),它是利用光学技术和计算机技术把印在或写在纸上的文字读取出来,并转换成一种计算机能够接受、人又可以理解的格式。OCR技术是实现文字高速录入的一项关键技术。国外在文字识别领域较早地开展了工作,其印刷体和手写体识别产品早已问世,尤其是印刷体的识别早已达到实用程度。在国内,由于汉字识别输入有潜在的市场,全国许多大专院校及科研单位都开展了汉字识别技术的研究工作,并卓有成效,以中国科学院自动化所汉王集团为例,汉王手写识别技术已经从最初的1.0版做到了现在的11.0版,彻底解决了手写输入设备、核心算法、高效运算等技术难题。

蒙古语是内蒙古自治区的主体民族语言,在中国,使用蒙古文的地区除了内蒙古自治区,还有黑龙江、吉林、辽宁、新疆等省和自治区。蒙古文的文字处理系统和输入方法的研究起步于二十世纪八十年代初期,大部分输入方法的研究集中在键盘编码输入方式上,对蒙古文字识别的研究非常少,这严重地制约了信息技术在少数民族地区的普及和应用。因此本论文的研究为蒙古文的输入提供一种新的自动化和智能识别方式,这对继承和发展少数民族文化、促进民族地区的社会进步具有重要的意义。

2 预处理技术

蒙古文字是拼音文字,但其书写方式在当今世界是非常独特的,与汉文和西文有很大不同。蒙古文是从上到下、从左到右竖写,每个词中所有字母连着写,形成一个竖直的主干线,且每一个字母在一个词中的词首、词中和词尾所取的字形不一样。这些特点给蒙古文的识别带来很大的困难。除此之外,从书写板采集的笔迹输入序列含有很多噪声,如笔画的抖动,书写的快慢等,都会对识别产生严重的干扰。因此,必须对输入序列进行预处理。我们将采取一定的技术方法(高斯滤波、最小二乘法、Hough变换等方法)去除噪声的干扰,诸如去除重复采样点、倾斜校正、大小规范化等等。

设采样输入序列为P, P=[p1, p2, ..., pN]。首先,为避免书写快慢而影响采样点数的变化,必须清除重复点。如,采样点pi=pi+1=…=pi+d,则去掉pi+1,…,pi+d。然后对输入序列进行滤波,这里采用了高斯滤波算法,对每一个采样点 (x, y) 分别滤波:其公式如下:

标准的蒙古文手写体是沿着一条竖直主干线书写的,而不同人由于书写风格不同,笔迹可能偏离竖直主干线,因此对输入样本进行倾斜校正也是预处理中重要的一步。现在常用的方法是Hough变换,通过Hough变换得到一条实际的主干线方向,它与竖直线的夹角即为样本倾斜角度。我们把输入样本旋转相应角度即可校正样本的倾斜问题。

大小规范化是很重要的一步,我们把样本规范化为16×16的点阵范围内, 以适于不同大小的笔迹都能切分。

此外,由于不同人笔划书写速度也不同,这有可能造成笔划的断裂及采样点的不均。我们增加了插值这一步骤,采用了线性插值的方法来补充采样点。具体方法是,对图形学中的Bresenham[1]直线生成算法做适当改进以适应我们的需要。

3 特征提取技术

特征提取是手写体蒙古文字切分技术的核心步骤,特征提取的好坏将直接影响到文字的准确切分率。本人在这方面花费了大量的心血,经过长时间的实验比较研究,本系统首先采用粗分类器设计和细分类器设计方法,建立便于特征匹配的多分类器。然后从蒙古文单词全局、单词局部、笔划局部方向等三个层次上,对蒙古文手写体笔迹特征作了具体的研究。

3.1 粗分类特征

在实际中,我们选择如下特征作为粗分类特征:

(1)判断出经预处理后的蒙古文字的字首和字尾特征。

(2)继续判断这个蒙古文字位于主干线的左边,右边,还是两边。

(3)查看该蒙古文字是几笔写成的。

(4)判断该蒙古文字是否是从主干线起笔的。

3.2 细分类特征

为了区分粗分类特征提取后每组的若干个蒙古文单词,根据每个单词的笔划方向及特征点,可进行唯一特征的提取即细分类特征的提取。如,该单词是否含圈、是否带回朔笔迹、是否存在重复笔迹等。

4 切分技术

本系统利用蒙古文字的基本结构特征切分经预处理后的蒙古文手写体单词,以蒙古文单词的书写主干线作为基本要素,根据基元自身的结构特征和方向序列作为最终蒙古文单词切分点。具体基本步骤如下:

4.1 根据每个基元的特征,定义了八个方向,分别是上,下,左,右,左上,左下,右上,右下等。

4.2 取所有相邻两个像素点的方向,并形成一个方向序列。若方向序列中存在连续相同的方向,则合并成一个方向且记下对应的像素点数。

4.3 将方向序列中的每两个相邻的方向合并成一个方向,然后再判断方向序列中是否存在连续相同的方向,若存在,则进行合并且记下对应的特征点数。

4.4 只要满足特征点数大于给定值且方向一致的条件,则再进行一次合并处理。到此步骤已实现了对手写体蒙古文单词的分段线形逼近。将以上四个步骤综合称为直化过程。

4.5 当扫描这个保存了直化后的特征点及特征方向序列的数组时,若发现特征点数大于给定值且方向向下的元素,则作为基元的分割点记录下来。此外,应根据其他一些切分特征。如,按照笔划个数分类、是否带有回朔方向、回朔部分有无重复点等细分类特征。

4.6 扫描链表m_ptList(其中已存在蒙古文单词的每个像素点),当等于分割点时,从上一个分割点到此分割点进行重绘。这样就完成了对手写体蒙古文的切分。

4.7 为了方便使用蒙古文字体将识别后的基元输出,需要做一些字形转换工作。其中,对某些基元再进行切分、对某些基元再进行合并、而有些基元本身就是编码表中的字型。

对蒙古文单词的切分实例:

(汉文意思为:“蒙”)

其中, (1) 是由书写板输入的手写体蒙古文单词;

(2) 是根据切分特征, 所得到的切分后的基元;

(3) 是合并后的最终基元;

(1) - (2) :根据特定标准,对蒙古文单词进行切分的过程;

(2) - (3) :为了能够使用标准字体将其输出,从而进行的基元整合过程。

5 实验结果

我们以Microsoft Visual C++为工具,对以上提到的关键技术都进行了实现,开发出了一套手写体蒙古文字切分系统。我们从7000个蒙古单词中随机抽取3000个单词作为测试样本。由10位书写笔迹不同的测试人员分别对其中的500个单词进行不限笔画、不限风格的手写体识别,平均准确切分率为80.5%,如下表5-1。

6 结束语

因每个人的书写习惯各不相同,即使同一人在不同环境下所书写的格式也不尽相同,所以其切分复杂度和困难程度都非常高。针对这个问题,本系统提出了一种新的方法即基于特征提取技术的切分方法来解决所存在的手写体蒙古文字切分问题。从上述实验结果可以看出,提出的新方法不仅较大幅度地提高了系统的性能,而且在训练集和实验室数据集上测试也取得了良好的效果。

参考文献

[1]唐泽圣等.计算机图形学[M].北京:清华大学出版社, 1995.

[2]Nadir Farah, Labiba Souici, and Mokhtar Sellami, "Arabic Word Recognition by Classifiers and Context, "Computer Science Department, Annada University, 2005, 20 (8) :402410.

[3]邹明福, 钮兴昱, 刘昌平, 白洪亮等.联机手写英文识别.计算机研究与发展, 2006, 43 (1) :138144.

[4]靳简明, 江红英, 王庆人等.数学公式识别系统:MatheReader.计算机学报, 2006, 29 (11) :218220.

[5]张昕中.汉字识别技术[M].清华大学出版社, 1992.

手写文字识别 篇2

2、你可以勉强穿一件你不喜欢的衣服,勉强交一个你不喜欢的朋友,可感情是一辈子的事情,得自己舒服才可以。

3、最美好的事,是看到某人的微笑;而更美好的事,是他因为你而笑。

4、既然你喜欢饮料,就不要去碰那杯热水。

5、唯有最漫长的坚持,能带给我们最永久的幸福。

6、从激情到亲情,从感动到感恩,从浪漫到相守。

时间越久,越不愿离开你,这才叫爱人。

7、如果没有相等的爱,那就让我爱多一些吧。

8、有错过,才会有新的遇见。

缘分就是,不早不晚,恰恰刚好。

9、不要为了天长地久去冒险,所谓的永远只不过是一瞬间。

10、你说“谢谢”,我说“不客气”。

我们陌生到需要这么客气。

11、因为无能为力,所以顺其自然。

因为心无所恃,所以随遇而安。

12、我爱他跌跌撞撞到绝望,我的心深深伤过却不会忘。

我爱她轰轰烈烈最疯狂,我的梦狠狠碎过却不会忘。

13、若不是唯一,我连最爱也不要。

14、世界上会有一个人的出现让你觉得,之前的人生都是为了等待他的到来。

15、再花心,内心深处也有一个自己真正深爱的人。

16、不要随便把你的脚迈进我的世界,除非你能保证不离开。

17、举得起放得下的叫举重,举得起放不下的叫负重。

18、女朋友算什么,我可是要成为你妻子的女人。

19、如果我的名字是你拒绝所有的理由,那我也愿拼了命和你走到最后。

20、怪我们认识的太早,不能牵手到老。

21、希望你一生没有软肋,不像我,别人提到你,我就输了。

22、我有许多理由放弃你,但我选择了留下;而你有一大堆理由留下,却选择了放弃我。

23、每个人的心里,都有那么一个你永远不会提,也永远不会忘的人。

24、啥是爱情里的甜?是相看两不厌,是即使吵架委屈,但想想那是你,便也是心甘情愿的。

25、爱情如拉链,只有共同经历过故事,才会有刻骨铭心,才会有不离不弃。

26、多想拥抱你,可惜山南水北,你我之间人来人往。

27、在对的时间遇见对的人是童话,在错的时间遇见对的人是青春。

28、谁在放肆地弹奏着烦躁的喘息,抑扬里渐忘了色彩。

29、用一杯水的单纯,面对一辈子的复杂。

30、你也许已走出我的视线,但从未走出我的思念。

31、时间可以见证爱情,但是不是所有的爱情都经得住考验。

32、能力就像一张支票,除非把它兑成现金,否则毫无价值!

33、因为是你,所以我才对你任性。

全世界都可以不懂,如果你也不懂,我还有什么话可说。

34、何必要把这个世界看的那么清楚,朦朦胧胧着心才不会痛。

35、她总是回忆,她总是怀念,别怪她,她就是舍不得。

36、我太了解她了,只要她还肯和我说话,无论她放多狠的话,都是在等着我去哄她而已。

37、就像啤酒那一层浮在杯子上的泡沫,看着快要溢出,抿一口全是空气,有些感情也是。

38、纯朴无瑕的爱情,具有诚实的品格,装腔作势的爱情,披着虚伪的外衣。

39、眼泪流下来,才知道,分开也是另一种明白。

40、属于你的那一页早已翻阅,下一页的主角已然换人。

41、说着不想长大,可是,不管怎样,我们最终都会成长。

42、相比起说晚安,我更想帮你把被子盖好。

43、如果有个人会每天给你发信息叫你起床,睡前会对你说晚安。

44、全世界就这么一个我,别不把我当回事。

全世界就这么一个你,我拉了命去珍惜。

45、即使在千万人中行走,我也能一眼认出是你。

因为别人都是踩着地走路,而你是踩着我的心在走。

46、那个谁,我爱你爱到可以连自己的爱都不要。

那个谁,我爱你爱到可以连自己的情都不要。

47、你说你吧,长得好看也就算了,还长成了我喜欢的.样子。

你让我怎么办啊?

48、羡慕的不是风华正茂的情侣,而是搀扶到老的夫妻。

49、幸福就是只要牵对了手,就算是失去了一切,也不会害怕。

50、能够拥有时千万别松手,别忘了还有一堆人在旁边虎视眈眈呢。

51、有时候,亲密并不一定和爱有关,而疏离并不代表不喜欢。

52、请把衬衫的第一颗扣子摘下来送给我,因为它最多余,像我。

53、养一只猫,养一只狗,再养一个你,逗逗猫,虐虐狗,再睡睡你。

54、我的愿望是,一觉睡到小时候。

55、微笑就像创可贴。

虽然掩饰住了伤口,但是心痛依然。

56、一个姑娘爱上一个男子的时候,决不会看出他的缺点来。

57、眼泪是我自己的,我再痛,再悲,没有外人能体会到。

58、你用沉默来回避我,那我就用不联系来成全你。

59、我可以陪你熬夜,也会劝你早睡,但最好的状态是我们一起睡。

60、年少的爱慕是可以安静的,只是在以后的岁月里,我将永远走在少了你的风景里。

61、有没有一个人,即使当你躲进世界的角落,也能准确无误的找到你,拥抱你。

62、你可不可以牵着我的手,就当是我的乞求。

你可不可以看着我的眼,就当是我的奢望。

63、怪我不出众的脸,留不住你跳动的眼。

64、爱情使人忘记时间,时间也使人忘记爱情。

65、若借口只是敷衍,那我宁愿你简简单单的拒绝。

66、我心底的秘密,是你给的甜蜜。

67、不管你还记不记得我、至少我清晰的记得你。

68、男人伪装坚强,只是害怕被女人发现他软弱。

女人伪装幸福,只是害怕被男人发现她伤心。

69、那个让你捉摸不透的人,你不必绞尽脑汁的去猜测,如果他真心喜欢你,他不会给你出难题!

70、虽然爱情就像烟花,但是我们仍然愿意为这短暂的绚烂飞蛾扑火。

71、如果可以,我会用一辈子的桃花运,只守住你一个人。

72、其实每次都很在意,只是在掩饰我内心的伤痛。

73、叫声老婆,很容易;但是叫声老太婆,却需要一生的时间。

74、雨兲昰莪仿声哭泣的,因为没人能看的见莪心里的思念。

75、爱情是不受制约的;一旦制度想施淫威,爱神就会振翅远走高飞;爱神和其他诸神一样,也是自由自在的。

76、爱你不是因为你的美而已、我越来越爱你、每个眼神触动我的心。

77、爱上你若只是幻觉你别若即若离对我放电。

78、会不会有一天,我们终于不再互道晚安,而是睡在彼此身边。

79、阳光洒下风吹起,一切沸腾的感情都将化为清澈的空气。

80、难过了,不要告诉别人,因为没有人会在乎。

81、怎么补偿我思念你的时光,怎么赔偿我爱你的模样。

82、假如有一天我们不在一起了,也要像在一起一样活着并快乐着,便是最大的幸福。

83、之所以会念念不忘,是因为再也不会拥有了。

84、年轻的我们,容易把感动当成爱情,也容易把过客当成挚爱。

85、我想我会开始想念你,可是我刚刚才遇见了你。

86、现在男女之间的恋爱,总是答应太快,结果分手也快。

人性的规律是容易得到的就容易放弃。

87、幸福如同饮水,冷暖自知。

88、迩倾诉梦想的人,与迩同甘共苦的人。

89、我在努力的变成你喜欢的样子,可是你却告诉我你爱的是她。

90、小鸟没有了翅膀,不能飞翔,可我没有了你,可以活的很好。

91、人生就像剥洋葱,总有一片会让人流泪。

92、如果多年以后你仍未娶我未嫁那我们可不可以在一起。

93、像孩子一样,真诚;像夕阳一样,温暖。

94、有了你,我什么都不缺,心再野,也该知道拒绝。

95、我拿余生与你举案齐眉,请别让我皱眉,也别让我心如死灰。

96、白天就应该沉下心来认真做事,晚上才好认真想你。

97、不是除了你,我就没人要了。

只是除了你,我谁都不想要。

98、遇见你是命运的安排,成为了朋友是我的选择,而爱上你是我无法控制的意外。

99、我愿意陪着你疯,陪着你笑,陪着你哭,陪着你一起慢慢变老。

100、不管是谁的错先道歉的那个人一定是最在乎你的人。

101、也许我真的配不上你,但不一定你配的上我。

102、曾听人说,回忆是一座桥,却是通向寂寞的牢。

103、心,从陌生到熟悉,梦,还重复的做着。

联机手写数学公式识别技术 篇3

一般而言书写的公式识别主要分为联机手写公式识别、脱机手写公式识别和印刷体公式识别等三种[1]。本文主要讨论联机手写公式识别技术。

联机手写公式识别的任务是对用户通过鼠标或者手写板等输入的一个数学公式进行识别, 主要包括笔划输入、笔划预处理、符号切分、字符识别、公式分析、公式输出等阶段。

1 笔划预处理

为了更好地识别数学公式, 必须对用户输入的笔划进行预处理, 预处理的结果直接对后续的字符识别效果产生影响。预处理主要包括平滑笔画、调整笔画方向和顺序、大小和位置的归一化、重采样和特征提取等[1]。

1.1 笔画平滑、笔划方向和顺序

由于书写时不可避免的产生抖动, 需要对笔画进行平滑, 去掉孤立噪声和干扰等。不同的人书写字符时可能习惯不同, 为了提高识别效果, 需要对笔划方向和笔划顺序进行处理。

平滑处理有多种方法, 如可对笔画中的每个点进行滤波, 主要分为两步:对原始坐标的滤波和笔画方向码的滤波等[2]。

笔划方向一般分为横向、纵向和斜方向。对于横向规定从左到右, 对于纵向规定从上到下, 对于斜线规定从上到下, 如果遇到闭合曲线, 则规定起始点位于左或者上方。

笔划顺序是指一个符号的笔划之间书写的先后顺序, 必须对笔划顺序作统一规定。一种是按照笔划的终点相对于包围盒上边所形成夹角大小来确定顺序, 另一种是按照笔划中心或重心、起点或终点位置确定顺序。

1.2 大小和位置归一化

由于数学符号具有二维结构, 各符号位置和大小均可能不同, 为了方便进行符号识别, 对其进行归一化, 即将各个符号均缩放为同一大小和同一位置, 在系统中, 我们均缩放到360×360大小, 原点位于该图的左上角。

1.3 重采样

由于人不同、机器不同、符号不同, 构成每个笔划的点数也是不同的, 为了更好地提取特征, 需要对其进行重采样。例如将笔划重采样为60个点 (60为2、3、4、5的最小公倍数) 。有两种重采样方法, 一种是符号中每个笔划的点数是相同的[1], 另一种是根据笔划的长短来确定点数, 例如x是由两个笔划构成的, 假设其长度分别为60和40, 则前一种方法是各笔划均重采样30个点, 后一种方法则分别采样36和24个点。一般来说后一种方法可能好些, 但是计算量增大。

1.4 特征提取

联机手写字符一般采用如下几种特征。我们把这些特征分为两大类, 即笔划特征和字符整体特征。

(1) 笔划特征, 刻画笔划中每个点的位置、方向等特征。

a) 字符位置点特征。每个字符都是由一个或多个笔划构成的, 通过简略统计, 数学字符一般不会超过5个笔划, 每个笔划都是由多个点构成的, 这些点的 (x, y) 坐标可以作为符号特征进行提取。例如符号α是由一个笔划构成的, 符号是由5个笔划构成等, 那么这些点坐标位置经过重采样后可以作为特征。

b) 二阶微分平方和特征。为了克服用户书写符号时不可避免的抖动现象, 可以采用二阶微分平方和特征[1]。

(2) 字符整体特征, 刻画符号整体的特征。

a) 宽高比率, 即每个字符所在包围盒宽度w和高度h的比率w/h。

b) 宽高与面积比率, 即每个字符所在包围盒宽度w或高度h与包围盒面积a平方根a的比率[3]。

c) 周长与面积比率, 每个字符的所在包围盒周长s与包围盒面积a平方根a的比率。

d) 傅里叶系数, 对字符的笔划进行傅里叶分析, 取其前几个系数[4]。

经过实践发现, 可以采用多种特征组合的方式, 仅一种特征效果不太理想。

2 符号切分

用户输入笔划后, 必须对这些笔划进行符号切分, 即确定那些笔划属于一个符号。假设用户输入笔划为集合S:{s 0, s 1, s 2, ...s n}, 必须对这个笔划集合S做一个划分{S 0, S 1, S 2, ...S m}, 然后对每个子集S i (i=0, 1, ..., m) 作为一个整体进行符号识别。由于笔划较多, 如果盲目地划分, 则划分空间会非常巨大, 一般为笔划数目n的指数量级。

符号切分存在二义性, 例如对于图1来说, 字符为英文大写字母B还是两个数字1和3呢?这种识别对于人来说有时都存在困难, 何况计算机。

人们对符号切分进行了研究, 一般采用各笔划之间的距离作为切分依据, 例如采用包围盒方法等、最小生成树、最小游程距离方法等。下面简要介绍最小生成树算法[5]。

以各笔划的包围盒中心或者重心作为顶点v, 全部笔划的顶点为集合V:{v 0, v 1, v 2..., v n}, 任两个顶点构成边集合E:{e 01, e02, e03..., e ij, ...}, 其中边eij表示该边由顶点vi和vj构成。令W表示边权重集合, 即W:{w01, w02, w03..., wij, ...}, 其中wij表示边eij的权重, 这里权重使用两个顶点的欧式距离表示, 即wij的值为iv和vj的直线距离。这样V、E和W构成一个无向图G。最小生成树是在E中寻找子集T, 要求T中包含所有顶点, 无环路, 并且满足其权重和是E中所有连通图中是最小的, 即:

称T为G的最小生成树。

最小生成树算法有多种, 包括Prim算法、Kruskal算法和Boruvka算法等。三种算法都是贪婪算法的应用, 下面给出Kruskal算法。

对所有边eij依权重wij按递增排序

遍历所有边

if iv和vj不在同一棵子树

算法执行完后, T即为所有笔划的最小生成树。在笔划划分时, 只有距离近的笔划才有可能被划分在一个字符中, 这样就极大地缩减了划分空间。

3 字符识别

经过预处理和符号切分后, 我们得到了符号的特征向量, 下一步应该判断该符号同哪个数学字符是最佳匹配, 即字符识别。字符识别有多种方法。

第一种方法是传统的统计方法。假设各特征均为独立变量且正态分布, 可以采用高斯分类器。假设待识别字符s的特征向量为x, 特征数为D, 字符i的特征向量均值为μi, 其协方差矩阵为Σi, 则s匹配i的概率密度的高斯公式[6]为:

由于特征数目一般很大, 例如80维, 通常要对其进行降维, 一般采用主成分分析 (PCA) 方法, 得到其主分量[7]。

第二种方法是采用多层神经网络[6], 例如BP算法, 其功能强大, 易于理解。神经网络是一种可以使用复杂模型的启发式的统计模式识别技术。通过建立一个三层神经网络 (输入层、隐含层和输出层) , 输入特征向量, 给出相对应的模式。

此外还有其他方法[6]等。还可以对分类器串并联组合[8]等。在本系统中, 使用了传统的统计方法和BP神经网络等。

4 公式分析

经过前面几个阶段, 各个笔划所构成的符号已经识别为单独的数学字符, 接下来的工作是进行公式分析, 即根据各个数学字符的相对位置关系及上下文逻辑关系确定这些字符之间所对应的数学公式[1]。

例如对于图2来说, 图2a是用户输入的公式, 图2b是符号及其包围盒, 经过前面几个阶段后, 各个符号已经被识别为x和2。由图中可以看出, 字符2位于字符x的右上方, 则经过公式分析, 结果为x2, 如图2c所示。

对于用户输入的公式可以进行上述简单分析, 将各种数学符号进行分类, 包括简单字符, 例如希腊字母等;上下结构, 例如分式等;修饰符号, 例如着重号等;左右结构, 例如括号等, 在此不再列举。在系统中将各种字符可能的关系分析清楚, 按照可能性进行排列。

为了减少错误, 必须考虑上下文。例如193, 中间的9可能被识别为字母q或9, 到底采用哪一个, 我们需要考虑上下文逻辑关系, 在此例中, 该字符前面和后面均为数字, 显然该字符为9的可能性远远大于为q的可能性。

5 输入与输出

公式输入主要解决用户输入笔划的问题, 用户可以通过鼠标或者手写笔输入。输入界面主要包括输入面板、各种工具按钮、菜单等。图3是为识别系统在训练模式下的界面。

用户通过鼠标等工具在输入面板中输入公式笔划, 然后点击识别按钮 (R) 即可进行识别, 点击训练按钮 (T) 即可输入训练样本, 点击管理按钮 (M) 可对样本库中样本进行管理。

数学公式可以表示为多种形式, 例如MathML, OpenMath, LaTex, OLE、图片等。在此系统中, 输出表示为MathML格式, 这样许多数学软件包括Mathematica、MathType都可以使用。

6 小结

本文简单地讨论了联机手写数学公式的识别技术, 主要包括笔划输入、笔划预处理、符号切分、字符识别、公式分析、公式输出等各阶段。用户通过鼠标或手写笔输入笔划;接着进行预处理, 它主要解决笔划方向、笔划顺序、位置和大小归一化、笔划重采样等问题;然后进行符号切分, 根据最小生成树算法, 把可能在一起的笔划组合成一个符号;对符号进行特征提取, 然后将其识别成数学字符;根据这些字符的相对位置关系和上下文, 通过公式分析后, 形成数学公式;将识别结果表示成MathML格式, 这样就可以在其他应用程序中使用了。

参考文献

[1]单洪浩.基于笔输入的数学公式编辑器[D].北京:中科院软件所, 2001.

[2]胡莹.联机手写数学公式识别系统的研究与实现[D].广州:广州大学, 2007.

[3]冯海波.基于手势和两级分类器的联机手写公式识别[D].北京:中科院软件所, 2003.

[4].联机手写大写英文字母识别[EB/OL]. (2007-6-23) [2011-1-2]http://www.opencv.org.cn/.

[5]Thomas H.Cormen, Charles E.Leiserson, Ronald L.Rivest, Clifford Stein.算法导论[M] (第二版) [M].潘金贵, 顾铁成, 李成法, 叶懋, 译.北京:机械工业出版社, 2006:348-350.

[6]Richard O.Duda, Peter E.Hart, David G.Stork.模式识别 (第二版) [M].李宏伟, 姚天翔, 译.北京:机械工业出版社, 2003.

[7]Nicholas E.Matsakis.“Recognition of Handwritten Mathematical Expressions, ”Department of Electrical Engineering and Computer Science, MIT, 1999.http://www.ai.mit.edu/people/viola/research/publi cations/matsakis-MS-99.pdf.

基于决策树的手写数字的识别 篇4

模式识别(Pattern Recognition)的目的是让机器自动识别事物[1]。手写数字识别(Handwritten Numeral Recognition)是光学字符识别技术(Optical Character Recognition,简称OCR)的一个分支,它研究的对象是如何利用电子计算机自动辨认人手写在纸张上的阿拉伯数字[2]。手写数字识别有着极为广泛的应用前景,可以应用于大规模数据统计、财务、税务、金融、邮件分拣等方面,这也正是它受到世界各国的研究工作者重视的一个主要原因。

到目前为止,尽管人们在脱机手写英文、汉字识别的研究中已取得很多可喜成就,但距实用还有一定距离。而在手写数字识别方面,经过多年研究,研究者们已经开始把它向各种实际应用推广,为手写数据的高速自动输入提供了一种解决方案。已经研究并应用的方法有:组合式神经网络[3]、模板匹配[4]、纹理识别[5]。

本文提出一种基于决策树算法的手写数字识别方法,该方法通过提取基于密度的特征,通过训练得到一个决策树分类模型,进而进行手写数字的识别。实验证明该方法能够快速有效地进行手写数字的识别。

2 方法流程

方法流程如图1所示。方法分为两部分:训练和识别。训练时对样例图像逐个进行特征提取,提取的特征存入数据库,以此作为训练样例进行训练。在进行测试或识别时,对每个图像或手写的文字提取特征,和分类规则数据库进行模式匹配,得到对应的分类结果。

3 特征提取

可描述一幅图像的特征非常多,如图像的大小、像素矩阵等等,如果每个因素都考虑用于识别的话,是非常困难的。本文提出一个基于密度的特征提取,具体的流程如图2所示。

3.1 灰度图(gray scale image)

又称灰阶图。把白色与黑色之间按对数关系分为若干等级,称为灰度。灰度分为256阶。用灰度表示的图像称作灰度图。任何颜色都有红、绿、蓝三原色组成,将原来的RGB(R,G,B)中的R,G,B统一用Gray替换,形成新的颜色RGB(Gray,Gray,Gray),用它替换原来的RGB(R,G,B)就是灰度图。

3.2 二值化

形成灰度图后,每一个像素点灰度值大于某个事先设定好的阈值的话,该点的灰度值为255(黑色),否则的话为0(白色)。

3.3 去噪、平滑

有些样例在采集时,可能会产生某些噪音,需要对图像进行降噪、平滑,具体的方法是在每个像素点周围选取8个点,如果8个点中同颜色(黑、白)的点不超过阈值的话,该点颜色重置为相反的颜色。

3.4 裁剪

在完成前面几步后需要对图像进行裁剪,将四周的空白区域去掉,裁剪出有效区域。如图3所示,一个原始图像经过上述几步处理得到新的图像。

3.5 分割图像

将处理完毕的图像分为3*5个区域,每个区域的面积是相等的。

3.6 计算密度

在每个区域内计算黑色像素点的个数,按照所占百分比,分别赋值0-10作为该区域的密度。这样就形成15个属性值,以此作为该图像的进行数字识别的特征。在训练时,为方便处理,属性值及所属分类将存入数据库。表1给出了图3所对应的特征值。

4 决策树算法

4.1 决策树基本思想

决策树学习是一种逼近离散值目标函数的方法,这种方法将从一组训练数据中学习到的函数表示为一棵决策树。对噪声数据有很好的健壮性且能够学习析取表达式。

决策树通过把实例从根结点排列到某个叶子结点来分类实例,叶子结点即为实例所属的分类。树上的每个结点指定了对实例的某个属性的测试,结点的每个后继分支对应于该属性的一个值。图4给出用于学习布尔函数的ID3算法的流程图。

ID3的核心问题:选取在树的每个结点要测试的属性。为此引入信息增益,用来衡量给定的属性区分训练样例的能力,ID3算法在增长树的每一步使用信息增益从候选属性中选择属性。

熵是信息论中的一个度量标准,刻画了任意样例集的纯度,其定义为:

Entropy(S)=-∑undefinedpilog2pi

其中pi是S中属于类别i的比例。

信息增益度量属性分类训练样例的能力。一个属性的信息增益就是由于使用这个属性分割样例而导致的期望熵降低。一个属性A相对样例集合S的信息增益为:

Gain(S,A)=Entropyundefined

上面讲到最后提取的数字图像的15个属性均为连续值,而ID3算法只局限于离散属性值,必须对算法进行改进。结合C4.5算法处理连续属性值的方法,本文使用如下方法将连续属性值转变为离散属性值。由于15个特征的取值范围均为[0,10],考虑从中选取某个值作为分界点,这样便可以将连续值属性转变为布尔属性。在选择子节点时,计算每个候选属性分别以[1]中每个值为分界点的信息增益从中选择最大的,作为新的节点。

4.2 决策树可视化

采用两种方法实现决策树的可视化:

4.2.1 利用Treeview控件显示决策树(如图5所示)

4.2.2 绘制决策树(如图6所示)

5 实验结果与结论

选择部分手写数字图像提取特征,其中2/3用于训练,1/3用于测试。训练得到的决策树,对训练样本测试准确率为100%,对测试样本的正确率为85%。

自行手写对认真书写的数字均能正确识别(如图7所示)。书写过于潦草的误识情况比较多(如图8所示),造成这个问题的主要原因是训练样例过少、单一化。若想减少误判率,一定要有数量相当的训练样本

摘要:手写数字的识别是模式识别及机器学习的一个重要应用,应用范围非常广泛。本文提出一种基于决策树算法的手写数字识别方法,该方法通过提取基于密度的特征,通过训练得到一个决策树分类模型,进而进行手写数字的识别。实验证明该方法能够快速有效的进行手写数字的识别。

关键词:手写数字识别,特征提取,模式识别,决策树

参考文献

[1]李天.基于模版匹配的联机手写数字识别系统设计.计算机与网络,2009,21,P65-67

[2]刘东泽,蔡建立.基于神经网络的手写数字识别,福建电脑,2009,11,P83-93

[3]何东晓,周春光,刘淼,等.手写数字识别中组合式神经网络的构建方法.吉林大学学报理学版,v47n62009,p1211-1216

[4]李志荣,杨丹,周奇.基于模板匹配的脱机手写数字识别研究.哈尔滨师范大学自然科学学报,v25n.42009,p86-95

手写文字识别 篇5

手写字符识别属于模式识别领域, 模式识别作为一门学科, 属于机器智能, 故属于人工智能范畴。模式识别理论的发展和广泛应用, 推动了人工智能的发展和应用。

脱机手写识别是通常所说的光学字符识别 (Optical Character Recognition, OCR) , 在文字信息电子化时通常有以下分类:

2. OpenCV简介

开放源代码的计算机视觉类库OpenCV (Intel®Open Source Computer Vision Library) 由英特尔公司位于俄罗斯的研究实验室所开发, 它是一套可免费获得的、由一些C函数和C++类所组成的库, 用来实现一些常用的图像处理及计算机视觉算法。

OpenCV主要用于对图像进行一些高级处理, 比如特征检测与跟踪、运动分析、目标分割与识别以及三维重建等。与其他计算机视觉工具相比, OpenCV的优越性如表1所示:

OpenCV是Intel公司开发的图像处理和计算机视觉函数库, 它有以下特点:

(1) 开放C及C++源码;

(2) 基于Intel处理器指令集开发的优化代码;

(3) 统一的结构和功能定义;

(4) 强大的图像和矩阵运算能力;

(5) 方便灵活的用户接口;

(6) 同时支持MS-Windows, Linux平台;

(7) 在速度上OpenCV还有Intel公司的mmx和ssl优化。

3. 识别系统

3.1 图像获取

通常通过扫描仪或数码相机获取图像, 也可以通过手写板等外接设备输入图像信息。

3.2 预处理

3.2.1 图像级预处理

如果是数码相机拍摄得到的照片, 通常附带颜色信息, 这些信息对字符识别没有任何用处, 通常要进行二值化操作。之后还需要去噪、倾斜校正和滤波处理。文献[6]中对倾角估计做了详细阐述。

OpenCV中使用void cvThreshold (const CvArr*src, CvArr*dst, double threshold, double m2x_value, int threshold_type) 对图像进行二值化, 其中参数threshold为阈值。

3.2.2 字符级预处理

将大幅的文本图像先切分成若干行, 对每行再切分成单词或单个字符, 使每一个字符边缘没有空白的多余区域, 如图3所示。之后, 需要对得到的图片按一定比例因子进行缩放, 使所有要进入下一步处理的图像大小相同, 这样可以去除字号对识别结果的影响。

3.3 特征提取

对上一步得到的图像进行处理, 首先将图片的像素矩阵转化为一个特征向量。

3.3.1 机器学习

在机器学习部分要训练分类器, 本文介绍的方法使用K近邻分类器。

近邻分类器简介

将均值作为代表点时, 最小距离分类器的实质就是将样本判属于与代表点距离最近的类, 是一种分段线性分类器。

A.最近邻法

最近邻法的主要特点就是将样本判属它的最近邻 (和它距离最近的代表点) 所在的类。

假定有m个类别ω, ω2, …, ωm的模式识别问题, 每类有Ni (i=1, 2, .., m) 个样本, 规定类ωj的判别函数为

其中, xik表示第i类的第k个元素

判决准则:

称这种决策方法为最近邻法, 相应的分类器称为最近分类器。

优缺点分析:最近邻分类器的判决实现是将样本判属与它距离最小的样本所属的类, 这种方法的特点是概念容易理解, 最近邻样本和待分类样本在距离意义下是最相似的。其缺点在于受随机噪声影响较大, 尤其是在两类的交叠区内。

B.k-近邻法

对于待分类样本x, 在N个样本集中找出它的k个近邻, 设k个样本中属于第i类的为ki个 (i=1, 2, ..., m) , 即

定义判别函数:

判别准则为

称这种方法为k-近邻法, 相应的分类器称为k-近邻分类器。

实验表明, 在大多数情况下, k-近邻分类器的分类性能是很理想的, 最大缺点是需要记忆训练集全部样本, 决策时需要进行大量的比较运算, 这对大规模训练样本集来说是十分不利的。正因为如此, 一般来说, k-近邻分类器不适宜于存在大规模训练集时的实时预测。另外, k-近邻分类器对变标签 (Alternate labels) 问题、双螺旋 (Two-spirals) 问题等经典的模式分类难题也无能为力。

在OpenCV中封装了机器学习库 (MLL) , 是一些用于分类、回归和数据聚类的类和函数。大部分分类和回归算法用C++类来实现。尽管这些算法有些不同特性, 但是也有一些相同特性, 这些相同之处在类CvStatModel中被定义, 其他机器学习类都是从这个类中继承。CvStatModel类中包含了一些基本的函数, 如:

对于K-近邻算法在OpenCV中封装了CvKNearest类。包含以下函数, 如:

3.3.2 识别

在识别过程中, 用分类器识别待识别的特征向量。

在OpenCV中调用函数:float CvKNearest::find_nearest (cons CvMat*_samples, int k, CvMat*results=0, const float**neighbors=0CvMat*neighbor_responses=0, CvMat*dist=0) 。在回归中, 预测结果将是指定向量的近邻的响应的均值。在分类中, 类别将由投票决定。该函数通过参数neighbor_responses返回一个CvMat类型矩阵, 记录了K个最可能的结果, 在这K个结果中, 投票最多的作为函数返回值。

3.3.3 样本测试

如果同一字符的样本很多, 可以选择一部分用来训练分类器, 另一部分样本用于测试分类器的准确率。

在OpenCV中设有提供测试的函数, 可以自己编程实现, 其思想是使用测试样本作为待识别的样本进行识别操作。设总共有M个样本用于测试, m个样本识别结果与实际值不同, 则识别误差率为

3.4 后处理

一般是利用词义、词频、语法规则或语料库等语言先验知识对识别结果进行校正的过程。

3.5 文本输出

将识别得到的文本输出, 输出方式根据需求不同可自由选择。

4. 结语

本文重点对手写识别的流程、K-近邻算法以及OpenCV库函数的使用做了介绍。手写字符识别在生产生活中应用广泛, 如识别手写邮政编码实现邮件分拣。因此, 其识别问题一直是图像处理和模式识别的热点。如今, 手写识别功能已在某些嵌入式设备上得到应用, 如手机等。也许随着技术的完善, 未来可以将手写板集成在键盘上, 给打字不熟练的用户提供另一种信息录入的途径。

参考文献

[1]W.S.Rohland.Character Sensing System.USA, 2877951.1959

[2]Intel Corporation.Open Source Computer Vision Library Reference Manual[S].2001-12

手写文字识别 篇6

手写数字识别具有重要现实意义。在金融和电子商务等涉及手写数字的场合, 当待处理数字量特别大, 而且要求识别准确率又很高时, 对手写数字进行智能识别显得更加重要。

手写数字识别是图像识别领域的基础, 常用的数字识别技术有:模板匹配法、SVM (支撑向量机) 法、神经网络识别等, 这些方法在准确率、实时性和实施性方面还有一定缺陷[1]。本文采用深度学习算法, 学习训练数据特征和规律, 以用来对新样本进行智能识别或某种可能性的预测。本文内容安排如下:首先, 介绍手写数字识别整体算法流程;随后, 介绍深度学习网络的设计配置以及训练技巧, 比如动量因子和Dropout参数的引入;最后, 是实验设计和实验结果的对比。

1 手写数字识别整体算法流程

手写数字识别流程主要包括训练和识别两部分, 训练是指使用MNIST数据集训练形成深度信念网络模型;识别是指将欲识别的图片进过预处理后, 输入深度信念网络模型进行识别。整体流程如图1所示, 其中下文对部分内容进行概述。

1.1 图像预处理

本文的训练和测试网络模型使用的是MNIST数据集, 该数据集含有0~9的60 000个训练数据集和0~9的10 000个测试数据集, 这些图像数据都保存在二进制文件中, 每张图片可以使用一个784维的向量表征。在实验中使用MNIST数据集时, 预处理主要是灰度的归一化处理。每张图片都是28像素×28像素的, 部分图片展示如图2。

一般来说, 由于光照和背景等因素, 使欲进行识别的原始图像带有噪声, 不利于准确识别, 所以有必要进行预处理。本文图像预处理主要包括灰度化、去噪、分割几个步骤。然后将进行过预处理的图像数据输入深度信念网络进行识别, 并得到识别结果。

1.2 深度信念网络模型

深度信念网络的形成是其中极其重要的一环。深度信念网络是由限制性玻尔兹曼机 (RBM) 叠加而成的。首先, 从第一个RBM开始, 对其进行无监督训练, 确定其权重及偏置;其次, 把第一个RBM的输出向量作为第二个RBM的输入, 然后训练第二个RBM网络, 反复训练多次;第三, 通过前向传播, 在最顶层加上标签层, 整个网络相当于进行了一次完整的无监督学习;最后, 使用反向传播 (BP) , 将误差自顶向下传播至每一层RBM, 通过梯度下降法修改层间参数, 达到微调整个DBN网络的目的。

其中, 限制性玻尔兹曼机 (RBM) 网络结构中有两层, 分别是可视层和隐藏层。可视层有m个可视节点, 隐藏层有n个隐藏节点, 其中每个可视节点只和n个隐藏节点相关, 而和同层的其他可视节点之间独立。通过RBM的能量函数, 得到隐藏层和可视层的联合概率分布, 再通过对比分歧算法, 更新权重等参数。

2 DBN的配置与训练

上面章节介绍了手写数字识别的整体流程, 并对其中深度信念网络模型的设计进行了概述。DBN的应用重点是训练过程的各种参数选择和训练技巧, 详述如下。

2.1 激活函数的选择

激活函数的选择很重要, 好的激活函数可以避免梯度扩散等问题, 主要有如下特性需要考虑:

(1) 非线性:当激活函数是非线性函数时, 基本上所有的函数都可以被一个两层的神经网络实现。然而, 如果激活函数是恒等激活函数等线性函数时, 一个深层网络与单层神经网络的作用相差不多, 且对于大量非线性函数网络无法表示。

(2) 单调性:当激活函数具有单调性时, 单层网络能够保证其是凸函数。

(3) 可微性:当优化方法是基于梯度下降时, 函数必须可微。

(4) f (x) ≈x的限制条件:当激活函数满足f (x) ≈x时, 如果训练参数是随机初始化的很小的值, 则训练神经网络的效率很高;然而若不满足该条件, 只能谨慎设置参数初始值。

(5) 输出值的范围:当激活函数的输出是有限值时, 利用梯度下降优化代价函数效果可观;当激活函数的输出没有限制时, 训练模型会更快, 不过此时的学习速率会比较慢。

2.2 学习率

当学习率设置较大时, 将导致重构的误差急剧增加, 权重值也会很大。设置学习率的方法是先进行权重更新和权重直方图, 以令权重更新量为权重的0.001左右。若有一个单元的输入值很大, 则令权重更新值再小一些。

2.3 动量因子

学习率较大, 收敛速度加快, 但易造成算法的不稳定;学习率较小, 可以减轻算法不稳定性, 收敛速度降低。为解决该问题, 引入动量因子参数, 作用是本次参数值的修改方向不完全由当前样本的梯度方向决定, 而是采用上一次参数的方向和本次梯度的方向相结合, 可以避免过早收敛到局部最优点[2], 动量因子momentum一般设置为0.5。

2.4 Dropout参数

训练网络模型时, 如果用于训练的样本较少, 则形成的网络模型会出现过拟合现象, 既而使模型的泛化能力降低。为解决该问题, 引入Dropout参数, 其作用是使训练中的隐藏层部分节点失去作用, 这样就一定程度上解决了过拟合现象。理论上, dropout是一种模型平均, 随机性地忽略隐藏层的节点, 从而得到不同的模型, 通过其最终获得平均概率[3]。然而使用Dropout参数时, 网络的训练时间会有所延长。本文设置Dropout的值为0.5。

3 实验设计及结果

本实验是在Windows 7操作系统下的Matlab 2012平台进行的。实验设计主要包括测试深度信念网络模型识别手写体数字的最优层数, 以及Dropout训练技巧对识别精度的影响, 测试结果陈述如下。

3.1 DBN层数变化对识别精度的影响

在设计网络时, 暂不使用Dropout技巧, 仅设置激活函数为sigmoid函数, 动量参数值为0.5, 学习率值为1。设置层数分别为3、4、5、6进行测试, 网络模型如图3所示。

对以上四种网络模型在相同的软硬件平台上运行, 经过相同方法和数据集进行训练、测试。最后得出实验结果见表1所示。

由实验结果得知, 数字识别准确率起初随着深度的增加而增加, 当深度为5, 即隐藏层数为3时精确度最高, 达到93.4%, 高于此时的6层网络。因此可知, 深度学习算法在手写数字时, 并非层数越多, 识别效果越好, 其主要原因是当层数较高时, 产生过拟合现象[4], 导致泛化能力降低。

3.2 Dropout训练对识别精度的影响

在网络初始化时, 在Dropout参数值为0.5, 设置激活函数为sigmoid函数, 层数为5层, 动量参数值为0.5, 学习率值为1的情况下, 如果使用2 000个图片训练, 1 000个图片测试, 使用Dropout的错误率为11%;不使用Dropout的错误率为13%。在同样条件下, 增加为60 000个图片训练、10 000个图片测试, 使用Dropout的错误率为7%;使用Dropout的错误率也为7%。实验结果说明, 当训练样本较少时, 使用Dropout参数可以一定程度上避免过拟合[5];然而当训练样本较多时, Dropout效果不明显, 且训练时间增长。

4 结束语

在基于深度信念网络的手写数字识别研究中, 本文为提高识别准确率, 测试了不同网络层数对准确率的影响, 确定最佳层数为5层, 此时的最佳识别精度为93.4%, 高于同等实验条件下基于SVM设计的手写数字识别系统的91%的准确率。以上结果表明本文方法的有效性。

此外, 测试了Dropout参数对准确率的影响。结果表明, 当训练样本较少时, 设置Dropout参数值为0.5, 可以避免过拟合现象的发生, 提高泛化能力, 有效作为小样本时训练DBN网络的一个小技巧。

摘要:深度信念网络可以通过低层特征组合抽象形成更高层的特征, 具有良好的学习能力, 其无监督学习特点减少了人工劳动量。主要研究了使用深度信念网络 (DBN) 对手写数字进行识别的方法, 实验表明设计识别数字的网络模型时的最佳层数为5层。使用MNIST数据库中的60 000个图片训练深度信念网络, 再使用MNIST中的另外10 000个图片测试网络, 得出高达93.42%的准确率, 高于同等条件下的SVM。另外, 在深度学习网络中引入Dropout参数, 可以在使用少量样本的情况下获得更高的识别准确率。

关键词:数字手写识别,深度信念网络,Dropout训练

参考文献

[1]吴忠, 朱国龙, 黄葛峰, 等.基于图像识别技术的手写数字识别方法[J].计算机技术与发展, 2011, 21 (12) :48-51, doi:10.3969/j.issn.1673-629X.2011.12.013.

[2]马玉梅, 武玉厚.动量因子对BP算法的影响[J].中央民族大学学报:自然科学版, 2008, 17 (4) :35-40, doi:10.3969/j.issn.1005-8036.2008.04.006.

[3]DINARELLI M, TELLIER I.Improving Recurrent Neural Networks for Sequence Labelling[J].2016, ar Xiv:1606.02555.

[4]张卫东.深度信念网络及其在手写字体识别中的应用[D].成都:成都理工大学, 2015.

手写文字识别 篇7

手写数字识别(Handwritten Numeral Recognition)是光学字符识别技术(Optical Character Recognition,简称OCR)的一个分支,它研究的对象是:如何利用电子计算机自动辨认人手写在纸张或者与计算机相连的手写板上的阿拉伯数字。随着社会信息化的发展,手写数字的识别研究有着重大的实用价值,如在邮政编码、税务报表、统计报表财务报表、银行票据、海关等需要处理大量字符信息录入的场合。手写数字的识别也具有商业意义,现在市面上流行实用的各种写字笔,手机上面嵌入的手写功能等等。因此,手写数字的识别研究有着重大的现实意义,一旦研究成功并投入应用,将产生巨大的社会和经济效益。[1]

数字字符识别是目前模式识别功能的一个重要组成部分。基于孤立点、交叉数和中间数研究,该文研究了一种新的手写数字识别算法。主要内容包括:对所写字符进行截取以及扫描所写字符并利用特征提取获得孤立点、交叉点和和中间点,从而进行数字识别。

1 数字识别概述

手写体数字识别方法大体可分为两类:基于统计的识别方法和基于结构的识别方法。第一类方法包括模板匹配法、矩法、笔道的点密度测试、字符轨迹法及数字变换法等。第二类则是尽量抽取数字的骨架或轮廓特征,如孤立点、交叉点、内部的虚实,起点和终点位于中线的位置等,两类方法具有一定的互补性。该文中使用了一个基于结构特征的分类识别。

数字识别的基本过程分为位图模式确定,位图截取,数字识别和输出结果四部分。其中,位图模式是指使用在手写过程中,任何一个图形的形成都是有有限个像素点组成的位图和像素阵列来表示的图像,基于这种模式我们可以获取图形的大小和一些特征。

位图截取指通过对位图模式的扫描,根据上,下,左,右四个方向扫描,首先获取到的点就作为该方向的边界。识别指对刚才截取的图像重新进行扫描,根据算法获取到孤立点个数,交叉数的数目和中间数的值,依据它们进行识别。最后,识别完成后,在相应的区域输出所识别的结果,如果无法识别,也需要做相应处理。

2 手写数字识别算法

该文所研究的手写数字识别算法主要基于位图扫描及相应截取,利用特征提取获得孤立点、交叉点和和中间点,依据他们进行识别。下面依次详细介绍。

2.1 位图扫描及截取

由于使用了兼容位图DC,位图保存到了DC中。该文采用先截取书写区域的大小,然后再对书写区域进行扫描的方法,从而提高效率。

Win32应用程序编程接口使用四种坐标空间:世界坐标系空间,页面空间,设备空间和物理设备空间。该文采用了物理设备空间。在物理坐标系中,设备的左上角为原点,向右时X正轴,向下时Y正轴,当扫描时用二维数组盛放时,应该注意行坐标和列坐标的正确区分。截取步骤如下:

1)左边界的截取:对图形从左向右一列一列扫描,对于每一列,从上往下一行一行扫描,遇到笔迹点就记下此时的列数。

2)右边界的截取:对图形从右向左一列一列扫描,对于每一列,从上往下一行一行扫描,遇到笔迹点就记下此时的列数。

3)上边界的截取:对图形从上往下逐行扫描,对于每一行进行逐列扫描,遇到笔迹点记下此时的行数。

4)下边界的截取:对图形从下往上逐行扫描,对于每一行进行逐列扫描,遇到笔记点就记下此时的行数。

获到各个边界点后,右边界减去左边界就是图形的宽度,下边界减去上边界就是图形的高度,到此位图就截取完成。

2.2 识别步骤

1)首先按照孤立点进行分类;

2)对于每组分类使用交叉数进行分类或者区别;

3)对于步骤2分的组,使用中间数继续进行区别或分类;

4)对于步骤3产生的分类,按照数字的大概轮廓进行分类,对于不能识别的,转如步骤五;

5)对于不能识别的,显示无法识别处理。

2.3 算法详细描述

1)获取图像的孤立点。对每行进行扫描,首先判断此图形的第一个点是不是只有一列,如果只有一列的话,此像素点就只有下方才可能有像素点了,如果不是一列,还要判断是不是只有一行,如果只有一行,就只有右边可能有像素点了。到此第一行的第一个像素点就判断出来了,接着判断第一行的第二个像素点,判断是不是最后一列,如果是最后一列,那么就没有右方的邻接点了,如果不是,此像素点有左右邻接点,由于是第一行,故均没有上边界点,如果是第一列和最后一列相应的就没有左邻接点,左上邻接点,左下邻接点。然后判断第二行是不是最后一行,如果是,就相应的没有了下边界。如果是第一个点,就没有左边界。如果只有一列就没有又边界,不是第一个点又不是最后一个点,没有下边界。对后一个点就没有右边界。第一列没有左边界,最后一列没有右边界,中间的任意像素点均具有八个方向的邻接点。下面的孤立点的判断,对于任何一个像素点,判断与它八个方向(如果有的话)的邻接数个数,如果邻接数个数是1,此像素点就是孤立点,否则就不是。

2)获取交叉数个数,对于每个像素点来说,它的各个方向与它连接的个数就是它的交叉数,在本论文中,所取的交叉数也就是所有点中交叉数最大的那个。如图3是交叉数为4的图像。

3)获取中间数。中间数的定义就是选定两个孤立点,判断两个孤立点相隔的行数与整个字体相比,是不是超过了一般值。如果是,中间数是一个值,如果没有,中间数就是另外一个值。如下图为两个不同中间数的示例。一个是没有合口的0,两个孤立点位于同一行,小于一半的大小,所以中间数为一个值。一个是3,它的上面的孤立点和下面的孤立点之差超过了一半的大小,与0的中间数的值不一样,这样就区分了。

4)通过上面分析,我们就可以如下分类。步骤如下:

首先按照孤立点个数(DOT),我们可以分类:

a:当DOT为0时,有01和81;b:当DOT为1时,有61和91;

c:当DOT为2时,有02,1,21,22,31,32,62,7,82;

d:当DOT为3时,有51,92;e:当DOT为4时,有4,52,53。

其次在交叉数和中间数的限制下进行区分。

a:当DOT为0时,因为81的交叉数为4,所以它们俩就区分了。

b:当DOT为1时,61和91因为它们的上三分之一部分和下三分之一部分点数有明显的不同,所以就可以区分了。

c:02的内部的三分之二都没有笔迹且起点和终点位于中线的一侧,和其他可以区分。1的细度区别了其他。7的左下部分的三分之一为空。82的交叉数为4,并且它的起点和终点位于中线的一侧。22,32因为交叉数为4,起点和终点位于中线的两侧。21,31,62统计中间三分之二的每列像素的个数,少的就是21,剩余的就是31和62,再统计中间的三分之一和下部的三分之一,中间多的就是31,下面多的就是62.。

d:92的左下方1/3为空,故通过此分辨出来。

e:52的交叉数不为4,分出来了。剩下4和53,由于53的第三个和第四个孤立点分居中线两侧,4的位于一侧,区分出来。

2.4 数字识别实现

对数字进行分类,然后就可以进行识别:

1):当DOT为0时:有01和81。

由于81交叉数为4,01的交叉数小于4,此时的01和81区分开来。

2):当DOT为1时:有61和91。

对于61和91的上三分之一部分和下三分之一的部分点数的不同,我们可以对数字字符进行扫描,统计像素点的个数,上面多的就是91,下面多的就是61。

3):当DOT为2时:有02,1,21,22,31,32,62,7,82。

首先写02的时候,02的内部中间的三分之二时空的,并且上面的没合住的两个孤立点位于中线的一侧。

1的孤立点有两个,并且对书写的1的细度有要求,此时1也没识别。

7的左下部分的三分之一为空,此时7也没识别出来。

剩下的数字当中,只有22,32,82三个数的交叉数是4,这三个数就与其他剩余的数分开来了。对于22,32因为交叉数为4,起点和终点位于中线的两侧,对于82来说,交叉数也是4,可是起点和终点位于中线的两侧,与他们两个分辨出来。对于22,32来说,在中间的三分之二的行部分,列部分的前五分之三,对每列的像素点数扫描,对于22来说,中间是没有回笔的,每列的像素超过一定的数目就是32。

对于21来说,统计中间三分之一的点数,数目最少的就是21,否则就是31和62;对于31和62来说,对中间三分之一和下部三分之一统计,中间三分之一多的就是31,否则就是62.

4):当DOT为3时,有51,92。对于92来说,左下部的三分之二为空,否者就是51。

5):当DOT为4时,有4,52,53。首先52的交叉数不是4,与4和53分开。对于4和53来说,由于4的下面两个孤立点位于中线的一侧,而53的第三个和第四个孤立点位于中线的两侧,从中间数的返回值就可以区分4和53。到此,10个数字就全部区分开来。

3 结论

由于手写数字字符的任意性比较高,对一些数字字符还存在识别错误和不能识别。一个是因为鼠标书写的不易操作性造成了书写时可能做成圈,还有一些顿笔。一个是对特征提取的还不足够多,以至于在有些数字的识别上出现错误识别。

由于本算法对特征提取的不足,如果能把手写区域那部分的区域进行扩大,例如扩大到16×16的像素点界面,就能很好的解决鼠标的不易操作性和顿笔。另外是改进算法,获取足够多的特征进行识别。例如基于BP神经网络的识别算法就比较好,不过它要预先存入相当多的样本,在对不熟悉的字符进行识别时,必须先进行样本训练,等到获得相当多的样本时,提取特征,进行识别。

摘要:在信息化飞速发展的时代,字符识别是信息录入和转化的一个重要内容。其中,手写体数字的识别有着非常广泛的应用,如邮政编码、手机手写等。该文使用一种基于“孤立点”、交叉数和中间数的手写数字识别方法,利用孤立点对数字(0-9)进行首次分类,再利用交叉数和中间数对分类后的数字进行进一步分类和识别。实验结果表明,该算法有效提高了数字识别的效率。

关键词:特征提取,孤立点,交叉数,中间数,效率

参考文献

[1]张宏林,Visual C++数字图像模式识别技术及工程实践[M].北京:人民邮电出版社,2003:167-196.

手写文字识别 篇8

手写体数字识别在邮政编码自动识别、银行业务方面有重要的应用,但是由于字体变化大,对识别率要求高,因此有较大的困难。字符识别一般分为两类[1]:联机手写数字识别和脱机手写数字识别。目前,在脱机手写字符识别研究中使用最广泛的是光学字符识别,即OCR 方法。其统计模式识别方法注重数量特征,便于特征提取、分析和计算。但是,它将字符看成一种随机的二维点阵,没有考虑字符的结构特征和结构信息。因此,这种方法对单一字符比较有效,而对不同字体的字符识别效果则较差。

结构模式识别[2]的方法是把待识别的模式看成由若干个比较简单的子模式构成的集合,任何模式都可以用一组基元及一定的组合关系来描述。由于字符含有丰富的结构信息,可以设法提取含有这种信息的结构特征,作为字符识别的依据。但是,由于字符结构比较复杂,实际应用中仍有较大困难。近年来,出现了将统计和结构识别结合起来的途径,既吸取了统计识别的优点,又利用了字符的结构信息。手写数字识别是字符识别的一个特定方向。由于问题本身的特殊性,传统的OCR方法不能有效地解决这一问题。因此,手写数字的识别方法应该是一种具有自适应、抗干扰、能够有效地解决手写数字分割、统计模式识别与结构模式识别相结合的方法。神经网络技术的运用能够部分解决上述问题。神经网络具有以下几方面的优点:神经网络是自适应的,它能从数据中自动地学习到解决问题的知识。本文利用了Mnist手写体数字数据库,识别率达到93%以上。

1 预处理

图像预处理是字符识别重要的一环,它把原始的图像转换成识别器所能接受的二进制形式。要识别手写体数字首先要对其字符图像进行预处理。预处理的目的是去除字符图像中的噪声、压缩冗余信息,得到规范化的点阵,为特征提取做好准备。由于数据量比较大,需要批量读入字符图像。求取其能包络最大像素区域的BoundingBox,即去掉外边缘和噪声等无用信息。对BoundingBox区域进行细化,进行断笔填充。使得预处理后的图像成为一个无间断点的数字。

2 特征提取

手写数字特征的提取和选择是一项极为重要的工作。特征的选择是否恰当,提取的方法是否有效直接关系到最终的识别结果。研究者们提出了许许多多的识别方法,按使用特征的不同,这些方法可以分为两类[3]:基于结构特征的方法和基于统计特征的方法。统计特征通常包括点密度的测量、矩、特征区域等等;结构特征通常包括圈、端点、交叉点、笔画、轮廓等等。一般来说,两类特征各有优势。例如,使用统计特征的分类器易于训练,而且对于使用统计特征的分类器,在给定的训练集上能得到相对较高的识别率;而结构特征的主要优点之一是描述字符的结构,在识别过程中能有效地结合几何和结构的知识,因此能得到可靠性较高的识别结果。

本文采用预处理后的图像,将字符图像内的像素分成7×7=49个小矩形,对每一个矩形里的像素求和。即将原来的28×28=784维降到7×7=49的点阵。由于49维的特征数量较大,会大大增加运算时间,因而采用垂直投影法将其压缩为7维特征再输入BP神经网络。试验表明,该方法简单而且识别率高。

3 BP神经网络结构设计

本文采用的BP神经网络结构有三层:输入层、隐含层、输出层。将对字符图像提取每一个数字的7维的特征值作为神经网络的输入,因此输入节点为7个。由于隐层神经元的数目很难确定,通过反复实验,采用10个神经元的学习速度和准确度比较高。输出层有10个节点,最大匹配的数字序号即为得到的输出值。

4 BP网络结构及学习规则

4.1 BP网络结构

BP神经网络(Back-Propagation)[2],又称误差反向传递神经网络。它是人工神经网络(ANN)中的一种模型,是利用率很高的一种神经网络,有80%~90%的神经网络采用了BP神经网络或者它的变化形式。BP网络是前向网络的核心部分,体现了神经网络中最精华的内容。BP神经网络是一种依靠反馈值来不断调整节点之间的连接权值而构建的一种网络模型。它的整个体系结构(如下图1)所示,分为输人层、隐藏层和输出层,其中隐藏层根据具体情况的需要,可以是一层结构也可为多层结构。上下层之间实现全连接,而每层神经元之间无连接。当一对学习样本提供给网络后,神经元的激活值从输入层经各中间层向输出层传播,在输出层的各神经元获得网络的输入响应。按照减少目标输出与实际误差的方向,从输出层经过各中间层逐层修正各连接权值,最后回到输入层,这种算法称为“误差逆传播算法”,即BP算法。随着这种误差的传播修正不断进行,网络对输入模式响应的正确率也不断上升。

4.2 BP网络学习规则

为方便阐述,首先对各符号的形式及意义进行说明。

网络输入向量Pk=(a1,a2,…,an);

网络目标向量Tk=(y1,y2,…,yq);

中间层单元输入向量Sk=(s1,s2,…,sp);输出向量Bk=(b1,b2,…,bp);

输出层单元输入向量Lk=(l1,l2,…,lq);输出向量Ck=(c1,c2,…,cq);

输入层至中间层的连接权值wij,i=1,2,…,n, j=1,2,…,p;

中间层至输出层的连接权值vjt,j=1,2,…,p, t=1,2,…,p;

中间层各单元的输出阈值θj,j=1,2,…,p;

输出层各单元的输出阈值γt,t=1,2,…,p;

参数k=1,2,…,m。

(1)初始化。给每个连接权值wij、vjt阈值,θj与γt赋予区间(-1,1)内的随机值。

(2)随机选取一组输入和目标样本提供给网络。

(3)用输入样本、连接权值wij和阈值θj计算中间层各单元的输入sj,然后用通过传递函数计算中间层各单元的输出bj

(4)利用中间层的输出bj、连接权vjt和阈值γt计算输出层各单元的输出Lt,然后利用Lt通过传递函数计算输出层各单元的响应Ct。

(5)利用网络目标向量网络的实际输出Ct,计算输出层的各单元一般化误差

(6)利用连接权vjt、输出层的一般化误差dt和中间层的输出bj计算中间层各单元的一般化误差

(7)利用输出层各单元的一般化误差与中间层各单元的输出bj来修正连接权vjt和γt。

(8)利用中间层各单元的一般化误差输入层各单元的输入Pk=(a1,a2,…,an)来修正连接权wij和阈值θj。

(9)随机选取下一个学习样本向量提供给网络,返回到步骤(3),直到m个训练样本训练完毕。

(10)重新从m个学习样本中随机选取一组输入和目标样本,返回步骤(3),直到网络全局误差E小于预先设定的一个极小值,即网络收敛。如果学习次数大于预先设定的值,网络就无法收敛。

(11)学习结束。

其中,(7)~(8)步为网络误差的“逆传播过程”,(9)~(10)步用于完成训练和收敛过程。

5 网络训练及识别结果

本文实验采用Mnist手写数据库,随机挑选了2000个训练样本,500个测试样本。实验使用matlab7.4标准完成。值得说明的是,在训练集上做到的识别率不是100%,这在大样本库上是允许的。测试结果如表1所示:

6 总结

BP神经网络模型在模式识别方面得到了较广泛的发展。本文在经典BP网络结构的基础上,根据问题的解决需要,通过改变输入层、隐含层及输出层的网络结点数,用已知样本库进行训练,修改输入层、隐含层及输出层间的权值,从而使整个网络达到稳定。实验表明,能较好地识别手写的数字符号。由于BP网络本身固有的缺点,难以找到全局收敛点,所以还需进行改进,如:结合模拟退火算法或遗传算法,可以适当改变其收敛特性,这将在以后继续加以研究。

参考文献

[1]Cao J,Shridhar M.A Hierarchical Neural Network Architec-ture for Handwritten Numerral Recognition[J].Pattern Rec-ognition,1997,30(2):289-294.

[2]边肇祺,张学工.模式识别[M].北京:清华大学出版社,1999:250-257.

[3]韩宏,杨静宇.神经网络分类器的组合(J).计算机研究与发展.2000,(12):1488-1492.

上一篇:女性心血管疾病下一篇:产量比较论文