1、摘要 联机字符识别是模式识别中一个非常重要和活跃的研究领域,字符识别不是 一项孤立的技术,它所涉及的问题是模式识别的其他领域都无法回避的;应用上,作为一种信息处理手段,字符识别有广阔的应用背景和巨大的市场需求。因此,字符识别的研究具有理论和应用的双重意义。 揭示与模拟人脑神经系统机理是研制新一代智能计算机的关键之一。人工神经网络识别方法是近年该研究领域的一种新方法,该方法具有一些传统技术所没有的优点:良好的容错能力、分类能力强、并行处理和自学习能力。这些优点使它在手写体字符的识别中能对大量数据进行快速实时处理,并达到良好的识别效果。其中用BP网络进行特征提取和识别的方法最常见。本设
2、计是利用人工神经网络的BP网络,在Visual C++ 6.0的环境下,开发出联机字符识别软件。 关键词:模式识别,人工神经网络,BP网络,Visual C++ 6.0 ABSTRACT Online Character Recognition is a very important and active research in pattern recognition.Theoretically,it is not an isolated technique.It concerns with the problem
3、that all the other areas of pattern recognition must confronted;Practically,being a kind of information processing measure,character recognition has a very broad application background and vast need of market.Thus,it is of both theoretical and practical significance. And simulation to reveal the me
4、chanism of human brain systems develop a new generation of intelligent computers are one of the keys.Artificial neural network recognition method is a new method of the research field in recent years,and this method has some merit that traditional technique do not have; good tolerance for error,stro
5、ng sorting ability,strong parallel handling ability and strong self-learning ability as well as its off-line training and on-line recognizing.All these merits contribute its perfect performance in handling vast data set and handling in timely manner.BP network with one of feature extraction and iden
6、tification of the most common method. This design is the use of artificial neural network BP network, in Visual C + + 6.0 environment, to develop online character recognition software. Keywords:Pattern Recognition, Artificial Neural Networks, BP network, Visual C++ 6.0
7、 目录 摘要 I ABSTRACT II 第1章 引言 1 1.1 课题背景 1 1.2 研究内容 2 第2章 软件开发环境 3 2.1 VISUAL C++ 6.0概述 3 2.2 MFC的消息处理模式 3 2.3 MFC编程的优点 3 第3章 模式识别 5 3.1模式识别的方法 5 3.1.1 统计模式识别方法 5 3.1.2 结构模式识别方法 5 3.2模式识别的原理 6 3.2.1信息获取 6 3.2.2 预处理 7 3.2.3特征的提取和选择 7 3.2.4分类决策 7 3.3模式识别的应用 8 第4章 BP网络的C语言实现
8、10 4.1 BP网络算法 10 4.1.1 网络模型 10 4.1.2 BP算法 11 4.1.3学习过程 12 4.2 BP网络的不足及改进 12 4.2.1网络的设计问题 12 4.2.2 BP网络的限制与不足 13 4.2.3 BP算法的改进 13 4.3 BP算法的C语言实现 13 第5章 手写字符软件的设计和实现 15 5.1联机字符识别原理 15 5.2笔画的分类 15 5.3笔画识别前的噪声处理 16 5.4统计决策方法 17 5.5作品功能介绍 18 第6章 结束语 21 致谢 22 参考文献 23 附录 部分源代码 24
9、 31 第1章 引言 1.1 课题背景 联机手写字符识别的发展历史可以追溯到本世纪50年代,伴随着手写板硬件的出现,人们开始研究联机手写字符识别技术。随着半导体和计算机技术的发展以及模式识别领域理论和方法研究的不断深入和完善,到80年代后期,联机手写字符识别技术的研究已经朝着实用的方向努力,特别是英文,已经开始研究完全无限制的整句识别技术。 汉字识别技术是在英文、数字识别的基础上,在20世纪60年代末由日本学者首先开始研究的。饭岛、中野、山本等在1973年前后发表了一批有关汉字识别的论文,到1977年完成了日本通产省制定的“图像信息处理系统”中的印刷汉字识别装置,
10、并于1980年10月进行了公开表演。从70年代中期,日本开始研究手写规整汉字识别。进入80年代,日本汉字识别研究日趋活跃。 我国于20世纪70年代末开始研究汉字识别技术,至今已有20多年的历史。其大致可分成3个阶段。1、1979至1985年,识别方法探索阶段。2、1986至1988年,汉字识别系统研制阶段。3、1986年至今,联机手写字符识别走向实用化阶段,手写规整汉字识别的研究进入高潮 [1] 。 汉字如何进入计算机,一直是使用电脑的一大难题。自从汉字编码的方案发明以来,熟记编码、键盘敲入,曾一度成为汉字输入的唯一模式。但是,汉字编码,包括音码、形码及其混合类型对于一般的老百姓来说,有一
11、定的问题:音码虽然容易掌握,但对于发音不准的人,输入常会出错,且重码率太高,不会读音的字更是无法输入;形码可以高速输入,特别适合于看稿输入,对于无稿输入的人用来就有一定的不便。现在形码无一定的标准,种类繁多,且都需要强记大量拆分方案,对于普通人来说,学习起来有困难。另外,不管音码还是形码,都是基于键盘输入的,现在一些微机,袖珍到容不下键盘的程度(如掌上电脑PDA),编码输入就没有用武之地了。 随着计算机技术的发展和大众化的趋势,在越来越强的呼声下,一种新的汉字输入方法――联机手写汉字识别的输入法诞生了。这种汉字输入方法,具有不需要记忆编码方案、不需要键盘操作的优点,特别适合于普通人使用,有着
12、极大的市场潜力。 1.2 研究内容 字符识别是模式识别理论的一个重要应用领域,是实现智能人机接口的重要途径,近几十年来得到广泛的研究。进入九十年代以来,人工神经网络技术发展十分迅速,它具有模拟人类部分形象思维的能力,是一种模仿人脑学习、记忆、推理等认知功能的新方法 [2] 。特别是它的信息并行分布式处理能力和自学习功能等显着优点,更是激起了人们对它的极大的兴趣。为模式识别开辟了新的途径,成了模拟人工智能的一种重要方法。 手写汉字识别是一种重要的、适用于把手写文稿随时输入计算机的方法,也是机器字符识别最为困难的一个课题,这些困难和问题表现在: 1、汉字类别多。仅《康熙字典》中就包含了
13、49000多个汉字,而常用的汉字就有4000多个,因而汉字识别问题属于大类别(或者称为超多类)模式识别问题,在模式识别理论和方法研究方面有重大意义。 2、汉字字形结构复杂。 汉字集合中相似字较多,有些汉字的差别仅为一点或一个笔画,由于手写变形的存在,使得手写体中相似字的区分比印刷体要困难得多。因不同人书写风格的差异造成手写汉字的变形很大,具体表现在以下几个方面: (1)基本笔画变化。横不平,竖不直,直笔变弯,折笔的拐角变成圆弧等。 (2)笔画模糊,不规范,该连的不连,不该连的却相连。 (3)笔画与笔画之间、部件与部件之间的位置发生变化。 (4)笔画的倾斜角、笔画的长短、部件的大
14、小发生变化。 (5)对于脱机手写汉字,不同人使用不同的书写笔可能造成笔画的粗细变化。 其中,手写汉字字形的变化是最难以解决的问题。 一般认为,联机手写汉字识别比脱机手写汉字识别相对容易些。联机手写汉字识别是一种人工实时地把汉字输入计算机的方法,它利用书写板把笔画变为一维电信号,输入计算机的是以坐标点序列表示的笔尖移动轨迹,因而被处理的是一维的线条(笔画)串,这些线条串含有笔画数目、笔画走向、笔顺和书写速度等信息 [2] 。本课题是在Visual C++ 6.0的开发环境下,利用BP人工神经网络进行模式识别,从而进行联机字符识别软件的设计和实现。 第2章 软件开发环境 2.1 Vi
15、sual C++ 6.0概述 Visual C++ 6.0是Microsoft公司开发的基于C/C++语言的集成开发工具,其集代码编辑、编辑、连接、调试等功能于一体,并提供了多种有用的辅助开发工具,它不但大大提高了应用程序的开发效率,还给编程人员提供了一个完善又方便的开发环境。 Visual C++ 6.0拥有两种编程方式:一种是基于Windows API的C编程方式,代码效率较高,但开发难度和工作量也很高;另一种是基于MFC的C++编程方式,代码运行效率脚低,但开发难度小、开发工作量小、源代码效率高。本设计就是运用基于MFC的C++编程方式。 2.2 MFC的消息处理模式 在MF
16、C(Microsoft Foundation ClassLibrary) 中,将指定的消息与某个处理函数建立联系称为消息的映射。这些函数都以afx_msg声明,用户可以重载 [2] 。 当MFC接收到一条Windows消息后,首先查询内部数据,确定发送消息的窗口,找到相应的窗口类,如果此类为这一消息提供了处理函数,则消息被送到处理函数处理,否则MFC则对此类的基类检查有无处理函数,一次层层上移。对命令消息的处理则不同,当一命令被送到一个类时,先试着处理这一命令,或者传到其他目标。 MFC中提供了ClassWizard,它允许用户对MFC的框架类进行控制,增加成员变量,进行消息映
17、射以及有关的OLE自动化的一些工作。 (1)打开项目,选择 View菜单中的ClassWizard命令。 (2)单击Add Function按钮增加消息处理函数,在对话框的Member Function列表框中显示出相应的函数名,单击Edit Code按钮,进入相应的函数的代码编辑。 (3)通过ClassWizard重载消息的响应函数 2.3 MFC编程的优点 对于任何一种操作系统,如果想在其上进行应用程序开发,那么就必须了解它所提供的API(Application Program Interface,应用编程接口)。如果说以前的标准Windows API 函数库适用于编写Win
18、dows 应用程序的C函数库,那么MFC则是用于编写Windows 应用程序的C++类库。 MFC一层次结构组织,其中封装了大部分Windows API 函数,所包含的功能涉及到整个Windows操作系统。MFC不仅为用户提供了Windows图像环境下应用程序的框架,而且提供了创建应用程序的框架。使用MFC类库和Visual C++提供的高度可视化的应用程序集成开发环境,可以极大地简化应用程序的开发过程,缩短开发周期,并且在代码的可靠性和重用性上可以得到很大的提高。 在面向对像的程序设计中,MFC提供一个功能完整的应用程序框架,是程序员可以将其方面地扩展为一个完整的Windows应用程序。
19、这使得程序员不必重新从头设计,从而节省了大量的开发时间。而且MFC类库所提供的大量的以类为基础的代码框架,非常有利于编成是某些良好架构的形成和具体功能的实现。 MFC类库的优越性: MFC完整地封装了Windows API函数,不仅包括最常使用的与窗口、控件、菜单和对话框等有关的API函数,并且包括具有共性的应用程序操作,如打印、状态条和工具栏等。 MFC库具有与以C为基础的Windows API开发的Windows应用程序共存的能力。在同一程序中,程序员可以同时使用MFC中的类和Windows API函数 。 MFC提供了自动的消息处理功能。MFC库将自动处理每一条Windows消息
20、且每一条 Windows消息被肢解映射到一个进行相应处理的成员函数。 MFC提供了面向对像的Windows应用程序接口,与传统的Windows API相比较,它具有以下一些明显的优势。 (1)有效简化了编写Windows应用程序的难度。 (2)与C语言API具有相当的执行速度,是经常使用的代码量最小化。 (3)能够直接调用任何一个API函数的能力。 (4)比C语言的Windows API更易使用。 更容易使用一些强大的复杂功能的抽像概念,如ActiveX、打印、工具栏河状态栏等。 第3章 模式识别 3.1模式识别的方法 从模式识别技术途径来说,由模式空间经过特征
21、空间到类型空间是模式识别所经历的过程。在模式识别范畴内,在客观世界里存在这样的一些物体和事件,它们都能被适当选择的和足够多的函数来描述,或者说他们在物理上都是可以测量的,它们的可测数据的集合就称为物理上可以观察到的世界 [3] 。 有两种基本的模式识别方法,即统计模式识别方法和结构模式识别方法,与此相应的模式识别系统都有两个过程(设计与实现)所组成。“设计”是指用一定数量的样本(训练集/学习集)进行分类器的设计。“实现”是指用所设计的分类器对待识别的样本进行分类决策。 3.1.1 统计模式识别方法 统计模式识别方法是发展较早也比较成熟的一种方法。被识别对象首先数字化,变换为适于计算机处理
22、的数字信息。一个模式常常要用很大的信息量来表示。许多模式识别系统在数字化环节之后还进行预处理,用于除去混入的干扰信息并减少某些变形和失真。随后是进行特征抽取,即从数字化后或预处理后的输入模式中抽取一组特征。所谓特征是选定的一种度量,它对于一般的变形和失真保持不变或几乎不变,并且只含尽可能少的冗余信息。特征抽取过程将输入模式从对象空间映射到特征空间。这时,模式可用特征空间中的一个点或一个特征矢量表示。这种映射不仅压缩了信息量,而且易于分类。在决策理论方法中,特征抽取占有重要的地位,但尚无通用的理论指导,只能通过分析具体识别对象决定选取何种特征 [3] 。特征抽取后可进行分类,即从特征空间再映射到
23、决策空间。为此而引入鉴别函数,由特征矢量计算出相应于各类别的鉴别函数值,通过鉴别函数值的比较实行分类。 3.1.2 结构模式识别方法 其基本思想是把一个模式描述为较简单的子模式的组合,子模式又可描述为更简单的子模式的组合,最终得到一个树形的结构描述,在底层的最简单的子模式称为模式基元。在句法方法中选取基元的问题相当于在决策理论方法中选取特征的问题。通常要求所选的基元能对模式提供一个紧凑的反映其结构关系的描述,又要易于用非句法方法加以抽取。显然,基元本身不应该含有重要的结构信息。模式以一组基元和它们的组合关系来描述,称为模式描述语句,这相当于在语言中,句子和短语用词组合,词用字符组合一样。基
24、元组合成模式的规则,由所谓语法来指定。一旦基元被鉴别,识别过程可通过句法分析进行,即分析给定的模式语句是否符合指定的语法,满足某类语法的即被分入该类。 模式识别方法的选择取决于问题的性质。如果被识别的对象极为复杂,而且包含丰富的结构信息,一般采用句法方法;被识别对象不很复杂或不含明显的结构信息,一般采用决策理论方法。这两种方法不能截然分开,在句法方法中,基元本身就是用决策理论方法抽取的。在应用中,将这两种方法结合起来分别施加于不同的层次,常能收到较好的效果。 3.2模式识别的原理 本设计主要用统计模式识别方法,主要由以下几个部分组成:信息获取、预处理、特征提取和选择、分类决策,如图3
25、1所示。 信息获取 预处理 特征提取和选择 分类器设计 分类决策 图3-1 模式识别系统的基本结构 3.2.1信息获取 为了使计算机能够对各种现象进行分类识别,要用计算机可以运算的符号来表示所研究的对象,通常输入的对象的信息有以下3种类型。 1、二维图像 如文字、指纹、地图、照片这类对象。 2、 一维波形 如脑电图、L1电图、机械震动波形等。 3、 物理参量和逻辑值 前者如在疾病诊断中病人的体温及各种化验数据;后者如对某参量正常与否的判断,可用逻辑值即0或1表示。 3.2.2 预处理 预处理的目的是去除噪声,加强有用的信息,并对输入
26、测量仪器或其他因素所造成的退化现象进行复原。 手写体有很大的可变性,因为每个人的书写习惯不同,且同一个人在不同的状态下写出的字体也是不同的,字体背景也有很大的差异,且在扫描过程中易混入噪声,这些均导致识别难度较大。因此,在识别之前,待识别的数字图像必须经过预处理。预处理工作包括去噪、平滑、二值化、归一化、细化。 3.2.3特征的提取和选择 由图像或波形所获得的数据量是相当大的。为了有效地实现分类识别,就要对原始数据进行变换,得到最能反映分类本质的特征。这就是特征提取和选择的过程。首先对得到的曲率图进行归一化处理,它包括对相同坐标曲率归一化和临近坐标的归一化处理,其次是坐标相对于重心和周长
27、的归一化处理。 若相邻坐标通过取整表示的是同一点,则取其中一个坐标点,而在该点的曲率值则是这些坐标的曲率值的算术平均值。对由a中形成的曲率值若相邻三坐标的曲率值符号轮流改变,则取这相邻三坐标曲率值的算术平均值。设由b得到的坐标为(x,y),则相对于重心和周长的归一化坐标[3]。 通过以上处理,既进一步平滑了数据,同时坐标值对字符大小又减少了敏感性。这样可提取特征作为该字符或汉字的识别模板。 3.2.4分类决策 分类决策就是在特征空间中用统计方法把识别对象归为某一类别。有基本方法是在样本训练集基础上确定某个判决规则,使用这种判决规则对被识别对象进行分类所造成的错误识别率最小或引起的损
28、失最小。 目前常用的识别方法有相关匹配法、句法分析法、松弛匹配法和人工神经网络识别法。相关匹配法是通过在特征空间中,计算输入特征向量与各模板特征向量之间的距离或相关性来进行分类判决,其中距离最小或相关性最大的模板特征向量所对应的字符就是识别结果。采用不同的距离和相关性度量定义就可以得到不同的匹配方法。相关匹配法是一种统计识别方法。统计识别方法的优点是特征提取和模板的建立都比较容易,抗干扰能力强,对局部噪声不敏感;缺点是分辨相似字符的能力较弱,对书写风格的变化比较敏感。句法分析法是通过分析字符的结构特征,找出字符的语言描述,根据语言学的某些规律,通过对一定量字符的训练,找出不同分类的语法描述,
29、在识别过程中,通过对待识字符形式语言的语法 分析来进行识别分类工作。这种方法在汉字识别中应用较广。句法分析法是典型的结构识别方法,由于其侧重点是在笔段形状、位置以及笔段之间相互关系的分析上,它的优点是分辨相似字的能力较强,对书写风格的变化不敏感;缺点是对局部噪声敏感,特征提取比较复杂。无论是相关匹配法还是句法分析法,都要求输入的特征向量和模板特征向量的各分量之间具有确切的对应关系。然而在结构分析中,往往事先难以确定两者各分量间的对应关系,此时,就要采用松弛匹配法。松弛匹配法首先通过迭代运算,找出输入向量与模板向量各分量间的对应关系;然后再根据这一对应关系进行匹配。松弛匹配法兼具统计方法和结构
30、方法的特长。由于它是根据总体的匹配程度来决定识别结果的,这一点它类似于统计方法,同时它在迭代中还把基元间位置关系等结构信息考虑在内,这一点又很像结构方法.因此松弛匹配法在字符识别中取得了较好的效果,它不仅可以用于特征点的匹配,而且还可以用于笔段、笔划和部件的匹配。其主要缺点是运算量较大,识别中往往需要增加预分类环节以减少运算量。另外,它吸收畸变的能力也有不足。 3.3模式识别的应用 模式识别可用于文字和语音识别、遥感和医学诊断等方面。 (1)文字识别 汉字已有数千年的历史,也是世界上使用人数最多的文字,对于中华民族灿烂文化的形成和发展有着不可磨灭的功勋。所以在信息技术及计算机技
31、术日益普及的今天,如何将文字方便、快速地输入到计算机中已成为影响人机接口效率的一个重要瓶颈,也关系到计算机能否真正在我过得到普及的应用。目前,汉字输入主要分为人工键盘输入和机器自动识别输入两种。其中人工键入速度慢而且劳动强度大;自动输入又分为汉字识别输入及语音识别输入。从识别技术的难度来说,手写体识别的难度高于印刷体识别,而在手写体识别中,脱机手写体的难度又远远超过了连机手写体识别。到目前为止,除了脱机手写体数字的识别已有实际应用外,汉字等文字的脱机手写体识别还处在实验室阶段 [4] 。 (2)语音识别 语音识别技术技术所涉及的领域包括:信号处理、模式识别、概率论和信息论、发声机理和听
32、觉机理、人工智能等等。近年来,在生物识别技术领域中,声纹识别技术以其独特的方便性、经济性和准确性等优势受到世人瞩目,并日益成为人们日常生活和工作中重要且普及的安验证方式。而且利用基因算法训练连续隐马尔柯夫模型的语音识别方法现已成为语音识别的主流技术,该方法在语音识别时识别速度较快,也有较高的识别率。 (3)遥感 遥感图像识别已广泛用于农作物估产、资源勘察、气象预报和军事侦察等。 (4)医学诊断 在癌细胞检测、X射线照片分析、血液化验、染色体分析、心电图诊断和脑电图诊断等方面,模式识别已取得了成效。 第4章 BP网络的
33、C语言实现 4.1 BP网络算法 人工神经网络(Artificial Neural Networks, ANN),一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型 [8] 。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。人工神经网络具有自学习和自适应的能力,可以通过预先提供的一批相互对应的输入-输出数据,分析掌握两者之间潜在的规律,最终根据这些规律,用新的输入数据来推算输出结果,这种学习分析的过程被称为“训练”。BP神经网络(Back propagation Neural Network)就是前馈多层神经网络,由输入层,隐
34、含层,输出层组成。层与层之间采用全链接方式,同层之间不存在相互链接 [8] 。是人工神经网络的一种,都由人工神经元组成,如图4-1所示。 图4-1 人工神经元模型图 该神经元单元由多个输入,i=1,2,…,n和一个输出组成。 4.1.1 网络模型 神经网络是一个并行和分布式的信息处理网络结构,连接机制结构的基本处理单元与神经生理学类比往往称为神经元,每个构造网络的神经元模型模拟一个生物神经元。每个神经元只有一个输出,它可以连接到很多其他的神经元,每个神经元输入有多个连接通道,每个连接通道对应于一个连接权系数。 三层BP神经网络如图4-2所示,设输入层有n个神经元节点,隐含层有q个
35、神经元节点,输出层有m个神经元节点. BP神经网络结构(n、q、m )确定后,神经网络还包括的参数有: : 输入层第i单元到隐含层第j单元的权重,i=1,…,n;j=1,…,q。 :隐含层第j单元到输出层第k单元的权重,j=1,…,q;k=1,…,m。 :隐含层第j单元的激活阈值,j=1,…,q。 :输出层第k单元的激活阈值,k=1,…,m。 :激活函数采用S型函数,即。 图4-2 3层BP网络结构 可以看出,BP网络一般情况下有一个输入层,一个隐藏层(有时是两个或更多),一个输出层 [8] 。 4.1.2 BP算法 输入节点,隐层节点,输出节点。输入节点与隐层节点
36、间的网络权值为,隐层节点与输出节点间的网络权值为。如图4-3所示。 图4-3 BP算法的简易模型 当输出节点的期望值为时,BP算法如下: (1) 隐层节点的计算输出: (2)输出节点的计算输出: (3)权值的修正,输出节点的误差: 输出单元的权值对误差的影响: 4.1.3学习过程 (1)输入模式顺传播:输入模式由输入层经中间层向输出层的模式顺传播过程。 (2)输出误差逆传播:网络的期望输出与网络实际输出之间的误差,由输出层经中间层传向输入层的误差逆传播过程。 (3)循环记忆训练:模式顺传播与误差逆传播的计算过程反复交替循环进行。
37、 (4)学习结果判别:判定网络的全局误差是否趋向极小值的学习收敛过程。 4.2 BP网络的不足及改进 在进行BP网络的设计时,一般应从网络的层数,每层中的神经元个数的激活函数、初始值以及学习速率等几方面来进行考虑 [9] 。 4.2.1网络的设计问题 1、网络的层数: 理论上已经证明:具有偏差和至少一个S型隐藏层加上一个线性输入层的网络,能够逼近任何有理函数。增加层数可以进一步的降低误差,提高精度,但同时也使网络复杂化 [12] 。另外不能用仅具有非线性激活函数的单层网络来解决问题。因为能用单层网络完美解决的问题,用自适应线性网络也一定能解决,而且自适应网络的运算能力还要快。而
38、对于只能用非线性函数解决的问题,单层精度又不够高,也只有增加层才能达到期望的效果。 2、 隐藏层神经元数: 网络训练精度的提高,可以通过采用一个隐藏层,而增加其神经元数的方法来获得,这在结构实现上,要比增加更多的隐藏层要简单的多。 4.2.2 BP网络的限制与不足 1、需要较长的训练时间 主要是由于学习速率太小所造成的。可采用变化的学习速率来加以改进 [9] 。 2、 完全不能训练 主要表现在网络的麻痹上。通常为了避免这种情况的产生,一是选取较小的初始权值,二是采用较小的学习速率。 3、 局部最小值 采用多层网络或较多的神经元,有可能得到更好的效果。 4.2.3 BP算法的
39、改进 BP算法改进的主要目的是为了加快训练速度,避免陷入局部极小值的改善其他能力。BP算法在修改权值时,只是按照现在时刻的负梯度方向修正,并没有考虑到以前积累的经验,即没有利用以前时刻的负梯度方向,从而使网络的学习过程收敛缓慢,收敛震荡。因此,采用有动量的梯度下降法,引入动量因子α,则: 是动量因子,当α=0时,权值修正只与当前负梯度有关系,当α=1时,权值修正就完全取决于上一次循环的负梯度了 [10] 。 4.3 BP算法的C语言实现 首先,定义一个BP网络: BPNN*net; 接着,初始化一个随机数种子: Bpnn_initialize(seed);
40、 然后,就创建BP网络了,调用函数bpnn_create()如下: bpnn_create(m,n,k);其中,m、n、k分别是BP网络的输入层、隐藏层及输出层的神经元个数。 最后,将输入模式以及目标模式传递给net,然后进行训练: bpnn_train(net,eta,momentum,eo,eh); 上式中,eta是学习系数,momentum是动量因子,可以都取为0.3左右或其他的值。eo和eh分别是输出层和隐藏层的误差。 当训练足够量和数据后,如果误差还没有收敛到某个可以接受的值,则训练不成功,退出;如果中途误差已经满足了要求,则训练成功。 训练成功后也需要通过free(ne
41、t)来释放内存。 当然了,也可以通过bpnn_read()或者bpnn_save()从文件中读取网络的参数或者把网络的参数保存到文件中。 当已经训练好一个BP网络的参数时,可以通过调用函数bpnn_feedforword()来进行识别。 第5章 手写字符软件的设计和实现 5.1联机字符识别原理 由图5-1可见,汉字经过手写输入后,形成一个点坐标序列,然后进行预处理,过程可能包括规范化、去噪声等。在特征提取出来后,需要将它与储存在字典中的已知的字符特征比对,以识别出是哪个字符。然后系统将字符识别结果变为文本输出。 手写输入
42、 预处理 特征提取 识别 输出 特征模版集合模版 学习 图5-1 联机字符识别原理框图 由图5-1可见,汉字经过手写输入后,形成一个点坐标序列,然后进行预处理,过程可能包括规范化、去噪声等。在特征提取出来后,需要将它与储存在字典中的已知的字符特征比对,以识别出是哪个字符。然后系统将字符识别结果变为文本输出。 5.2笔画的分类 汉字的笔画分类方法有很多种,笔画分的太细,必然增加汉字的复杂程度,而且也容易造成笔画的误识。笔画分的太粗,汉字的重码相应增大,给下一级处理带来困难,笔画的分类应该便于识别,对书写模糊的笔画也能作出正确的分类。把构成所有汉字的笔画分为两大类,即单向
43、笔画和变向笔画 [11] 。这里单向笔画表示笔画的走向保持在某一方向上,即人们通常所指的基本笔画,包括有横(笔画代码1)、竖(笔画代码2)、撇(笔画代码3)、捺(笔画代码4);变向笔画表示笔画的走向不只是出现在某个方向,可能会有两个或两以上的方向,即人们通常所指的复合笔画。 5.3笔画识别前的噪声处理 般由于在原始笔画的坐标数据中,有大量的冗余和噪声,必须对这些输入数据进行预处理以消除这些冗余和噪声。处理的方法有很多,这里根据汉字的特点,把笔画走笔方向进行8方向编码,如图5-2,将坐标平面的分为8个区,按顺序编号为1、2、3、4、5、6、7、8。 7 6
44、 8 5 1 4 2 3 图5-2 8方面编码示意图 原始数据的滤波处理分2步:第1步是对原始点坐标的滤波;第2 步是对由这些点的方向码的滤波。 1、 原始坐标数据的滤波 平滑滤波处理 由于同一笔画中相邻点具有一定相关关系,不可能出现距离较大的相邻点,可以采用一种有限的平滑处理方法 [11] 。 其中,(,)是笔画在t时刻的坐标,下标p表示经过平滑后的数据,是平滑系数,,越大,平滑后两点的相关性越大,反之为0 ,不进行平滑处理。是判断冗余点和噪声点的距
45、离阀值。 2、 方向码的滤波处理 由于在实际的书写过程中,输入的笔画并不很标准,在方向码序列中,还含有大量的噪声的人为的错笔,这就需要对方向码进行滤波。 (1) 笔画起始处和终止处的噪声 人们书写习惯容易在落笔的抬笔时引入噪声,一般消除同一笔画的前一,两个方向码和后两个方向码,能克服这种噪声。 (2) 笔画平直处的噪声 笔尖的抖动容易造成在一串相同的方向码中混有一个或两个不同的方向码,删除这种方向码,即可克服这种噪声。 (3) 笔画变向处的噪声 在笔画变向处容易引入噪声,出现一个或两个方向码与前后方向码不相同,删除就可以克服噪声。 5.4统计决策方法 统计决策方法是
46、提取待识别的输入模式的一组统计特征,形成该模式的多维特征向量,再依据一定准则的决策函数,跟已储存的一批标准模式的多维特征向量的集合匹配判别,找出特征向量接近输入模式的标准模式,该模式就作为未知的输入模式。例如,把输入的点序列按照位置分成MN块,每块为PQ点阵。取每块中黑点数目为特征向量,共有MN个特征向量~形成该字的MN维特征向量X=(,, ,)。如果要在国标一级汉字(共3755)范围内识别,需预先把3755个汉字MN块中黑点数目,即特征向量求出来,i从1到3755。把相同的归为一类,设共有类()。每一类一个模板。把类模板放入字典,每个模板都是一个MN维向量。识别就是判别输入文字的特征
47、向量X属于字典中和哪一类。如果X和字典中第L类特征向量相同,当第L类中的向量多于1个时,判别的结果就是分类,当第L类中向量只有1个时,判别的结果就是识别[12]。 以上是理想情况。事实上,每个类别的标准模板往往不止一个,而是要用一批互有差别的模板来表示该类文字受到各种干扰后的变形。判别输入文字属于哪一类也不是只有当字典模板和输入文字特征完全相同时才能作出判别,而是根据某种准则,相似到一定程度而且彼此又能区分时就可以识别,主要用的判别准则是距离D和类似度R [12] 。距离D常用的是绝对值距离D(X,G): , 式中,X是输入汉字的特征向量,G是储存在字典中的某个字符的特征向量。 X=(
48、 ,) G=(,, ,) 两个向量X和G的相似度定义为: 相似度的物理意义是X,G两向量在m维空间夹角的余弦值。当两个向量完全相同时,D(X,G)=0,R(X,G)=1。 5.5作品功能介绍 最终作品界面如下图5-3所示,左下角白色区域为手写输入区域,手写完成后,点击按钮,就能进行识别,如以前没有学习过要识别的字符,则点击按钮,会弹出如图5-4的对话框,输入字符进行学习。如要清空手写区域,则点击按钮,手写画板会清空。点击则退出程序。经识别的手写字符会以文本格式在程序左上角文本框输出。学习完成后点击 FILE菜单中的SAVE就保存了所学的字符,以便下次
49、识别。FILE菜单中的SAVE就保存了所学的字符,以便下次识别。本设计基本能识别书写规范的字符。 图5-3 联机字符识别软件界面 图5-4 按钮的弹出框 本设计中提出了基于BP神经网络的手写字符识别,并用VC++ 6. 0实现了该系统。图5-5是任意手写的一个字符,图5-6是该字符的特征,图5-7是识别结果。本设计利用具有自适应学习率的改进的BP算法训练神经网络,该方法具有寻优的全局性和精确性,收敛速度快等特点。从测试结果来看,识别效果较好,说明本设计中提出的方法是行之有效的。 图5-5 手写数字8
50、 图5-6 数字8的特征 图5-7 识别结果 第6章 结束语 本文介绍了人工神经网络、BP网络及模式识别的原理。简单阐述了Visual C++ 6.0和MFC的基本概念。接着分析了联机字符识别软件的工作原理,最后在Visual C++ 6.0的开发环境下,利用BP人工神经网络进行模式识别,实现了联机字符识别软件的设计。 经过这几个月的学习,我对模式识别有了进一步和了解,学会了熟悉的应用Visual C++ 6.0进行编程,对C++理解更加透彻了。在整个设计过程中,碰到了很多的困难,最主要的原因是自己所学到的和掌握的知识不够扎实,
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818