基于神经网络的印刷体字母识别Word文件下载.docx
- 文档编号:22474376
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:22
- 大小:99.98KB
基于神经网络的印刷体字母识别Word文件下载.docx
《基于神经网络的印刷体字母识别Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于神经网络的印刷体字母识别Word文件下载.docx(22页珍藏版)》请在冰豆网上搜索。
图2.1BP神经网络识别系统
3.2预处理及其特征提取方法
本文使用傅里叶描述符及其反变换进行图片的二值化、字母轮廓提取,之后进行归一化,将其特征变成1*120的矩阵,之后选取里面的六十个点变为1*60的矩阵。
特征提取程序:
functionFD=Feature_Building(RGB)
%RGB=imread('
d:
A.bmp'
);
%figure
(1),inshow(RGB)
[B]=outline(RGB);
%figure
(2)
%subplot(221),draw_outline(B);
%title('
outlineofobject'
[m,n]=size(B);
FD=fsd(B,30,m,4);
其中outline、fsd为傅里叶描述及其反变换程序。
outline程序:
%%Functionforextractingoutlineofobject;
Q.K.,2008.4.29
%%DeaprtmentofAutomation,TsinghuaUniv.Beijing100084,China.
function[outline]=outline(RGB)
I=rgb2gray(RGB);
[junkthreshold]=edge(I,'
sobel'
fudgeFactor=.5;
BWs=edge(I,'
threshold*fudgeFactor);
%Step3:
Dilatetheimage
se90=strel('
line'
3,90);
se0=strel('
3,0);
BWsdil=imdilate(BWs,[se90se0]);
%Step4:
Fillinteriorgaps
BWdfill=imfill(BWsdil,'
holes'
%Step5:
Removeconnectedobjectsonborder
BWnobord=imclearborder(BWdfill,4);
%Step6:
Smoothentheobject
seD=strel('
diamond'
1);
BWfinal=imerode(BWnobord,seD);
BWfinal=imerode(BWfinal,seD);
bw=bwareaopen(BWfinal,30);
%%fillagapinthepen'
scap
[B,L]=bwboundaries(bw,'
noholes'
outline=B{1};
fsd程序见程序清单。
3.3BP神经网络结构
3.3.1输入层神经元个数的确定
将图像的特征向量作为神经网络的输入,所以神经网络的输入层神经元个数等于特征向量的维数,即1×
60=60个输入神经元。
3.3.2隐含层神经元个数的确定
隐层节点数对网络的学习和计算特性具有非常重要的影响,是该网络结构成败的关键。
若隐层节点数过少,则网络难以处理复杂的问题;
但若隐层节点数过多,则将使网络学习时间急剧增加,而且还可能导致网络学习过度,抗干扰能力下降。
本文根据实际的实验,确定隐含层神经元的个数为15个。
3.3.3输出层神经元个数的确定
因为要识别26个英文大写字母,因此输出选择26×
1的矩阵,即输出层神经元的个数为26个。
当26个字母输入神经网络后,在对应的位置上输出1,其他位置上输出零。
当网络进入识别过程时,哪个位置上输出的期望值最大,认为识别出的是这个位置上的字母。
3.3.4BP神经网络的构造
建立一个前向BP神经网络函数newff:
net=newff(minmax(P),[S1,S2],{‘logsig’,‘logsig’},‘trainlm’);
net.LW{2,1}=net.LW{2,1}*0.01;
net.b{2}=net.b{2}*0.01;
其中minma(P)为神经网络的对它的60个输入元素的最大值和最小值的限制。
P为训练样本集合。
S1、S2分别为该神经网络的隐含层和输出层的神经元个数。
{‘logsig’,‘logsig’}为神经网络的各层的转移函数,均设置为对数S型激活函数。
训练函数采用‘trainlm’。
3.4BP神经网络的训练
3.4.1训练样本集合和目标值集合
字母图片归一化后的图像为60×
1的矩阵,用60×
26的矩阵形成一个训练样本;
目标矢量是希望每一个数字输入神经网络后在输出神经元对应的位置上为1,其他的位置为0。
为此取目标矢量为对角线上为1的26×
26的单位阵,用matlab命令实现为:
T=eye(26);
3.4.2网络训练
隐含层神经元的传递函数采用s型对数函数logsig,输出层神经元传递函数也采用s型对数函数,训练函数采用trainlm,性能函数采用sse,训练步数设置为最大5000,性能目标值为0.05,。
BP训练程序:
net.performFcn='
sse'
;
%设置目标性能函数
net.trainParam.goal=0.05;
%性能目标值
net.trainParam.show=20;
%显示间隔次数
net.trainParam.epochs=5000;
%最大训练次数
net.trainParam.mc=0.95;
[net,tr]=train(net,P,T);
BP网络训练流程图:
使用第一组样本进行训练的结果:
TRAINLM,Epoch0/5000,SSE169.303/0.05,Gradient39.0748/1e-010
TRAINLM,Epoch20/5000,SSE9.07917/0.05,Gradient0.647529/1e-010
TRAINLM,Epoch40/5000,SSE5.45171/0.05,Gradient0.465044/1e-010
TRAINLM,Epoch60/5000,SSE3.85999/0.05,Gradient1.13736/1e-010
TRAINLM,Epoch80/5000,SSE3.37108/0.05,Gradient0.970379/1e-010
TRAINLM,Epoch100/5000,SSE1.43394/0.05,Gradient0.27961/1e-010
TRAINLM,Epoch120/5000,SSE1.13878/0.05,Gradient0.661835/1e-010
TRAINLM,Epoch140/5000,SSE0.561939/0.05,Gradient0.497918/1e-010
TRAINLM,Epoch160/5000,SSE0.537153/0.05,Gradient0.0963243/1e-010
TRAINLM,Epoch180/5000,SSE0.518194/0.05,Gradient0.00990168/1e-010
TRAINLM,Epoch200/5000,SSE0.461637/0.05,Gradient11.4576/1e-010
TRAINLM,Epoch206/5000,SSE0.0350697/0.05,Gradient0.265104/1e-010
TRAINLM,Performancegoalmet.
可见经过206次训练后,网络误差达到要求,误差曲线如下图:
使用第二组样本进行训练的结果:
TRAINLM,Epoch0/5000,SSE168.635/0.05,Gradient33.7987/1e-010
TRAINLM,Epoch20/5000,SSE3.28669/0.05,Gradient40.5407/1e-010
TRAINLM,Epoch32/5000,SSE0.0441687/0.05,Gradient0.0844925/1e-010
可见经过26次训练之后,网络误差达到要求。
误差曲线如下图所示:
3.5字母的识别
以上所介绍为网络的学习期,学习过程结束后,网络进入工作期,即可以进行字母的识别。
单一字母识别程序如下:
RGB=imread('
D:
\ProgramFiles\MATLAB71\work\新建文件夹1\A11.bmp'
%工作期A11为大写字母A略带噪声的图片
FDB=Feature_Building(RGB);
%提取字母轮廓特征
FDB=reshape(FDB,1,120);
FDB=FDB(1:
2:
120);
%归一化处理
[a,b]=max(sim(net,(FDB)'
))%字母识别a为网络工作后输出层输出的最大值,b为所识别字母的行数即如果识别为A,则b为1;
识别为B,则b为2,以此类推。
识别结果如下:
a=0.8316
b=1
可见能够正确识别字母A。
\ProgramFiles\MATLAB71\work\新建文件夹1\B11.bmp'
%工作期B11为大写字母B略带噪声的图片
a=0.9741
b=2
可见也能够正确的识别字母B。
本文使用两组样本进行BP神经网络的训练,一组样本进行字母的识别。
识别程序及其结果如下:
load('
\ProgramFiles\MATLAB71\work\新建文件夹1\index1.mat'
)
fori=1:
26
RGB{i}=imread(['
\ProgramFiles\MATLAB71\work\新建文件夹1\'
index1{i}]);
FD{i}=Feature_Building(RGB{i});
FD{i}=reshape(FD{i},1,120);
FD{i}=FD{i}(1:
[a,b]=max(sim(net,(FD{i})'
))
end
结果:
a=0.8316
b=1
a=0.9741
b=2
a=0.8805
b=3
a=0.9315
b=4
a=0.6114
b=5
a=0.9755
b=6
a=0.9715
b=7
a=0.9780
b=8
a=0.9770
b=9
a=0.9958
b=10
a=0.8759
b=11
a=0.9610
b=12
a=0.9695
b=13
a=0.8119
a=0.9718
b=15
a=0.9752
a=0.9039
b=17
a=0.5457
b=18
a=0.8177
a=0.9728
b=20
a=0.2953
a=0.8482
b=22
a=0.9092
b=23
a=0.9743
b=24
a=0.9534
b=25
a=0.9764
b=26
由以上结果可知:
识别了22个字母,有四个字母未被正确识别(NPSU)。
为了使识别准确率更高,训练更多的样本,尽量选择一些略带有噪声的图片,识别时准确率更高。
程序清单
BP网络训练程序:
clc
clear
\ProgramFiles\MATLAB71\work\新建文件夹1\index.mat'
52
index{i}]);
P{1}=[(FD{1})'
(FD{2})'
(FD{3})'
(FD{4})'
(FD{5})'
(FD{6})'
(FD{7})'
(FD{8})'
(FD{9})'
(FD{10})'
(FD{11})'
(FD{12})'
(FD{13})'
(FD{14})'
(FD{15})'
(FD{16})'
(FD{17})'
(FD{18})'
(FD{19})'
(FD{20})'
(FD{21})'
(FD{22})'
(FD{23})'
(FD{24})'
(FD{25})'
(FD{26})'
];
P{2}=[(FD{27})'
(FD{28})'
(FD{29})'
(FD{30})'
(FD{31})'
(FD{32})'
(FD{33})'
(FD{34})'
(FD{35})'
(FD{36})'
(FD{37})'
(FD{38})'
(FD{39})'
(FD{40})'
(FD{41})'
(FD{42})'
(FD{43})'
(FD{44})'
(FD{45})'
(FD{46})'
(FD{47})'
(FD{48})'
(FD{49})'
(FD{50})'
(FD{51})'
(FD{52})'
%P=[P1;
P2];
T=[eye(26)];
S1=15;
S2=26;
forn=1:
2%学习期
net=newff(minmax(P{n}),[S1S2],{'
logsig'
'
},'
trainlm'
[net,tr]=train(net,P{n},T);
end
识别程序:
傅里叶变换程序:
functionrFSDs=fsd(outline,H,b,bN)
%ForwardellipticalFouriertransform-seeKuhlFPandGiardinaCR
%"
EllipticFourierfeaturesofaclosedcontour"
ComputerGraphicsand
%ImageProcessing18:
236-2581982fortheory.
%Returnsashapespectrumofinputx,ydata"
outline"
with
%iNoOfHarmonicsAnalyseelements.
%TheoutputFSDswillbenormalisedforlocation,sizeandorientation
%ifbNormaliseSizeStateandbNormaliseOrientationStateareTRUE
%Pre-calculatesomeconstantarrays
%n*2*pi
%n^2*2*pi^2
%wherenisthenumberofharmonicstobeusedintheanalysis
%H=iNoOfHarmonicsAnalyse
%b=bNormaliseSizeState%[mn]=size(outline),b=m;
%bN=bNormaliseOrientationState
rTwoNPi=(1:
1:
H)*2*pi;
rTwoNSqPiSq=(1:
H).*(1:
H)*2*pi*pi;
iNoOfPoints=size(outline,1)-1;
%hencethereis1moredatapointinoutlinethaniNoOfPoints
rDeltaX=zeros(iNoOfPoints+1,1);
%pre-allocatesomearrays
rDeltaY=zeros(iNoOfPoints+1,1);
rDeltaT=zeros(iNoOfPoints+1,1);
foriCount=2:
iNoOfPoints+1
rDeltaX(iCount-1)=outline(iCount,1)-outline(iCount-1,1);
rDeltaY(iCount-1)=outline(iCount,2)-outline(iCount-1,2);
%Calculate'
time'
differencesfrompointtopoint-actu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 神经网络 印刷体 字母 识别
![提示](https://static.bdocx.com/images/bang_tan.gif)