(整理)BP神经网络识别.

(整理)BP神经网络识别.
(整理)BP神经网络识别.

Abstract 2

一引言: (3)

二字符图像获取: (3)

三字符预处理 (4)

3.2 字符区域 (4)

3.2 字符区域分割: (4)

3.3 单个字体分割: (4)

3.4 单个字体裁剪 (5)

四模板字符识别 (5)

4.2 字符模板归一化 (5)

五BP神经网络字符识别 (5)

5.1 训练样本制作 (6)

5.2设计BP神经网络 (6)

5.3 BP训练 (7)

六识别结果发送下位机 (7)

5.1 MATLAB下的串口工具: (7)

5.2 下位机处理 (7)

5.2. 3 串口通信图: (9)

七总结: (9)

摘要

在MATLAB环境下利用USB摄像头采集字符图像,读取一帧保存为图像,然后对读取保存的字符图像,灰度化,二值化,在此基础上做倾斜矫正,对矫正的图像进行滤波平滑处理,然后对字符区域进行提取分割出单个字符,识别方法一是采用模板匹配的方法逐个对字符与预先制作好的字符模板比较,如果结果小于某一阈值则结果就是模板上的字符;二是采用BP神经网络训练,通过训练好的net对待识别字符进行识别。最然后将识别结果通过MATLAB下的串口工具输出51单片机上用液晶显示出来。

关键字:倾斜矫正,字符分割,模板匹配,BP神经网络,液晶显示

Abstract

In the MATLAB environmentusing USB camera capture the character images, saved as an image reading, thenread the saved character images, grayscale, binary, on this basis do tilt correction,the correction image smoothing filter, and then extract the character regionsegmentation of a single character, and then one by one using a templatematching method of character with good character template is a pre-production,if the result is less than a certain threshold, the result is a template of thecharacter. Second, the BP neural network trained by the trained net to identifythe character towards recognition The results will identify the most and thenthe serial port through the MATLAB tool output 51 under microcontroller withLCD display.

Keyword: Tilt correction, character segmentation,template matching, liquid crystal display

一引言:

光学字符识别(OCR,Optical Character Recognition)是指对文本资料进行扫描,然后对图像文件进行分析处理,获取文字及版面信息的过程。已有30多年历史,近几年又出现了图像字符识别(image character recognition,

ICR)和智能字符识别(intelligent character recognition,ICR),实际上这三种自动识别技术的基本原理大致相同。

关于字符识别的方法有很多种,最简单的就是模板匹配,还有根据采集到的字符用BP神经网络或者SVM来训练得到结果的方式。本文主要针对模板匹配的方式,在MATLAB环境下编程实现。

二字符图像获取:

在MATLAB下利用image acquisition toolbox获取视频帧,并保存图像在工程文件夹内。摄像头采用普通的USB 摄像头,由于这种摄像头拍摄的照片延时比较大,所以先用image acquisition toolbox下的对视频进行预览,调整出最佳的效果来,采集的图像效果越好则识别率越高。根据测试,实验选择640*480的视频获取窗口,颜色空间选取为RGB空间,获取一帧后保存为jpg的存储格式。

三字符预处理

3.1字符矫正

由于摄像头拍摄的图像存在一定存在的倾斜度,在分割字符区域时,应先对字符进行矫正。过程如下:

将通过摄像头获取的保存帧图像灰度化,然后对其进行边缘提取,再在1到180度角内对图像进行旋转,记录下边缘提取后的图像在x轴方向上的投影,当x轴方向上的投影最小的时候即表示图像中字符平行于y轴,已经完成矫正,此时记录下旋转的倾斜角。然后利用imrotate函数实现对字符图像的矫正。

3.2 字符区域分割:

在第三步完成对字符图像的倾斜矫正后,将图像分别做x轴和y轴方向上的投影既可以知道字符区域在x轴上的像素分布范围和y轴上的像素分布范围,然后对根据这个范围对图像做分割,在MATLAB中表示为:

goal=I(ix1:iy1,jx1:jy1);

其中goal为分割后的图像,I为分割前的图像,ix1和ix2分别为x轴上投影的像素范围的起始坐标值和终止坐标值,iy1和iy2分别为y轴上投影的像素范围的起始坐标值和终止坐标值。

3.3 单个字体分割:

在分割得到的字符区域图像上,只需要做y轴上的投影就可以知道每个字符在y轴上的分布区间,然后利用这个分布区间就可以分割出单个字符。

3.4 单个字体裁剪

在第五步分割出来的字符基础上进一步对字符的像素区域进行裁剪,原理也是分别做x轴,y轴方向上的投影,求的字符的区间再做剪裁。

四模板字符识别

4.1字符模板制作:

模板的要求是与要识别的字符的字体格式一致,实验中采用word上的标准字符,通过截图软件截图后按照3-6步的处理过程制作出需要的字符模板,从0到9共10个数字,A到Z共26个字母。

4.2 字符模板归一化

在满足识别率的条件下,尽量采用小模板识别可以提神运算速度,具体的模板大小,可以根据后面的与待识别字符的比较中调节。

4.3识别过程:

将待识别字符与字符模板做同样的归一化处理,然后遍历与字符模板比较,处理方法为先和字符模板做差,然后计算做差后的图像的总像素值,如果小于每一个阈值,则表示该待识别字符和该模板是同一个字符,这样就完成了一次识别。

循环对要识别的字符做同样的处理就可以识别出所有的字符,将结果保存在字符串中。

五BP神经网络字符识别

BP(Back Propagation)网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。BP神经网络模型拓扑结构包括输入层(input)、隐层(hide layer)和输出层(outputlayer)。

BP (Back Propagation)神经网络,即误差反传误差反向传播算法的学习过程,由信息的正向传播和误差的反向传播两个过程组成。输入层各神经元负责接收来自外界的输入信息,并传递给中间层各神经元;中间层是内部信息处理层,负责信息变换,根据信息变化能力的需求,中间层可以设计为单隐层或者多隐层结构;最后一个隐层传递到输出层各神经元的信息,经进一步处理后,完成一次学习的正向传播处理过程,由输出层向外界输出信息处理结果。当实际输出与期望输出不符时,进入误差的反向传播阶段。误差通过输出层,按误差梯度下降的方式修正各层权值,向隐层、输入层逐层反传。周而复始的信息正向传播和误差反向传播过程,是各层权值不断调整的过程,也是神经网络学习训练的过程,此过程一直进行到网络输出的误差减少到可以接受的程度,或者预先设定的学习次数为止。

BP神经网络模型BP网络模型包括其输入输出模型、作用函数模型、误差计算模型和自学习模型。

(1)节点输出模型

隐节点输出模型:Oj=f(∑Wij×Xi-qj) (1)

输出节点输出模型:Yk=f(∑Tjk×Oj-qk) (2)

f-非线形作用函数;q -神经单元阈值。

图1 典型BP网络结构模型

(2)作用函数模型

作用函数是反映下层输入对上层节点刺激脉冲强度的函数又称刺激函数,一般取为(0,1)内连续取值Sigmoid 函数:f(x)=1/(1+e) (3)

(3)误差计算模型

误差计算模型是反映神经网络期望输出与计算输出之间误差大小的函数:

Ep=1/2×∑(tpi-Opi) (4)

tpi- i节点的期望输出值;Opi-i节点计算输出值。

(4)自学习模型

神经网络的学习过程,即连接下层节点和上层节点之间的权重拒阵Wij的设定和误差修正过程。BP网络有师学习方式-需要设定期望值和无师学习方式-只需输入模式之分。自学习模型为

△Wij(n+1)= h ×Фi×Oj+a×△Wij(n) (5)

h -学习因子;Фi-输出节点i的计算误差;Oj-输出节点j的计算输出;a-动量因子。

5.1 训练样本制作:

在不同分辨率和不同倾斜角度下分别采集几组图片作为训练样本,本实验为了节省计算时间,根据需要只做12345ABCDE这10个字符的识别,因此只各采集了10组数据。不同分辨率下5组,不同倾斜角度下5组。然后按照2-4上的操作过程的对字符进行处理,获得32*32大小的训练样本共100个。

