一种手写数字的识别方法与流程

文档序号:15800663发布日期:2018-11-02 21:25阅读:833来源:国知局
一种手写数字的识别方法与流程

本发明属于光学识别技术领域,尤其是一种手写数字的识别方法。

背景技术

识别手写数字的技术是识别光学字符的其中一个分支,该技术能够借助机器或者电脑智能识别各种文本上的数字。由于各国都会用同一种数字,而且目前人们对信息化的需求越来越大,所以手写数字的识别在邮局信函分拣、银行支票录入等大规模数据分析系统中的应用前景是非常广阔的。

目前识别手写数字主要有两种,一种是通过其构造的特点进行识别,另外一种是基于统计特征的识别。世界各国在这个方向上的研究都取得很大成果,例如,为了满足邮件分拣工作的需求,邮电部第三研究所采用识别邮票上邮编的方法去对信函进行分类。上海的交大用的识别算法是基于压缩字结构特征的方法,他们训练时使用了12600个数据,测试用了6000个数据,依靠bp(backpropagation)神经网络作为识别工具,准确率达97.58%,1.38%无法识别。德国friedhelmschwenker识别数字的方法是用sv-rbf40,其中包括10000个测试数据集,识别结果达到98.56%的准确率。但是以上识别方法,或者对书写有规范的要求,或者其使用的测试与训练的数字库都是出一人手里的,这些问题都对书写人有较多的限制。如何实现无限制的识别手写数字是目前迫切需要解决的问题。



技术实现要素:

本发明的目的在于克服现有技术的不足,提供一种手写数字的识别方法,能够在复杂度相似的情况下提高手写数字识别的准确率和识别率。

本发明解决其技术问题是采取以下技术方案实现的:

一种手写数字的识别方法,包括以下步骤:

步骤1、对数字图像进行预处理,包括灰度化数字图像、二值化数字图像、图像除噪处理、字符串分割处理、数字归一化处理和数字细化处理步骤;

步骤2、搭建深度卷积分神经网络模型、配置神经网络参数、生成训练集样本与测试集样本、调参数训练网络并通过训练好的网络模型识别数字。

进一步,所述灰度化数字图像采用yuv方法,将数字图像转换成灰度图。

进一步,所述二值化数字图像通过二值化处理算法大津法和不均匀光照补偿方法对灰度化数字图像进行处理,得到光照补偿后的二值图。

进一步,所述图像除噪处理采用unger平滑滤波方法。

进一步,所述字符串分割处理采用垂直与平行投影法:首先对字符串进行水平投影,然后对映射的特征轴进行切割,把轴看成一幅有波峰与波谷的图,波谷的位置就是切割点,最后再进行垂直投影,将成一行的数字字符串切成单个字符。

进一步,所述数字归一化处理采用双线性插值法:首先将图像放入x,y坐标系内,然后对x轴方向做两次线性插值,最后对y轴方向做一次线性插值。

进一步,所述数字细化处理采用经典的zhang并行快速细化算法进行数字的细化处理。

进一步,所述神经网络模型采取卷积层、池化层、卷积层、池化层、全连接层、全连接层及输出层结构,采用mnist数据集,其中包含的都是大小为28×28的图片。

进一步,配置神经网络参数的方法为:神经网络对权值的初始化方式为xavier方法,均匀分布初始化权值;将偏置初始化为零,学习率采用step算法并且设置权值衰减项。

本发明的优点和积极效果是:

本发明通过对图像进行预处理不仅能显著地降低噪声对图像的影响,而且还可以把大小不一的图像归一化为同一尺寸的图片,这样处理可以压缩大量图像数据,将预处理后的图像送入深度卷积神经网络,生成训练集样本与测试集样本,调参数训练网络,通过训练好的网络模型识别数字,能够在复杂度相似的情况下提高手写数字识别的准确率和识别率,可广泛用于邮局信函分拣、银行支票录入等领域。

附图说明

图1为数字灰度图像;

图2为二值化数字图像;

图3为otsu二值化处理光照不均数字图像;

图4为otsu算法处理经光补偿后的数字图像;

图5为有噪点的测试图片;

图6为像素g的8邻域结构;

图7为除噪后的图片;

图8为切割后的字符;

图9为归一化后的数字图像;

图10为8邻域像素排列;

图11为经算法细化后的数字;

图12为不同训练集的准确率。

具体实施方式

以下结合附图对本发明实施例做进一步详述:

一种手写数字的识别方法,包括以下步骤:

步骤1、采用预处理数字图像模块进行数字图像的预处理。预处理包括以下步骤:

(1)灰度化数字图像步骤。

灰度化数字图像的解决途径是按照yuv的这个概念,其中亮度可以用y代表,其值的大小可以反应图像亮度级别。然后通过yuv与rgb的联系去得到y与图像r、g、b三通道的之间的对应关系:y=0.3r+0.59g+0.11b。最后把这个y值设置成图像的像素值。通过上述处理所得到的新图像就是本实施例需要的灰度图了,如图1所示。

