APP下载

BP神经网络在图像处理中的应用

2021-03-08吴思涵赵楠楠

电子技术与软件工程 2021年23期
关键词:字符灰度阈值

吴思涵 赵楠楠

(辽宁科技大学电子与信息工程学院 辽宁省鞍山市 114051)

1 引言

数字图像处理技术往往伴随着计算机的发展而发展,比如现阶段的第五代计算机就可以模拟人脑的神经元网络以及一些其他的脑功能,进而大大地提高计算机的处理速度和计算精度[1]。该种技术应用在数字图像识别中,就衍化为了BP神经网络以及其他一些功能,使得处理的过程更加高效、快捷[2]。本文将MATLAB软件作为图像处理的工具,设计了数字图像处理的整个过程。在研究了相关文献后,运用相关算法对图像进行一系列处理。本设计主要由图像读取、图像背景提取、图像二值化、图像分割、数字识别等步骤构成,通过对图像的一系列处理,最终将图片中的数字图像转变为十进制的计算机语言输出出来。

2 图像预处理

2.1 灰度化

图像的灰度化就是将图像的RGB值转换[0,255]的灰度值[3],其中R代表红色,G代表绿色,B代表蓝色,“0”代表纯黑色,“255”代表纯白色,在此范围内就是从黑到白的过渡色,图像的灰度化一般采用rgb2gray指令,比如:

I=imread(‘1.bmp’);

Gray=rgb2gray(I);

就是将彩色图片‘1.bmp’转变为灰度图片,可以调用impixelinfo来查看每个像素点的灰度值,转变过程如图1所示。

图1:图片灰度化过程

2.2 二值化

由于本设计需要将图片中的字母与数字与图片背景分离,所以对图像进行二值化,将图片中的不相关背景灰度值设定为纯白,即255,将有用的信息设置为0,形成非黑即白的黑白图像,方便后期的分割,图像的二值化一般采用im2bw指令,但是由于人为给定的阈值并不总是特别可行,所以需要调用MATLAB工具箱中的graythresh函数,graythresh函数使用最大类间方差法获取阈值,极大的提高了提取的有效性。

level=graythresh(I); %用graythresh函数计算灰度值的门槛

bw2=im2bw(I,level);

2.3 图像分割

图像分割是图像预处理过程中特别重要的过程,当然也是比较复杂的过程,只有分割正确,最后的识别才有可能正确[4]。进行分割一般依据的是图形像素点的亮度以及颜色对比,所以需要排除诸多干扰因素,例如,色彩分布不均匀、噪声、图片背景与所需信息的对比度不明显等,因此图像分割技术一直在不断地完善,不断纠正分割中产生的错误。现阶段图像分割有多种方法,如:阈值分割方法、边缘检测法以及直方图法。本设计主要采用阈值分割[5]的方法.阈值分割是图像分割过程中经常使用的方法,它是图像分割中使用最广泛的一类,通过对图像像素点的统计,找出突变的点,进而设置合适的阈值点,以此来将图片分割为一块一块的区域,阈值分割的关键就是阈值的设置,阈值的数值直接关系到分割的质量。阈值分割的优点计算简单、运行速度快、效率高[6],适合本设计的需求。

本设计先通过对每一列的数值的统计,将统计结果存入histogram数组,然后对数组内数值进行分析,设定阈值,由于阈值不可能完全准确,为了尽可能将图片分割准确,所以后期添加条件语句将不符合的列删除,最终将图片分割为一列一列单独的区域。

根据阈值分割后,将字符左右边界数据存储,如“I”所在列左边界=15,右边界=31,通过指令imshow(bw( 1:y,15:31))就可以将“I”所在列截取出来,同理,可以将其他列截取出。

3 BP神经网络

字符识别是图像识别过程中最重要的过程,识别模式有三种,第一种结构模式识别,它依据字符的特征进行识别,抗干扰能力较差[7],第二种统计模式识别,统计模式主要是通过统计字符的某一特征,设计出识别的规则。第三种混合识别,经过实际的带入操作,本设计最终选取了混合模式来识别字符[8]。混合识别又分为两类,网络化特征与BP神经网络。

BP神经网络是目前应用最广泛的神经网络,它实质上就是一种“误差逆传播反馈”算法,采用最速下降法,通过反方向传播不断自动调整输入层和隐含层的权值,尽可能能消除误差。其原理图如图2所示。

图2:神经网络原理图

其工作原理如下:

(1)将x1、x2、x3、...、xm作为输入层数据。

(2)通过公式(1):

得出一组数据s1、s2、s3、...、sn。

(3)通过激活函数θ,将s1、s2、s3、...、sn变为作为隐含层的输入。

激活函数一般为sigmoid函数,比如可以使用log-sigmoid,见式(2):

(4)根据公式(3):

得到另一组数据s1、s2、s3、...、sk,在通过激活函数,得出输出y1、y2、...、yk。

(5)根据输出结果之间的差即误差e,将误差向前传播得出隐含层误差继续将隐含层误差向前传播,得到输入层误差。

(6)根据误差数据,调整权重,循环往复,直至误差达到要求。

本设计输入数据有:0-9,a-z(缺少o),A-Z(C、O、P、S、U、V、W、X、Z以小写字母为准),共52个输入字符,利用eye(52,52)作为输出,以数字‘4’举例:首先将经过二值化和归一化后的二维矩阵转化为一个一维矩阵,由于设定图片尺寸为110*50,所以转化后则变成了一个1*6050的一维矩阵,存入I1数组中,其他字符相同方式处理,得到I1、I2、I3、...、I52,将之作为输入P,eye(52,52)作为输出T,用newff指令建立BP网络,部分代码如下:

net=newcf(P,T,100,{'logsig','logsig','logsig'},'trainrp');

net.trainparam.epochs=500; %网络的最大训练次数

net.trainparam.show=50;

net.trainparam.goal=0.005; %目标误差

net=init(net);

[net,tr]=train(net,P,T); %建立网络

T0=sim(net,p);%T0输入神经网络得到的输出,T0为52x1的列向量

T1=compet(T0);% 找出最大值的列

k=find(T1==1); %将数值为1的行对应的位置存储到变量k

4 仿真分析

为方便观察,将图片大小均设置为11*5,以最后一张字符图片数字“4”为例,训练过程,先将待识别图片转化为一维矩阵,再将图片库内的52张字符图片转化为一维矩阵存入P, 利用eye(52,52)建立52*52的矩阵,数字“4”对应第4行(000100000....),建立网络,识别结果。如图3所示。

图3:神经网络识别结果

5 结论

本文对图像处理进行设计,经过RGB图像灰度化、二值化、字符分割、边缘检测、平滑去噪、字符识别等过程,基本可以实现简单图片与较复杂图片的识别,不同于单列单行的字符识别,本文可以识别多行多列的段落,更加具有普适性,另外也不再对识别字符的字数进行限定,可以识别任意数量的字符图片。

猜你喜欢

字符灰度阈值
采用改进导重法的拓扑结构灰度单元过滤技术
基于灰度拉伸的图像水位识别方法研究
字符代表几
一种USB接口字符液晶控制器设计
小波阈值去噪在深小孔钻削声发射信号处理中的应用
基于自适应阈值和连通域的隧道裂缝提取
消失的殖民村庄和神秘字符
比值遥感蚀变信息提取及阈值确定(插图)
基于最大加权投影求解的彩色图像灰度化对比度保留算法
基于灰度线性建模的亚像素图像抖动量计算