5.2设计BP神经网络

利用MATLAB下的神经网络工具设计一个,以字符图像的x轴y轴像素值为输入特征作为输入层的输入;以logsig 函数作为隐含层,隐含层设计节点25个,输出层就是预期的结果,共十种可能,所以有输出层有十种输出。net=newff(pr,[25 1],{'logsig' 'purelin'},'traingdx', 'learngdm');

net.trainParam.epochs=250;%训练步数

net.trainParam.goal=0.001;%目标误差

net.trainParam.show=10;%系统每10步显示一次训练误差的变化曲线

net.trainParam.lr=0.05; %学习速度

net=train(net,p,t)%训练

并保存训练结果save name net

5.3 BP训练

首先对待识别字符预处理,然后读取读取训练好的网络load name net,通过sim函数对字符进行识别,结果输出,保存在一个字符串内。

六识别结果发送下位机

利用MTLAB下的串口工具发送识别出的结果给下位机,下位机为51核的单片机,然后在单片机内经过程序处理驱动LM1602液晶显示结果。

5.1 MATLAB下的串口工具:

在Matlab6.0以上版本中新增的设备控制工具条(instrument control toolbox)具备支持计算机与其它具有串口的外部设备之间的通信的功能。其特点如下:

a、支持基于串行接口(RS-232、RS-422、RS-485)的通信;

b、通信数据支持二进制和文本(ASCII)两种方式;

c、支持异步通信和同步通信;

d、支持基于事件驱动的通信(亦称中断方式)。

5.2 下位机处理

5.2.1主控电路

主控芯片采用基于51核的STC12A50S8,51单片机是对目前所有兼容Intel 8031指令系统的单片机的统称。·8位CPU·4kbytes 程序存储器(ROM)(52为8K)

·256bytes的数据存储器(RAM)(52有384bytes的RAM)

·32条I/O口线·111条指令,大部分为单字节指令

·21个专用寄存器

·2个可编程定时/计数器·5个中断源,2个优先级(52有6个)

·一个全双工串行通信口

·外部数据存储器寻址空间为64kB

·外部程序存储器寻址空间为64kB

·逻辑操作位寻址功能·双列直插40PinDIP封装

·单一+5V电源供电

CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;

RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;

ROM:用以存放程序、一些原始数据和表格;

I/O口:四个8位并行I/O口,既可用作输入,也可用作输出;

T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;

五个中断源的中断控制系统;

一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;

片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最高振荡频率为12M。

5.2.2 液晶显示电路

实验中显示模板采用1602字符型液晶,它是工业字符型液晶,能够同时显示16x02即32个字符。602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。

因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如'A’。

5.2. 3 串口通信图:

由于单片机的串口输出为TTL电平,与PC机通信是需要采用转换为RS232电平,实验中使用美信公司的MAX232芯片。它是美信公司专门为电脑的RS-232标准串口设计的单电源电平转换芯片,使用+5v单电源供电。

七总结:

本实验完成了usb摄像头的视频帧图像采集,并对采集图像进行了数字图像处理,采用模板匹配和BP神经网络训练的方式对字符进行识别,并利用MATLAB下的串口工具和下位机单片机通信,发送识别结果显示在字符液晶上。

试验中存在的问题:一是,对图像字符进行分割的时候,如果图像采集的分辨率过低的话会出现字符断裂的情况,这时候要做的就是对字符进行连通域检测。二是在做本实验的程序都是针对特定字符进行处理的,没有做自适应

的字符个数检测。三是BP训练样本数太少,所以训练后的网络对字符的识别结果并不好。这些都需要后续的改进。

八参考文献:

[ 1]王鹏.基于神经网络的手写体字符识别北京工业大学, 2002

[ 2] 闫雪梅,王晓华,夏兴高. 基于PCA和BP神经网络算法的车牌字符识别北京理工大学信息科学技术学院2007

[ 3] 金城二维图像特征研究浙江大学博士论文2006

[ 4] MATLAB2010R image processing tools

附录:

MATLAB程序:

一、模板匹配:

%%%%%%%%%%%%%%%%%模板字符识别

1.0%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%朱本福

%利用usb摄像头在MATLAB中通过image acquisition toolbox

%获取一帧图片并保存为ocr.jpg在读取图片进行处理,采用模板匹配的

%方式进行识别,模板为根据操作制作的,最后将结果通过串口发送出去显示在单片机上

%MATLAB2010下开发%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%

clc;

clear all;

close all;

vid = videoinput('winvideo', 1, 'YUY2_640x480');%视频获取字符图像

src = getselectedsource(vid);

vid.FramesPerTrigger = 1;

preview(vid);%预览

start(vid) ;

vid.ReturnedColorspace = 'rgb';

vid.FramesPerTrigger =1;

imaqmem(10000000);

frame = getsnapshot(vid) ;%获取一帧

figure(1);

imshow(frame)

imwrite(frame,'ocr.jpg','jpg');%保存该帧图片

stop(vid);

delete(vid);

I=imread('ocr.jpg');%读取测试图片

[m,n,z]=size(I)

figure(1);

imshow(I);title('测试图片')

I1=rgb2gray(I);

imwrite(I1,'I1.jpg');%保存二值化图像

figure(2);

imshow(I1);%显示二值化图像

%figure(3);

%imhist(I1);

Ic = imcomplement(I1);%取反

imwrite(Ic,'Ic.jpg');

figure(33);imshow(Ic);

BW = im2bw(Ic, graythresh(Ic));%二值化

imwrite(BW,'BW.jpg');

figure(5), imshow(BW);

bw=edge(I1,'prewitt');%边缘提取

imwrite(bw,'bw.jpg');

figure(32);imshow(bw);

theta=1:180;

[R,xp]=radon(bw,theta);

[I0,J]=find(R>=max(max(R)));%J记录了倾斜角qingxiejiao=90-J

goal1=imrotate(BW,qingxiejiao,'bilinear','crop');

imwrite(goal1,'goal1.jpg');

figure,imshow(I1);title('correct image');

%中值滤波

goal3=medfilt2(goal1,[3,3]);

figure(19), imshow(goal3);

goal3=medfilt2(goal3,[3,3]);

imwrite(goal3,'goal3.jpg');

figure(19), imshow(goal3);

%求解X方向的投影像素范围

[ix1,iy1]=xfenge(goal1)

%求解y方向的投影像素范围

[jx1,jy1]=yfenge(goal1)

%字符区域分割:

goal4=goal3(ix1:iy1,jx1:jy1);

imwrite(goal4,'goal4.jpg');

figure(21);imshow(goal4);

[m,n]=size(goal4)

%[L,num] = bwlabel(goal4,8);%区域标记,1,2,3,4

ysum(n-1)=0;

for y=1:n-1

ysum(y)=sum(goal4(:,y));

end

%y=1:n-1;

%figure(12)

%plot(y,ysum)%画出y方向上的像素分布

%找出ysum分布的几个与y轴交点就是单个字符在y轴上分布的区间i=1;j=1;

for y=1:n-2

if (ysum(y)==0)&(ysum(y+1)~=0)

yy(i)=y

i=i+1;

end

if (ysum(y)~=0)&(ysum(y+1)==0)

yx(j)=y

j=j+1;

end

end

[m_yy,n_yy]=size(yy);%求出字符的分布并分割

if n_yy==3 %根据n_yy和n_yx的个数及分布区间,选择分割区间

%segment

num1=goal4(1:m , 1:yx(1));%分割出字符1

figure(23);imshow(num1);

num2=goal4(1:m ,yy(1):yx(2));%分割出字符2

figure(24);imshow(num2);

num3=goal4(1:m , yy(2):yx(3));%分割出字符3

figure(25);imshow(num3);

num4=goal4(1:m , yy(3):n);%分割出字符4

figure(26);imshow(num4);

%[m1,n1]=size(num1)%求出各个字符的大小

%[m2,n2]=size(num2)

%[m3,n3]=size(num3)

%[m4,n4]=size(num4)