(2)二值化数字图像步骤。

二值化处理就是把像素值映射成像素的极值,通过这样处理,就可以观察到黑白分明的图像,本实施例所采用的二值化方法为大津法(otsu)。它是通过判断图像的灰度之间的关系,从而分成前景图像与背景图像。当阈值通过计算得到最优时,其背景与前景的差别也是最大的时候。otsu算法原理主要是最大类间方差。算法首先计算前景像素与背景像素的类间方差,其值越大就表示背景与前景差别越大。当设置值不是最优的时候,会导致图像背景和前景混淆,造成类间方差减小。所以需要不断改变阈值,然后找到一个最大方差,最后设置该阈值为最终结果。图2给出了二值化后的二值图。

如图2所示,二值化后的二值图是在光照均匀的前提下生成的,当图像受光照不均影响时,在不同区域的背景色度相差很大。使用otsu算法应用于全局图像时,其阈值因为只能是一个固定值,所以会造成二值化产生噪声非常大,如图3所示。本方法针对的是手写数字图像,其环境对数字的的干扰不会太强烈,所以本实施例采取了一种比较简洁且计算量不大的不均匀光照补偿的方法,它可以对亮光区域的像素进行抑制,对较暗区域的像素进行补偿,其方法为:

①首先求出最初图像的平均像素值,并且记录它的宽和高。

②把图像分成数个大小相同的方块矩阵,之后求出每一块的像素的平均值,从而得到像素值矩阵。

③将像素值矩阵与最初图像的平均像素值相减,获取到像素差矩阵。

④采用双线性插值法,将像素差矩阵放大为和原始图像一样大小的像素分布矩阵。

⑤用最初图像矩阵减去像素分布矩阵就可得到光照不均的矫正矩阵。

图4给出了光照补偿后的二值图。

(3)图像除噪处理步骤

数字图像经过二值化处理后可能有少量噪点的出现,如图5所示。为了解决这个问题,预处理模块需要增加消除噪声和平滑图像的功能。本实施例采用的滤波方法为unger平滑滤波,该滤波方法能有效的除去麻点噪声并且数字像素并不受滤波影响并不大。其实现过程如下:

①检查图像中3×3窗口的图像结构细节,首先设置3×3窗口,窗口如图6所示。

②当图6中g点像素为0(0为黑色像素)时,如果p0+p1+p2=3和p4+p5+p6=3同时成立或者p2+p3+p4=3和p6+p7+p0=3同时成立则让g点像素置为0。

③当图6中g点像素为1(1为白色像素)时,如果p0+p2+p4+p6<=1成立则让g点像素置为1。

④对图像循环执行a、b、c三个步骤,直到滤波完成。图7为除噪后的图片,由图可见该算法对数字图像滤波除噪是非常有效的。

(4)字符串分割处理步骤

因为本发明所能识别的手写数字为单个的数字,所以在进行连续的手写数字识别时应该对数字先进行切割处理,使连续的数字能够分成单独数字。因为人们在手写数字时基本需要遵从基本的书写要求,很少有粘连的手写数字字符串出现,因此采用垂直与平行投影法作为本实施例的切割算法。字符串切割首先进行水平投影,然后对映射的特征轴进行切割,把轴可以看成一幅有波峰与波谷的图,波谷的位置就是切割点。最后我们再进行垂直投影,把成一行的数字字符串切成单个字符,如图8所示。

(5)数字归一化处理步骤

因为人们手写数字的大小各不相同,而且数字图像也因拍摄时的角度和距离等各种条件的影响各有不同,这样就会导致我们之前几个步骤处理后的单个字符大小都是不一样的,所以在预处理模块中,图像归一化是非常重要的一个环节。本实施例采用双线性插值法,该算法不仅仅考虑到了最邻近的点,它还会考虑到采样像素点邻近的四个像素点。这种算法需要多次插值后才能得到需要的坐标,首先将图像放入x,y坐标系内,然后对x轴方向做两次线性插值,最后对y轴方向做一次线性插值。归一化后的数字图像如图9所示。

(6)数字细化处理步骤

数字图像经过前几步的预处理之后,基本达到识别格式的要求。但是对数字做额外的细化处理可以提高识别精度,因为对数字进行细化后可以减少数字图像中的冗余像素点,所以当系统做数字识别分类时就可以消除数字图像中因笔画粗细不同而带来的负面影响。

本实施例将采用经典的zhang并行快速细化算法进行数字的细化处理。该算法是一种8邻域的并行细化算法,它可以使细化后图像的直线、t行交叉和拐角比较精准的保留其特性,而且它具有迭代次数少,运行速度快等特点。

该算法为迭代算法,其迭代过程分为两步,算法的主要实现步骤为:

第一步:逐步循环扫描图10所示8邻域像素排列,然后删除符合以下条件的像素点:

①2≤n(a1)≤6

②s(a1)=1

③a2×a4×a6=0

④a4×a6×a8=0

