基于神经网络的数字字符识别系统设计与实现
作者:邓介一 刘黎志 谭培祥 来源:《软件导刊》2017年第05期
摘要摘要:通过MATLAB编程实现一种能识别图片中数字的识别系统。该系统分为预处理、图像处理和神经网络3个核心部分。采用预处理和图像处理技术处理输入图片样本数据,通过经过训练的神经网络完成识别功能。验证结果表明,此系统对样本图片的识别正确率可达到100%,对于部分非样本数据,也可以正确识别。该系统可应用于验证码识别、车牌号识别等场景中。
关键词关键词:MATLAB编程;数字识别;图像处理;神经网络 DOIDOI:10.11907/rjdk.162852 中图分类号:TP319
文献标识码:A文章编号文章编号:16727800(2017)005004704 0引言
图像识别是一项利用计算机对图像进行处理、分析和理解,以识别各种不同模式目标和对象的技术[1]。图像识别技术目前还不能达到人类的认知水平,但在特定应用环境中,可以通过模式识别或者神经网络的方法来对图像中的事物进行分类判断。一般而言,一个数字字符识别系统主要由3个部分组成,如图1所示。 图1系统组成
其中,预处理模块将图片格式(例如JPG格式)转换为计算机能识别的二进制数据流;图像处理模块则实现图像采集与转换、边缘提取、归一化等功能;字符识别模块可以由两种方法实现:模式识别或者神经网络方式,本文系统采用神经网络方式。 1识别目标及预期结果
此系统识别目标是在没有强干扰下,系统能够准确识别出图片中的0~9这10个数字。示例图片如图2所示。
龙源期刊网 http://www.qikan.com.cn
系统识别中所用到的含单个数字的图片取自图2,均为纯色背景(不一定必须为白色背景)图片,且图片中数字图像无较大噪声干扰。系统经过一系列处理后,能成功识别,给出识别结果,并且给出处理过程中各个阶段的图片,以便更好地理解图像处理过程。 2预处理
预处理是将图片二值化的过程。预处理的目的简单来说就是把彩色图片处理为计算机更好处理的二进制数据流。预处理的过程主要分两部分:彩色图转灰白图,灰白图转二进制矩阵形式数据。
目前用于彩色图转换为灰度图的基本算法主要有:最大值法、平均值法、加权法,本文采用加权法。加权法的主要思想是设当前像素的三分量分别为R,G,B,然后利用公式(1)得到转换后的像素分量值:
GRAY=0.3*R+0.59*G+0.11*B(1)
在MATLAB中,函数img2gray就是采用加权法实现的。图像二值化就是将图像像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果。二值化的处理过程是将图像中有意义的特征和需要应用的特征进行分割,利用前景和背景灰度特性的差异,低于阈值的像素设定为一个灰度值,高于阈值的像素设定为另一个灰度值。这样可将前景色与背景色以明显差异的灰度级区分开来[2]。阈值选取有手动选取和自适应选取两种方法。MATLAB中图像二值化的实现主要依靠im2bw函数来实现。图像二值化过程中,最重要的是阈值变换。比如数组a=[120,254,0,200,99],设定一个阈值125,并对a进行阈值变换,那么a中凡是大于125的,则变为255,小于等于125的则变为0。具体对临界情况处理可能不同,不过MATLAB中im2bw函数是按照上述方法处理的。a经过阈值变换后变为[0,255,0,255,0]。在MATLAB中使用im2bw函数进行图像二值化处理时(将图像转换为二值图像),人为设定阈值并不总是十分有效。MATLAB工具箱提供了graythresh函数[3]。该函数使用最大类间方差法得到一个阈值,利用这个阈值进行图像二值化通常有效。
经过预处理后得到的二值化图像,还要经过一系列图像处理过程,才能用于神经网络训练。
3图像处理
图像处理的目的是将图片变为神经网络能处理的数据流。图像处理流程如下:
(1)利用梯度锐化。使得图像更加突出,以便分析。算法:当前点像素值与其下一个像素值之差的绝对值,加上当前点像素值与其下一行当前像素值之差的绝对值,如果结果大于阈值,则当前像素值置为此结果。
龙源期刊网 http://www.qikan.com.cn
(2)去除离散噪声。利用递归方法查找当前像素8个方向是否存在黑色像素,这里设置连续长度为15,如果用递归方法得到连续像素值大于15,则认为不是噪声;相反,则认为是噪声,则置为白色像素。
(3)字符倾斜度调整。尽量保存每个字符的位置一致。
(4)分割字符。找出每个字符的区域,用矩形记录,记录每个字符矩形数据。 (5)字符归一化。根据图像预处理准备阶段设置的归一化标准,把每个字符的区域进行归一化,使得所有字符区域矩形一样大,只是位置不一样。 (6)字符紧密排列。把所有字符紧密排列,以备识别使用。
本文示例样本图片中只有单个数字,且无较大干扰,所以不需要去除离散噪声、字符倾斜度调整、分割字符和字符紧密排列等步骤。经过预处理的图像数据,只需要进行锐化和归一化处理,就可以用于神经网络训练。
图像梯度锐化的目的是使原来的模糊图像变得清晰。MATLAB中使用的梯度函数为gradient函数。Gradient(F)函数求的是数值上的梯度,计算规则:[Fx,Fy]=gradient(F),其中Fx为其水平方向上的梯度,Fy为其垂直方向上的梯度,Fx的第一列元素为原矩阵第二列与第一列元素之差,Fx的第二列元素为原矩阵第三列与第一列元素之差除以2,以此类推,如公式(2)。
最后一列则为最后两列之差。同理,可以得到Fy。
归一化就是把需要处理的数据经过处理后(通过某种算法)限制在要求范围内。对于图像处理中的归一化而言,就是将所有数字图像中的字符归化成为一个具有同一高度、同一宽度的图像,也即让其中的字符具有同样规格。MATLAB中用于实现图像矩阵归一化功能的函数是mat2gray函数[5]。该函数在数字图像处理中经常用到,归一化的具体流程如图4所示。 经过归一化处理之后的图片数据,将其存储在一个矩阵中,用于神经网络的训练。 4神经网络训练
人工神经网络算法主要有两种:一种是先对待识别字符进行特征提取,然后用所获得的特征来训练神经网络分类器[6];另一种方法是直接把待处理图像输入网络,由网络自动实现特征提取直至识别出结果。前一种方法识别结果与特征提取有关,而特征提取比较耗时。因此,特征提取是关键。后一种方法无需特征提取和模板匹配,随着相关技术的进步,这种方法更实用。
龙源期刊网 http://www.qikan.com.cn
神经网络有许多种,在MATLAB中已经有集成神经网络工具箱。本文系统中,对数字图像的识别采用BP神经网络来进行训练。BP神经网络为前馈神经网络,网络的学习状态为有导师学习状态。它是一种具有学习能力和记忆能力的神经网络,主要由输入层、中间层、输出层3个部分组成。输入层、中间层和输出层可以具有不同数量的节点,具体数量随需求而定,没有具体的标准。单层神经网络结构如图6所示。
BP神经网络是误差反传误差反向传播算法的学习过程,由误差的反向传播和信息的正向传播两个过程组成[7]。输入层各神经元首先接收来自外界的输入信息,然后传递给中间层各神经元;输入信息经过中间层内部信息处理,实现信息变换,按照信息变化能力需要,中间层可以布局成多隐层或者单隐层结构;最后,一个隐层传递把信息传递给输出层,通过进一步处理,实现一次学习的正向传播处理过程,输出层把信息处理结果输向外界。当输出结果和预先期望效果不符时,就进行误差反向传播。误差通过输出层,根据误差梯度下降的方式改变各层权值,由隐层向输入层依次反传。多次交替的信息正向传播和误差反向传播过程,是各层连续修正的过程,也是神经网络学习训练的过程,这个步骤一直执行到最终输出的误差降低到能够接受的范围,或者预先输入的学习次数为止。
此系统中所使用的神经网络在中间层设置25个节点,1个输出节点。此系统采用三层神经网络来实现。采用s型对数函数logsig作为隐含层各神经元的传递函数,并采用纯线性函数purelin作为输出层各神经元的传递函数。此神经网络的训练函数采用traingdx,学习模式函数为learngdm。训练步数最长设为5 000,性能目标设为0.001。 神经网络模块的部分代码如下:
net=newff(pr,[25 1],{'logsig' 'purelin'},'traingdx','learngdm'); net.trainParam.epochs=5000; net.trainParam.goal=0.001;
pr为前面图像处理所获得的矩阵数据。
神经网络的训练结果如图7所示。神经网络的性能曲线如图8所示。 5用户交互
考虑到该系统具有一定交互功能,让用户能自主选择需要识别的图片,向系统中添加如下代码段:
test=input('请输入用于测试的图片编号:','s');
龙源期刊网 http://www.qikan.com.cn
x=imread(test,'jpg');
开始运行时,会提醒用户选择需要识别的图片编号,效果如图9所示。
用户输入需要识别的图片序号后,系统给出识别结果和图像处理各阶段中的图片,此处用subplot函数来实现一个窗口中显示多张图片的效果,部分代码如下: 6结语
通过样本识别验证,本文数字识别系统具有一定识别精度。本系统基本做到样本图片的100%识别,对于其它只有单数字的图片,经过训练之后,也能准确识别。本系统实现了部分人机交互功能,能让用户自主选择需要识别的图片,并输出识别结果和各个处理过程中的图片。
参考文献参考文献:
[1]冈萨雷斯.数字图像处理(MATLAB版)[M].阮秋琦,译.北京:电子工业出版社,2006. [2]梁路宏,艾海舟,徐光佑,人脸检测研究综述[J].计算机学报,2002,25(5):449458. [3]罗华飞.MATLAB GUI设计学习手记[M].北京:北京航空航天大学出版社,2009. [4]聂影.MATLAB软件应用研究[J].软件导刊,2014,13(7):102104.
[5]赵春兰.《MATLAB软件应用》课程教学浅析[J].科技创新导报,2015(22):178179. [6]刘毅娟.人工神经网络概述[D].唐山:华北理工大学,2015.
[7]陈流豪.神经网络BP算法研究综述[J].电脑知识与技术,2010,36(6):1036410365. 责任编辑(责任编辑:陈福时)
因篇幅问题不能全部显示,请点此查看更多更全内容