%对单个字符细分,避免字体出现大小不一致的情况,也就是再在x轴上进行分割[ix1,iy1]=xfenge(num1)

[ix2,iy2]=xfenge(num2)

[ix3,iy3]=xfenge(num3)

[ix4,iy4]=xfenge(num4)

num1=goal4(ix1:iy1 , 1:yx(1));

figure(23);imshow(num1);

num2=goal4(ix2:iy2 ,yy(1):yx(2));

figure(24);imshow(num2);

num3=goal4(ix3:iy3 , yy(2):yx(3));

figure(25);imshow(num3);

num4=goal4(ix4:iy4 , yy(3):n);

figure(26);imshow(num4);

imwrite(num1, 'nnum1.bmp');

imwrite(num2, 'nnum2.bmp');

imwrite(num3, 'nnum3.bmp');

imwrite(num4, 'nnum4.bmp');

end

if n_yy==4 %根据n_yy和n_yx的个数及分布区间,选择分割区间%segment

num1=goal4(1:m , yy(1):yx(1));

figure(23);imshow(num1);

num2=goal4(1:m ,yy(2):yx(2));

figure(24);imshow(num2);

num3=goal4(1:m , yy(3):yx(3));

figure(25);imshow(num3);

num4=goal4(1:m , yy(4):n);

figure(26);imshow(num4);

%[m1,n1]=size(num1)

%[m2,n2]=size(num2)

%[m3,n3]=size(num3)

%[m4,n4]=size(num4)

%对单个字符细分

[ix1,iy1]=xfenge(num1)

[ix2,iy2]=xfenge(num2)

[ix3,iy3]=xfenge(num3)

[ix4,iy4]=xfenge(num4)

num1=goal4(ix1:iy1 , yy(1):yx(1));

figure(23);imshow(num1);

num2=goal4(ix2:iy2 ,yy(2):yx(2));

figure(24);imshow(num2);

num3=goal4(ix3:iy3 , yy(3):yx(3));

figure(25);imshow(num3);

num4=goal4(ix4:iy4 , yy(4):n);

figure(26);imshow(num4);

imwrite(num1, 'nnum1.bmp');

imwrite(num2, 'nnum2.bmp');

imwrite(num3, 'nnum3.bmp');

imwrite(num4, 'nnum4.bmp');

end

for i=1:36 %将模板归一化

imageName=strcat(num2str(i),'.bmp');

I = imread(imageName);

% figure;imshow(imageName);

M{i}=imresize(I,[16,12],'nearest');

%figure;imshow(M{i});

end

Rchar(4)='0';

for i=1:4

imagenum=strcat('nnum',num2str(i),'.bmp');

J=imread(imagenum);

[m,n]=size(J)

num{i}=imresize(J,[16,12],'nearest'); %待识别字符归一化

[m,n]=size(num{i})

figure;imshow(num{i});

for j=1:36

MM{j}=xor(num{i} , M{j}); %差分比较

% figure;imshow(MM{j});

dist(j)=sum(sum(MM{j}))

if dist(j)<=28 %这个可以根据dist的具体情况选取,这里去18分割效果不错char(i)=j

end

end

switch char(i)%遍历比较

case 1

Rchar(i)='1' ;

case 2

Rchar(i)='2';

case 3

Rchar(i)='3';

case 4

Rchar(i)='4' ;

Rchar(i)='5'; case 6

Rchar(i)='6'; case 7

Rchar(i)='7'; case 8

Rchar(i)='8'; case 9

Rchar(i)='9'; case 10

Rchar(i)='0'; case 11

Rchar(i)='A' ; case 12

Rchar(i)='B'; case 13

Rchar(i)='C'; case 14

Rchar(i)='D' ; case 15

Rchar(i)='E'; case 16

Rchar(i)='F'; case 17

Rchar(i)='G' ; case 18

Rchar(i)='H'; case 19

Rchar(i)='I'; case 20

Rchar(i)='J' ; case 21

Rchar(i)='K'; case 22

Rchar(i)='L'; case 23

Rchar(i)='M' ; case 24

Rchar(i)='N'; case 25

Rchar(i)='O'; case 26

Rchar(i)='P' ;

Rchar(i)='Q';

case 28

Rchar(i)='R';

case 29

Rchar(i)='S' ;

case 30

Rchar(i)='T';

case 31

Rchar(i)='U';

case 32

Rchar(i)='V' ;

case 33

Rchar(i)='W';

case 34

Rchar(i)='X';

case 35

Rchar(i)='Y' ;

case 36

Rchar(i)='Z';

otherwise

Rchar(i)='false' ;

end

end

schar=[Rchar(1),Rchar(2),Rchar(3),Rchar(4)] %schar=['4','5','A','B']

sport1=serial('COM4');%串口输出字符

sport1.BaudRate=9600;

fopen(sport1);

fwrite(sport1,schar);

INSTRFIND

fclose(sport1);

delete(sport1);

clear sport1;

INSTRFIND

子函数:

%对分割出的单个字符进行分割x方向的再分割function [ix,iy]=xfenge(goal1)

[m,n]=size(goal1);

ix(m)=0;

for x=1:m

for y=1:n

if goal1(x,y)==1;

xx=1;

end

end

if xx==1

ix(j)=x;

j=j+1;

end

end

ix=ix(1);

iy(m)=0;

xx=0;j=1;

for x=m:-1:1

for y=n:-1:1

if goal1(x,y)==1;

xx=1;

end

end

if xx==1

iy(j)=x;

j=j+1;

end

end

iy=iy(1);

子函数:

%对分割出的单个字符进行分割y方向的再分割function [jx,jy]=yfenge(goal1)

[m,n]=size(goal1);

jx(m)=0;

xx=0;j=1;

for y=1:n

for x=1:m

if goal1(x,y)==1;

xx=1;

end

end

if xx==1

jx(j)=y;

end

end

jx=jx(1)

jy(m)=0;

xx=0;j=1;

for y=n:-1:1

for x=m:-1:1

if goal1(x,y)==1;

xx=1;

end

end

if xx==1

jy(j)=y;

j=j+1;

end

end

jy=jy(1)

二、BP神经网络训练后识别:

clc;

clear all;

close all;

for kk = 0:99

p1=ones(16,16);