n(a1)的数值是图10中与a1邻近的八个像素点中为1(白色像素点)的个数。s(a1)的数值是依照图10中(a1,a2,a3,a4......a8,a9)的顺序出现(0,1)的次数。

第二步:本步骤的前两个条件与第一步中的前两个条是一样的,只有最后两个条件有所区别,如果图10中像素点a1满足步骤二中的四个条件,则将像素点a1删除。步骤二的四个条件:

①2≤n(a1)≤6

②s(a1)=1

③a2×a4×a8=0

④a2×a6×a8=0

对图像循环执行上述的两个步骤,直到这两个步骤中没有可以删除的像素为止。最后处理后的结果就是图像细化后的骨架,如图11所示。

步骤2、神经网络搭建并进行手写数字识别。

(1)神经网络模型的搭建

本实施例实现的神经网络采取了近似的lenet-5的模型。其基本结构分为七层,与lenet-5类似的为卷积层、池化层、卷积层、池化层、全连接层、全连接层与最后的输出层。

但是不同的是本实施例采用mnist数据集,其中包含的都是大小为28×28的图片,所以本网络的输入向量为28×28的长度。

第一层的卷积层会用二十个种类不同高宽为五卷积核得到二十个高宽为二十四featuremap,接下来的第二层为池化层,本实施例池化层所采用的方法为最大采样法,即选择最大值作为采样的值,并且产生高宽为十四的featuremap。lenet-5的降采样会用一个权值和偏置进行运算,并且在训练时也会调整这两个权值和偏置。但是本实施例因为采用最大采样法,所以该层并无需要训练的权值与偏置。

第三层和第四层为卷积层与池化层,其中卷积层会产生五十张高宽为八的featuremap,池化层则会产生五十张高宽为四的featuremap。之后会接一全连接层,该层会产生五百个节点,然后用relu函数作为激活函数进行输出。虽然lenet-5会采用sigmoid作为激活函数进行输出,但是本实施例用relu作为激活函数,这样可以消除梯度消失问题,并且加速了神经网络的收敛。

剩下的一个全连接层需要将五百个节点通过权值与偏置的计算全连接为十个节点,最后输出层用softmax函数进行分类。在test的网络中,本实施例会加一个accuracy层,它的意义很简单,就是返回训练时候的精确度。

(2)神经网络参数的配置

本实施例神经网络对权值的初始化方式为xavier方法,因为权值初始化时候尺度不均将会使网络训练时梯度的改变同样不均匀。简单来讲就是网络在初始化权值时需要进行一下对将来做反向传播时的一个预测,网络应该避免反向传播时不稳定性,所以需要均匀分布的初始化权值。对于偏置,本网络会将偏置初始化为零。

在本网络中学习率采用的为step算法,学习率base_lr会根据一个常量gamma与迭代步长stepsize来进行学习率的更新。更新学习率的计算公式如下:

base_lr=base_lr*gamma^(floor(iter/stepsize))

根据此式可以发现学习率在最开始时是最大的,随着迭代的进行会也会慢慢减小。这也是网络训练中当开始训练时会以较大的幅度进行权值的更新,在网络精确度提高后会采用小幅度的搜索对权值更新。

本网络设置学习率为0.01,学习率的算法为step,动量为0.9,采取的梯度下降方法为sgd算法。训练集的batch大小为64,测试集batch大小为100。

并且本网络中会设置权值衰减项(weight_decay),该项是为了防止网络发生过拟合现象。因为发生过拟合的过程中,网络的权值会越来越大。所以如果要防止这种情况发生,网络需要在计算误差时候在函数后加上惩罚项。该项一般计算全部权值的平方乘上一个常量,最后求和。该常量被称为衰减系数。这种方法可以让权值收敛到较小的绝对值。并且它能够惩罚大的权值,减少其泛化性能。

为了验证本发明的效果,进行如下试验:

采用mnist数据集,其中60000张训练图片,10000张测试图片。其中因为需要提高识别自己预处理后的手写数字,所以本实施例将通过之前预处理步骤制作了一千张手写数字的数据集混入mnist数据集中。为了测试训练集中混入自己的手写数字后的性能,本实施例使用500张自己制作的手写数字图像与500张mnist测试集中的数字图像作为总测试集,从而测试系统的准确率。如图12所示,测试发现只使用mnist数据集作为训练集准确率为95.53%,使用混入数据后的训练集准确率为99.16%。之所以最后的准确率提高非常快,一个原因是本实施例预处理过程与mnist的预处理过程不完全相似,以至于预处理的一些效果有些差距。第二个原因是因为字符的写法稍有不同,所以多增加一些样本进行训练,这样可以使网络提取到更多不同的特征,从而最后的识别率也会增加。

需要强调的是,本发明所述的实施例是说明性的,而不是限定性的,因此本发明包括并不限于具体实施方式中所述的实施例,凡是由本领域技术人员根据本发明的技术方案得出的其他实施方式,同样属于本发明保护的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1