m=strcat('muban3\',int2str(kk),'.bmp');

x=imread(m,'bmp');

[i,j]=find(x==1);

imin=min(i);

imax=max(i);

jmin=min(j);

jmax=max(j);

bw1=x(imin:imax,jmin:jmax);%words segmentation

bw1=imresize(bw1,[16,16],'nearest');

[i,j]=size(bw1);

i1=round((16-i)/2);

j1=round((16-j)/2);

p1(i1+1:i1+i,j1+1:j1+j)=bw1;

for m=0:15

p(m*16+1:(m+1)*16,kk+1)=p1(1:16,m+1);

end

switch kk

case{0,10,20,30,40,50,60,70,80,90}

t(kk+1)=1;

case{1,11,21,31,41,51,61,71,81,91}

t(kk+1)=2;

case{2,12,22,32,42,52,62,72,82,92}

t(kk+1)=3;

case{3,13,23,33,43,53,63,73,83,93}

t(kk+1)=4;

case{4,14,24,34,44,54,64,74,84,94}

t(kk+1)=5;

case{5,15,25,35,45,55,65,75,85,95}

t(kk+1)=6;

case{6,16,26,36,46,56,66,76,86,96}

t(kk+1)=7;

case{7,17,27,37,47,57,67,77,87,97}

t(kk+1)=8;

case{8,18,28,38,48,58,68,78,88,98}

t(kk+1)=9;

case{9,19,29,39,49,59,69,79,89,99}

t(kk+1)=10;

end

end

% 创建和训练BP网络

pr(1:256,1)=0;

pr(1:256,2)=1;

net=newff(pr,[25 1],{'logsig' 'purelin'}, 'traingdx', 'learngdm'); net.trainParam.epochs=250;

net.trainParam.goal=0.001;

net.trainParam.show=10;

net.trainParam.lr=0.05;

net=train(net,p,t)

save E52net net;

% 识别

I=imread('ocr.jpg');%读取测试图片

[m,n,z]=size(I)

figure(1);

imshow(I);title('测试图片')

I1=rgb2gray(I);

% imwrite(I1,'I1.jpg');%保存二值化图像figure(2);

imshow(I1);%显示二值化图像

%figure(3);

%imhist(I1);

Ic = imcomplement(I1);%取反

% imwrite(Ic,'Ic.jpg');

figure(33);imshow(Ic);

BW = im2bw(Ic, graythresh(Ic));%二值化

% imwrite(BW,'BW.jpg');

figure(5), imshow(BW);

bw=edge(I1,'prewitt');%边缘提取

% imwrite(bw,'bw.jpg');

figure(32);imshow(bw);

theta=1:180;

[R,xp]=radon(bw,theta);

[I0,J]=find(R>=max(max(R)));%J记录了倾斜角qingxiejiao=90-J

goal1=imrotate(BW,qingxiejiao,'bilinear','crop'); % imwrite(goal1,'goal1.jpg');

figure,imshow(I1);title('correct image');

%中值滤波

goal3=medfilt2(goal1,[3,3]);

figure(19), imshow(goal3);

goal3=medfilt2(goal3,[3,3]);

% imwrite(goal3,'goal3.jpg');

figure(19), imshow(goal3);

%求解X方向的投影像素范围

[ix1,iy1]=xfenge(goal1)

%求解y方向的投影像素范围

[jx1,jy1]=yfenge(goal1)

%字符区域分割:

goal4=goal3(ix1:iy1,jx1:jy1);

% imwrite(goal4,'goal4.jpg');

figure(21);imshow(goal4);

[m,n]=size(goal4)

%[L,num] = bwlabel(goal4,8);%区域标记,1,2,3,4

ysum(n-1)=0;

for y=1:n-1

ysum(y)=sum(goal4(:,y));

end

%y=1:n-1;

%figure(12)

%plot(y,ysum)%画出y方向上的像素分布

%找出ysum分布的几个与y轴交点就是单个字符在y轴上分布的区间i=1;j=1;

for y=1:n-2

if (ysum(y)==0)&(ysum(y+1)~=0)

yy(i)=y

i=i+1;

end

if (ysum(y)~=0)&(ysum(y+1)==0)

yx(j)=y

j=j+1;

end

end

[m_yy,n_yy]=size(yy);%求出字符的分布并分割

if n_yy==3 %根据n_yy和n_yx的个数及分布区间,选择分割区间

%segment

num1=goal4(1:m , 1:yx(1));%分割出字符1

figure(41);imshow(num1);

num2=goal4(1:m ,yy(1):yx(2));%分割出字符2

figure(42);imshow(num2);

num3=goal4(1:m , yy(2):yx(3));%分割出字符3

figure(43);imshow(num3);

num4=goal4(1:m , yy(3):n);%分割出字符4

figure(44);imshow(num4);

%[m1,n1]=size(num1)%求出各个字符的大小

%[m2,n2]=size(num2)

%[m3,n3]=size(num3)

%[m4,n4]=size(num4)

%对单个字符细分,避免字体出现大小不一致的情况,也就是再在x轴上进行分割[ix1,iy1]=xfenge(num1)

[ix2,iy2]=xfenge(num2)

[ix3,iy3]=xfenge(num3)

[ix4,iy4]=xfenge(num4)

num1=goal4(ix1:iy1 , 1:yx(1));

figure(51);imshow(num1);

num2=goal4(ix2:iy2 ,yy(1):yx(2));

figure(52);imshow(num2);

num3=goal4(ix3:iy3 , yy(2):yx(3));

figure(53);imshow(num3);

num4=goal4(ix4:iy4 , yy(3):n);

figure(54);imshow(num4);

imwrite(num1, '1.bmp');

神经网络模式识别Matlab程序

神经网络模式识别Matlab程序识别加入20%噪声的A-Z26个字母。(20%噪声情况下,完全能够识别)clear;close all; clc; [alphabet,targets]=prprob; [R,Q]=size(alphabet); [S2,Q]=size(targets); S1=10; P=alphabet; net=newff(minmax(P),[S1,S2],{'logsig''logsig'},'traingdx'); net.LW{2,1}=net.LW{2,1}*0.01; net.b{2}=net.b{2}*0.01; T=targets; net.performFcn='sse'; net.trainParam.goal=0.1; net.trainParam.show=20; net.trainParam.epochs=5000; net.trainParam.mc=0.95; [net,tr]=train(net,P,T); netn=net; netn.trainParam.goal=0.6; netn.trainParam.epochs=300; T=[targets targets targets targets]; for pass=1:10; P=[alphabet,alphabet,... (alphabet+randn(R,Q)*0.1),... (alphabet+randn(R,Q)*0.2)]; [netn,tr]=train(netn,P,T); end netn.trainParam.goal=0.1; netn.trainParam.epochs=500; netn.trainParam.show=5; P=alphabet; T=targets; [netn,tr]=train(netn,P,T); noise_percent=0.2; for k=1:26 noisyChar=alphabet(:,k)+randn(35,1)*noise_percent; subplot(6,9,k+floor(k/9.5)*9); plotchar(noisyChar); de_noisyChar=sim(net,noisyChar); de_noisyChar=compet(de_noisyChar);

离散Hopfield神经网络的联想记忆-数字识别

1.实现1,2在加噪声之后的识别 array_one=[-1 -1 -1 -1 1 1 -1 -1 -1 -1;-1 -1 -1 -1 1 1 -1 -1 -1 -1;... -1 -1 -1 -1 1 1 -1 -1 -1 -1;-1 -1 -1 -1 1 1 -1 -1 -1 -1;... -1 -1 -1 -1 1 1 -1 -1 -1 -1;-1 -1 -1 -1 1 1 -1 -1 -1 -1; ... -1 -1 -1 -1 1 1 -1 -1 -1 -1;-1 -1 -1 -1 1 1 -1 -1 -1 -1;... -1 -1 -1 -1 1 1 -1 -1 -1 -1;-1 -1 -1 -1 1 1 -1 -1 -1 -1]; array_two=[-1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;... -1 -1 -1 -1 -1 -1 -1 1 1 -1;-1 -1 -1 -1 -1 -1 -1 1 1 -1;... -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;... -1 1 1 -1 -1 -1 -1 -1 -1 -1;-1 1 1 -1 -1 -1 -1 -1 -1 -1;... -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1 ]; T=[array_one;array_two]'; net=newhop(T); noisy_array_one=array_one; noisy_array_two=array_two; for i=1:100 a=rand; if a<0.1 noisy_array_one(i)=-array_one(i); noisy_array_two(i)=-array_two(i); end end noisy_one={(noisy_array_one)'}; identify_one=sim(net,{10,10},{},noisy_one); identify_one{10}' noisy_two={(noisy_array_two)'}; identify_two=sim(net,{10,10},{},noisy_two); identify_two{10}' subplot(3,2,1) Array_one=imresize(array_one,20); imshow(Array_one) title('standard number 1') subplot(3,2,2) Array_two=imresize(array_two,20); imshow(Array_two) title('standard number 2') subplot(3,2,3) Noisy_array_one=imresize(noisy_array_one,20); imshow(Noisy_array_one) title('noisy number 1') subplot(3,2,4) Noisy_array_two=imresize(noisy_array_two,20); imshow(Noisy_array_two) title('noisy number 2')

神经网络动态系统辨识与控制

神经网络动态系统的辨识与控制 摘要: 本论文表明神经网络对非线性动态系统进行有效的辨识与控制。本论文的侧重点是辨识与控制模型,并论述了动态反向传播以及静态反向传播方法在参数调节中的作用。在所介绍的模型中,加法器与重复网络结构的内部相连很独特,所以很有必要将他们统一起来进行研究。由仿真结果可知辨识与自适应控制方案的提出是可行的。整篇论文中都介绍到基本的概念和定义,也涉及了必须提出的学术性问题, 简介 用数学系统理论处理动态系统的分析与合成在过去的五十年里已经被列为应用广泛的权威科学原理了。权威系统理论最先进的地方定义于基于线性代数以及复合变量理论的先进技术线性操作器以及线性常微分方程。由于动态系统的设计技术与它们的稳定特性密切相关,线性时间不变系统的充分必要条件在上世纪已经产生了,所以已经建立了动态系统的著名设计方法。相反,只要在系统对系统基础上就可以基本上建立非线性系统的稳定性,因此对于大部分系统没有同时满足稳定性、鲁棒性以及良好动态响应的设计程序并不希奇。 过去三十年来,对线性、非时变和具有不确定参数的对象进行辨识与自适应控制的研究已取得了很大的进展。但是在这些研究中辨识器和控制器的结构选取和保证整个系统全局稳定性的自适应调参规律的构成等,都是建立在线性系统理论基础上的[1]。在本论文中,我们感兴趣的是神经网络非线性动态系统的控制与辨识。由于很少有可以直接应用的非线性系统理论结果存在,所以必须密切关注这个问题以及辨识器和控制器结构的选择和调整参数适应性规则的通用性问题。 在人工神经网络领域里,有两类网络今年来最引人注目:它们是(1)多层神经网络(2)回归神经网络。多层神经网络被证实在解决模式辨识问题[2]-[5]上非常成功。而回归神经网络则经常用于联想记忆以及制约优化问题的解决[[6]-[9]。从系统理论的观点来看,多层网络呈现静态非线性映射,而回归网络则通过非线性动态反馈系统显现。尽管两种网络存在外观上的不同外,但是很有必要将他们用统一成更一般化的网络。事实上,笔者确信将来会越来越多的用到动态因素以及反馈,这导致包括两种网络的复杂系统的产生。这样,将两个网络统一起来就成为必要。在本文的第三章,这个观点会得到进一步的阐述。 本文用了三个主要目标。第一个也是最重要的一个目标是在未知非线性动态系统中为自适应控制利用神经网络提出辨识以及控制器结构。当未知参数线性系

基于某某BP神经网络地手写数字识别实验报告材料

基于BP神经网络的手写体数字图像识别 PT1700105 宁崇宇 PT1700106 陈玉磊 PT1700104 安传旭 摘要 在信息化飞速发展的时代,光学字符识别是一个重要的信息录入与信息转化的手段,其中手写体数字的识别有着广泛地应用,如:邮政编码、统计报表、银行票据等等,因其广泛地应用范围,能带来巨大的经济与社会效益。 本文结合深度学习理论,利用BP神经网络对手写体数字数据集MNIST进行分析,作为机器学习课程的一次实践,熟悉了目前广泛使用的Matlab工具,深入理解了神经网络的训练过程,作为非计算机专业的学生,结合该课题掌握了用神经网络处理实际问题的方法,为今后将深度学习与自身领域相结合打下了基础。

1 引言 从计算机发明之初,人们就希望它能够帮助甚至代替人类完成重复性劳作。利用巨大的存储空间和超高的运算速度,计算机已经可以非常轻易地完成一些对于人类非常困难的工作,然而,一些人类通过直觉可以很快解决的问题,却很难通过计算机解决,这些问题包括自然语言处理、图像识别、语音识别等等,它们就是人工智能需要解决的问题。 计算机要想人类一样完成更多的智能工作,就需要掌握关于这个世界的海量知识,很多早期的人工智能系统只能成功应用于相对特定的环境,在这些特定环

境下,计算机需要了解的知识很容易被严格完整地定义。 为了使计算机更多地掌握开放环境下的知识,研究人员进行了很多的尝试。其中影响力很大的一个领域就是知识图库(Ontology),WordNet是在开放环境中建立的一个较大且有影响力的知识图库,也有不少研究人员尝试将Wikipedia中的知识整理成知识图库,但是建立知识图库一方面需要花费大量的人力和物力,另一方面知识图库方式明确定义的知识有限,不是所有的知识都可以明确地定义成计算机可以理解的固定格式。很大一部分无法明确定义的知识,就是人类的经验,如何让计算机跟人类一样从历史的经验中获取新的知识,这就是机器学习需要解决的问题。 卡内基梅隆大学的Tom Michael Mitchell教授在1997年出版的书籍中将机器学习定义为“如果一个程序可以在任务T上,随着经验E的增加,效果P 也可以随之增加,则称这个程序可以从经验中学习”。逻辑提取算法可以从训练数据中计算出每个特征和预测结果的相关度,在大部分情况下,在训练数据达到一定数量之前,越多的训练数据可以使逻辑回归算法的判断越精确,但是逻辑回归算法有可能无法从数据中学习到好的特征表达,这也是很多传统机器学习算法的共同问题。 对机器学习问题来说,特征提取不是一件简单的事情。在一些复杂问题上,要通过人工的方式设计有效的特征集合,需要很多的时间和精力,甚至需要整个领域数十年的研究投入。既然人工无法很好地抽取实体中的特征,那么是否有自动的方式呢?深度学习解决的核心问题就是自动地将简单的特征组合成更加复杂的特征,并使用这些特征解决问题。 因为深度学习的通用性,深度学习的研究者往往可以跨越多个研究方向,甚至同时活跃于数个研究方向。虽然深度学习受到了大脑工作原理的启发,但现代深度学习研究的发展并不拘泥于模拟人脑神经元和人脑的工作原理,各种广泛应用的机器学习框架也不是由神经网络启发而来的。 MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。 MNIST是一个非常有名的手写体数字识别数据集,被广泛用作机器学习的入门样例,它包含了60000张图片作为训练数据,10000张图片作为测试数据,每一张图片代表了0~9中的一个数字,图片的大小为28x28,且数字会出现在图片的正中间。本文以该数据集为例,基于Matlab来分析BP神经网络的性能。 2 运行环境 本设计在Windows 10 下进行设计、主要利用Matlab工具环境,进行模拟演示。

基于神经网络的手写数字识别系统的设计与实现

中南大学 本科生毕业论文(设计) 题目基于神经网络的手写数字 识别系统的设计与实现

目录 摘要 (Ⅰ) ABSTRACT (Ⅱ) 第一章绪论 (1) 1.1手写体数字识别研究的发展及研究现状 (1) 1.2神经网络在手写体数字识别中的应用 (2) 1.3 论文结构简介 (3) 第二章手写体数字识别 (4) 2.1手写体数字识别的一般方法及难点 (4) 2.2 图像预处理概述 (5) 2.3 图像预处理的处理步骤 (5) 2.3.1 图像的平滑去噪 (5) 2.3.2 二值话处理 (6) 2.3.3 归一化 (7) 2.3.4 细化 (8) 2.4 小结 (9) 第三章特征提取 (10) 3.1 特征提取的概述 (10) 3.2 统计特征 (10) 3.3 结构特征 (11) 3.3.1 结构特征提取 (11) 3.3.2 笔划特征的提取 (11) 3.3.3 数字的特征向量说明 (12) 3.3 知识库的建立 (12) 第四章神经网络在数字识别中的应用 (14) 4.1 神经网络简介及其工作原理 (14) 4.1.1神经网络概述[14] (14) 4.1.2神经网络的工作原理 (14) 4.2神经网络的学习与训练[15] (15) 4.3 BP神经网络 (16) 4.3.1 BP算法 (16) 4.3.2 BP网络的一般学习算法 (16)

4.3.3 BP网络的设计 (18) 4.4 BP学习算法的局限性与对策 (20) 4.5 对BP算法的改进 (21) 第五章系统的实现与结果分析 (23) 5.1 软件开发平台 (23) 5.1.1 MATLAB简介 (23) 5.1.2 MATLAB的特点 (23) 5.1.3 使用MATLAB的优势 (23) 5.2 系统设计思路 (24) 5.3 系统流程图 (24) 5.4 MATLAB程序设计 (24) 5.5 实验数据及结果分析 (26) 结论 (27) 参考文献 (28) 致谢 (30) 附录 (31)

人工神经网络模式识别

人工神经网络模式识别 一、人工神经网络模式识别 1、人工神经网络的概述 人工神经网络从人脑的生理学和心理学角度出发,通过模拟人脑的工作机理,实现机器的部分智能行为,是从微观结构和功能上对人脑进行抽象和简化,是模拟人类智能的一条重要途径。具体的模式识别是多种多样的,如果从识别的基本方法上划分,传统的模式识别大体分为统计模式识别和句法模式识别,在识别系统中引入神经网络是一种近年来发展起来的新的模式识别方法。尽管引入神经网络的方法和引入网络的结构可以各不相同,但都可称为神经网络模式识别。而且这些识别方法在解决传统方法较难处理的某些问题上带来了新的进展和突破,因而得到了人们越来越多的重视和研究。 人工神经元网络(Artificial Neural Network)简称神经网络,是基于日前人们对自然神经系统的认识而提出的一些神经系统的模型,一般是由一系列被称为神经元的具有某种简单计算功能的节点经过广泛连接构成的一定网络结构,而其网络连接的权值根据某种学习规则在外界输入的作用下不断调节,最后使网络具有某种期望的输出特性。神经网络的这种可以根据输入样本学习的功能使得它非常适合于用来解决模式识别问题,这也是神经网络目前最成功的应用领域之一。 2、神经网络进行模式识别的方法和步骤 神经网络模式识别的基本方法是,首先用己知样本训练神经网络,使之对不同类别的己知样本给出所希望的不同输出,然后用该网络识别未知的样本,根据各样本所对应的网络输出情况来划分未知样本的类别。神经网络进行模式识别的一般步骤如图2-1所示,分为如下几个部分: 预处理 样本获取常规处理特征变换神经网络识别 图 2-1 神经网络模式识别基本构成 1、样本获取 这一步骤主要是为了得到一定数量的用于训练和识别的样本。

神经网络控制

人工神经网络控制 摘要: 神经网络控制,即基于神经网络控制或简称神经控制,是指在控制系统中采用神经网络这一工具对难以精确描述的复杂的非线性对象进行建模,或充当控制器,或优化计算,或进行推理,或故障诊断等,亦即同时兼有上述某些功能的适应组合,将这样的系统统称为神经网络的控制系统。本文从人工神经网络,以及控制理论如何与神经网络相结合,详细的论述了神经网络控制的应用以及发展。 关键词: 神经网络控制;控制系统;人工神经网络 人工神经网络的发展过程 神经网络控制是20世纪80年代末期发展起来的自动控制领域的前沿学科之一。它是智能控制的一个新的分支,为解决复杂的非线性、不确定、不确知系统的控制问题开辟了新途径。是(人工)神经网络理论与控制理论相结合的产物,是发展中的学科。它汇集了包括数学、生物学、神经生理学、脑科学、遗传学、人工智能、计算机科学、自动控制等学科的理论、技术、方法及研究成果。 在控制领域,将具有学习能力的控制系统称为学习控制系统,属于智能控制系统。神经控制是有学习能力的,属于学习控制,是智能控制的一个分支。神经控制发展至今,虽仅有十余年的历史,已有了多种控制结构。如神经预测控制、神经逆系统控制等。 生物神经元模型 神经元是大脑处理信息的基本单元,人脑大约含1012个神经元,分成约1000种类型,每个神经元大约与102~104个其他神经元相连接,形成极为错综复杂而又灵活多变的神经网络。每个神经元虽然都十分简单,但是如此大量的神经元之间、如此复杂的连接却可以演化出丰富多彩的行为方式,同时,如此大量的神经元与外部感受器之间的多种多样的连接方式也蕴含了变化莫测的反应方式。 图1 生物神经元传递信息的过程为多输入、单输出,神经元各组成部分的功能来看,信息的处理与传递主要发生在突触附近,当神经元细胞体通过轴突传到突触前膜的脉冲幅度达到一定强度,即超过其阈值电位后,突触前膜将向突触间隙释放神经传递的化学物质,突触有两

基于神经网络方法的字符识别方法

论文写作与规范 题目:基于神经网络方法的字符识别方法 学号: 210802102 专业:计算机系统结构 姓名:靳飞飞 2009 年 1 月 9日

基于神经网络方法的字符识别方法 靳飞飞 (中国海洋大学信息科学与工程学院, 山东青岛266071) 摘要:字符识别是模式识别领域的一项传统的课题,这是因为字符识别不是一个孤立的问题,而是模式识别领域中大多数课题都会遇到的基本问题,并且在不同的课题中,由于具体的条件不同,解决的方法也不尽相同,因而字符识别的研究仍具有理论和实践意义。这里讨论的是用神经网络方法实现基于照相的数字图像的字符识别的问题。并且通过模板匹配的方法作为参照,以体现神经网络在处理模式识别问题上的优势。由于人工神经网络的非线性以及并行性和鲁棒性等特点,在上述领域,其取得了以往传统算法无法获得的成功。 关键词:神经网络;字符识别;图像处理 Character recognition based on neural network Jin Feifei (College of Information Science and Engineering,Ocean University of China,Qingdao 266071,China) Abstract:Character recognition is a traditional problem in the field of pattern recognition, for it is rather an isolated task than a fundamental problem in most work of pattern recognition area, with which we have various methods to deal in terms of specific conditions. That means the pursuit of character recognition is of great significance both in theory and in practice .The goal of this paper is using neural network to recognize characters on digital image based on camera. It also can be seen, in the paper, the advantage of neural network compared with the template matching method. Because its nonlinearity, parallel and strong, in these fields mentioned above, artificial neural network has achieved the success which other traditional algorithms can not reach. Key word: neural network, character recognition, image processing 1引言 字符识别是模式识别领域的一项传统的课题,这是因为字符识别不是一个孤立的问题,

模式识别在神经网络中的研究

摘要:基于视觉理论的神经网络模式识别理论的研究一直是非常活跃的学科,被认为是神经网络应用最成功的一个方面,它的发展与神经网络理论可以说是同步的。几乎所有现有的神经网络物理模型都在模式识别领域得到了成功的应用,神经网络理论取得进步会给模式识别理论的发展带来鼓舞;相反,模式识别理论的进步又会大大推动神经网络理论的长足发展。它们的关系是相互渗透的。 关键词:神经网络;模式识别 Abstract: The research of pattern recognition theories according to the neural network mode of sense of vision theories has been very active in academics, neural network has been thought one of the most successful applications , its development can been seen as the same step with the neural network theories.Almost all existing physics model of the neural network all identified realm to get success in the mode of application, neural network theories' progress will give the development of the pattern recognition theories much encourage;Contrary, the pattern recognition theories of progress again consumedly push neural network theories of substantial development.Their relations permeate mutually. Key word: neural network; pattern recognition

7基于神经网络的模式识别实验要求

实验七基于神经网络的模式识别实验 一、实验目的 理解BP神经网络和离散Hopfield神经网络的结构和原理,掌握反向传播学习算法对神经元的训练过程,了解反向传播公式。通过构建BP网络和离散Hopfield 网络模式识别实例,熟悉前馈网络和反馈网络的原理及结构。 二、实验原理 BP学习算法是通过反向学习过程使误差最小,其算法过程从输出节点开始,反向地向第一隐含层(即最接近输入层的隐含层)传播由总误差引起的权值修正。BP网络不仅含有输入节点和输出节点,而且含有一层或多层隐(层)节点。输入信号先向前传递到隐节点,经过作用后,再把隐节点的输出信息传递到输出节点,最后给出输出结果。 离散Hopfield神经网络的联想记忆过程分为学习和联想两个阶段。在给定样本的条件下,按照Hebb学习规则调整连接权值,使得存储的样本成为网络的稳定状态,这就是学习阶段。联想是指在连接权值不变的情况下,输入部分不全或者受了干扰的信息,最终网络输出某个稳定状态。 三、实验条件 Matlab 7.X 的神经网络工具箱:在Matlab 7.X 的命令窗口输入nntool,然后在键盘上输入Enter键,即可打开神经网络工具箱。 四、实验内容 1.针对教材P243例8.1,设计一个BP网络结构模型(63-6-9),并以教材图8.5 为训练样本数据,图8.6为测试数据。 (1)运行train_data.m和test_data.m文件,然后从Matlab工作空间导入(Import)训练样本数据(inputdata10,outputdata10)和测试数据(testinputdata,testoutputdata),其次新建一个神经网络(New Network),选择参数如下表1,给出BP神经网络结构图。

神经网络应用于手写数字识别-matlab说课讲解

神经网络应用于手写数字识别-m a t l a b

实验报告 实验课程:管理运筹学 实验名称:神经网络应用于手写数字识别-matlab 学生姓名: 指导教师: 实验时间: 2018年1月16日

实验要求: 运用matlab编程进行神经网络进行手写数字识别。 小组成员: 姓名学号 实验过程: 一、BP神经网络 神经网络是由很多神经元组成,可以分为输入,输出,隐含层。 BP神经网络的特点:信号前向传递,信号反向传播。若输出存在误差,根据误差调整权值和阈值,使网络的输出接近预期。 在用BP神经网络进行预测之前要训练网络训练过程如下: 1.网络初始化:各个参数的确定包括输入,输出,隐含层的节点数,输入和隐含,隐含和输出层之间的权值,隐含,输出层的阈值,学习速度和激励函数。 2.计算隐含层输出 3.计算输出层输出 4.误差计算 5.权值更新 6.阈值更新 7.判断迭代是否结束 二、模型建立 数据集介绍: 数据集包含0-9这10个数字的手写体。是放在10个文件夹里,文件夹的名称对应存放的手写数字图片的数字,每个数字500张,每张图片的像素统一为28*28。 识别流程: 首先要对数据进行处理,这个主要是批量读取图片和特征提取的过程,特征提取的方法很多,这里只挑选最简单的来实现,然后是训练出一个神经网络的模型,最后用测试数据进行测试。为了方面,这里的神经网络的创建,训练和测试采用matlab函数来实现。

训练 运行流程: 1.确定神经网络的输入,输出。 输入是BP神经网络很重要的方面,输入的数据是手写字符经过预处理和特征提取后的数据。预处理有二值化,裁剪掉空白的区域,然后再统一大小为70*50为特征提取做准备。特征提取采用的是粗网格特征提取,把图像分成35个区域,每个区域100像素,统计区域中1像素所占的比例。经过预处理特征提取后,28*28图像转成1*35的特征矢量。提取完5000张图片后,依次把所有的特征存于一个矩阵(35*5000)中。 2.神经的网络的训练 用matlab的rands函数来实现网络权值的初始化,网络结构为输入层35,隐藏层34,输出层10,学习速率为0.1,隐藏层激励函数为sigmoid函数。随机抽取4500张图片提取特征后输入,按照公式计算隐含层和输出层输出,误差,更新网络权值。 3.神经网络的预测 训练好神经网络之后,用随机抽取的500个数字字符对网络进行预测,输入特征向量,计算隐含层和输出层输出,得到最后预测的数据。同时计算每个数字的正确率和全体的正确率。最后得到的总体正确率为0.8620。 主函数:

实验七:基于神经网络的模式识别实验

实验七:基于神经网络的模式识别实验 一、实验目的 理解BP神经网络和离散Hopfield神经网络的结构和原理,掌握反向传播学习算法对神经元的训练过程,了解反向传播公式。通过构建BP网络和离散Hopfield网络模式识别实例,熟悉前馈网络和反馈网络的原理及结构。 综合掌握模式识别的原理,了解识别过程的程序设计方法。 二、实验内容 熟悉模式识别的理论方法,用选择一种合适的识别方法,对图像中的字符(英文字母)进行识别,能够区分出不同的形态的26个字母。 在Matlab中,采用BP神经网络,对读取的数据进行训练,进而识别。 1. 程序设计 (1)程序各流程图 实验中主程序流程图如图4-1所示:

图4-1主程序流程图 其中图像预处理的流程如图4-2 所示: 图4-2图像预处理的流程神经网络训练的具体流程如图4-3所示:

图4-3 神经网络训练流程 (2)程序清单 %形成用户界面 clear all; %添加图形窗口 H=figure('Color',[0.85 0.85 0.85],... 'position',[400 300 500 400],... 'Name','基于BP神经网络的英文字母识别',... 'NumberTitle','off',... 'MenuBar','none'); %画坐标轴对象,显示原始图像 h0=axes('position',[0.1 0.6 0.3 0.3]); %添加图像打开按钮 h1=uicontrol(H,'Style','push',... 'Position',[40 100 80 60],... 'String','选择图片',... 'FontSize',10,... 'Call','op'); %画坐标轴对象,显示经过预处理之后的图像 h2=axes('position',[0.5 0.6 0.3 0.3]); %添加预处理按钮

离散Hopfield神经网络的联想记忆—数字识别

%%清空环境变量 clc clear %%数据导入 load data1array_one load data2array_two %%训练样本(目标向量) T=[array_one;array_two]'; %%创建网络 net=newhop(T); %%数字1和2的带噪声数字点阵(固定法)load data1_noisy noisy_array_one load data2_noisy noisy_array_two %%数字1和2的带噪声数字点阵(随机法)%noisy_array_one=array_one; %noisy_array_two=array_two; %for i=1:100 %a=rand; %if a<0.3 %noisy_array_one(i)=-array_one(i); %noisy_array_two(i)=-array_two(i); %end %end %%数字识别 %identify_one=sim(net,10,[],noisy_array_one'); noisy_one={(noisy_array_one)'}; identify_one=sim(net,{10,10},{},noisy_one); identify_one{10}'; noisy_two={(noisy_array_two)'}; identify_two=sim(net,{10,10},{},noisy_two);

identify_two{10}'; %%结果显示 Array_one=imresize(array_one,20); subplot(3,2,1) imshow(Array_one) title('标准(数字1)') Array_two=imresize(array_two,20); subplot(3,2,2) imshow(Array_two) title('标准(数字2)') subplot(3,2,3) Noisy_array_one=imresize(noisy_array_one,20); imshow(Noisy_array_one) title('噪声(数字1)') subplot(3,2,4) Noisy_array_two=imresize(noisy_array_two,20); imshow(Noisy_array_two) title('噪声(数字2)') subplot(3,2,5) imshow(imresize(identify_one{10}',20)) title('识别(数字1)') subplot(3,2,6) imshow(imresize(identify_two{10}',20)) title('识别(数字2)')

(整理)BP神经网络识别.

Abstract 2 一引言: (3) 二字符图像获取: (3) 三字符预处理 (4) 3.2 字符区域 (4) 3.2 字符区域分割: (4) 3.3 单个字体分割: (4) 3.4 单个字体裁剪 (5) 四模板字符识别 (5) 4.2 字符模板归一化 (5) 五BP神经网络字符识别 (5) 5.1 训练样本制作 (6) 5.2设计BP神经网络 (6) 5.3 BP训练 (7) 六识别结果发送下位机 (7) 5.1 MATLAB下的串口工具: (7) 5.2 下位机处理 (7) 5.2. 3 串口通信图: (9) 七总结: (9) 摘要 在MATLAB环境下利用USB摄像头采集字符图像,读取一帧保存为图像,然后对读取保存的字符图像,灰度化,二值化,在此基础上做倾斜矫正,对矫正的图像进行滤波平滑处理,然后对字符区域进行提取分割出单个字符,识别方法一是采用模板匹配的方法逐个对字符与预先制作好的字符模板比较,如果结果小于某一阈值则结果就是模板上的字符;二是采用BP神经网络训练,通过训练好的net对待识别字符进行识别。最然后将识别结果通过MATLAB下的串口工具输出51单片机上用液晶显示出来。 关键字:倾斜矫正,字符分割,模板匹配,BP神经网络,液晶显示 Abstract In the MATLAB environmentusing USB camera capture the character images, saved as an image reading, thenread the saved character images, grayscale, binary, on this basis do tilt correction,the correction image smoothing filter, and then extract the character regionsegmentation of a single character, and then one by one using a templatematching method of character with good character template is a pre-production,if the result is less than a certain threshold, the result is a template of thecharacter. Second, the BP neural network trained by the trained net to identifythe character towards recognition The results will identify the most and thenthe serial port through the MATLAB tool output 51 under microcontroller withLCD display. Keyword: Tilt correction, character segmentation,template matching, liquid crystal display 一引言: 光学字符识别(OCR,Optical Character Recognition)是指对文本资料进行扫描,然后对图像文件进行分析处理,获取文字及版面信息的过程。已有30多年历史,近几年又出现了图像字符识别(image character recognition,

基于神经网络模型的最新系统辨识算法

基于神经网络模型的最新系统辨识算法 摘要:神经网络具有大规模并行分布式结构、自主学习以及泛化能力,因此可以利用神经网络来解决许多传统方法无法解决的问题。神经网络应用在非线性系统的辨识中有良好的结果。本文在阅读大量参考文献的基础上,对最新的基于神经网络的系统辨识算法进行总结。 关键字:神经网络;系统辨识;辨识算法 The latest algorithm about identification system based on neural network model Abstract: Neural network has large parallel distributed structure, learning by itself and has generalization ability. So neural network is used to solve many questions which traditional method cannot. Neural network is well applied to nonlinear system which has got good achievements in identification system. Based on most of documents, the paper summaries the latest algorithm about identification system based on neural network model. Keywords:Neural network, identification system, identification algorithm 0 前言 在国内,系统辨识也取得了许多成绩,尽管成果丰硕,但传统辨识法仍存在不少局限:传统辨识法较适用于输入端中扰动水平比较低的控制系统,对于具有外界干扰的控制系统,就会出现计算量大、鲁棒性不够好的问题;最小二乘法及其相关改进算法一般利用梯度算法进行信息搜索,容易陷入局部极小值。鉴于此,神经网络控制在系统辨识中得到了新的应用。本文在阅读大量文献后,针对国内基于神经网络的结合其他算法的最新辨识算法进行综述分析。 1 神经网络的应用优势 神经网络的吸引力在于:能够充分逼近任意复杂的非线性关系,能够学习适应不确定性系统的动态特性;所有定量或定性的信息都分布储存于网络内的各个神经元,所以有很强的鲁棒性和容错性;采用并行分

基于BP神经网络识别字符

三、基于BP神经网络识别字符 Matlab在图像处理与目标识别方面的应用实验 三、基于BP神经网络识别字符的简单实验 汽车牌照定位与字符识别是目标自动识别的一个典型问题。车牌由有限的字母和数字组成,采用固定的印刷字体和排列顺序。在车牌自动识别系统中,因自然因素或采样因素使得原本规则的印刷体字符产生畸变,给字符识别来了很大困难。BP神经网络算法是把一组样本输入输出问题转化为一个非线性优化问题,并通过梯度算法利用迭代运算求解权值的一种学习方法。采用BP网络进行分类,并附加线性感知器来实现单字符的有效识别,算法简便,识别率高,可适用于多种高噪声环境中的印刷体字符识别。 下面的实验引自《神经网络模型及其MATLAB仿真程序设计》一书P94~98,简单起见,只对含有单独数字的图片样本进行识别,不涉及从照片中定位车牌,分割字符等前期处理。我在保持基本算法思想不变的前提下,对原书程序及其叙述做了一定的修改。Matlab源程序略。 一、BP神经网络结构分析: 按照BP神经网络设计方法选用两层BP网络。其输入节点数为16×16=256,隐层传输函数为Sigmoid函数。假设用一个输出节点表示10个数字,则输出层传输函数为pureline,隐层节点数为 ,取25。 二、神经网络仿真程序设计: 1、构造训练样本集,并构成训练所需的输入矢量和目标矢量:准备10组,每组10个(0~9)数字bmp图片作为训练样本。其中1组为清晰的,这里使用Microsoft Visual C#编程生成。另9组是在清晰样本的基础上,用Matlab添加'salt & pepper'、'gaussian'等噪音制作成的(下图示以“5”为例)。这些图片经过一定的预处理,取出其最大有效区域,归一为16×16的二值图像,作为输入矢量。 2、构造BP神经网络,并根据训练样本集形成的输入矢量和目标矢量,对BP网络进行训练。训练的误差性能曲线如图:

神经网络应用于手写数字识别-matlab

实验报告 实验课程:管理运筹学 实验名称:神经网络应用于手写数字识别-matlab 学生姓名: 指导教师: 实验时间:2018年1月16日

实验要求: 运用matlab编程进行神经网络进行手写数字识别。 小组成员: 实验过程: 一、BP神经网络 神经网络是由很多神经元组成,可以分为输入,输出,隐含层。 BP神经网络的特点:信号前向传递,信号反向传播。若输出存在误差,根据误差调整权值和阈值,使网络的输出接近预期。 在用BP神经网络进行预测之前要训练网络训练过程如下: 1.网络初始化:各个参数的确定包括输入,输出,隐含层的节点数,输入和隐含,隐含和输出层之间的权值,隐含,输出层的阈值,学习速度和激励函数。 2.计算隐含层输出 3.计算输出层输出 4.误差计算 5.权值更新 6.阈值更新 7.判断迭代是否结束

二、模型建立 数据集介绍: 数据集包含0-9这10个数字的手写体。是放在10个文件夹里,文件夹的名称对应存放的手写数字图片的数字,每个数字500张,每张图片的像素统一为28*28。 识别流程: 首先要对数据进行处理,这个主要是批量读取图片和特征提取的过程,特征提取的方法很多,这里只挑选最简单的来实现,然后是训练出一个神经网络的模型,最后用测试数据进行测试。为了方面,这里的神经网络的创建,训练和测试采用matlab函数来实现。 测试图片 特征提取 训练数据分类器 特征提取分类器模型 分类结果 测试 训练 运行流程: 1.确定神经网络的输入,输出。 输入是BP神经网络很重要的方面,输入的数据是手写字符经过预处理和特征提取后的数据。预处理有二值化,裁剪掉空白的区域,然后再统一大小为70*50为特征提取做准备。特征提取采用的是粗网格特征提取,把图像分成35个区域,每个区域100像素,统计区域中1像素所占的比例。经过预处理特征提取后,28*28

智能控制之神经网络系统辨识的设计

四、神经网络系统辨识分析(25分) 用BP 神经网络进行系统在线逼近的原理框图如图3所示 ) (k y n (k u (k y 图3 图4 假设某控制对象的模型为2 3 )1(1) 1()()(-+-+ =k y k y k u k y ,采样时间取t=1ms ,输入信号 t)sin(650.)u(π=k 。采用的BP 神经网络结构如图4所示,权值ij w 和2j w 的初值取 [-1,+1] 之间的随机值,权值采用δ学习算法,学习速率η取0.50,动量因子α取0.05。试分析神经网络在线逼近的运行过程,并作Matlab 仿真。 题目四、需要阐述清楚BP 网络逼近控制对象的工作原理和学习过程 BP 算法的基本思想是:对于一个输入样本,经过权值、阈值和激励函数运算后,得到一个输出y n (k),然后让它与期望的样本y(k)进行比较,若有偏差,则从输出开始反向传播该偏差,进行权值、阈值调整,使网络输出逐渐与希望输出一致。 BP 算法由四个过程组成:输入模式由输入层经过中间层向输出层的“模式顺传播”过程,网络的希望输出与网络的实际输出之间的误差信号由输出层经过中间层向输入层逐层修正连接权的“误差逆传播”过程,由“模式顺传播”与“误差逆传播”的反复交替进行的网络“记忆训练”过程,网络趋向于收敛即网络的全局误差趋向极小值的 “学习收敛”过程。 BP 网络(Back Propagation ),该网络是一种单向传播的多层前向网络。误差 反向传播的BP 算法简称BP 算法,其基本思想是梯度下降法。它采用梯度搜索技术,以期使网络的实际输出值与期望输出值的误差均方值为最小。 BP 网络特点: (1)是一种多层网络,包括输入层、隐含层和输出层; (2)层与层之间采用全互连方式,同一层神经元之间不连接; (3)权值通过δ学习算法进行调节;

相关文档
最新文档