首页
会员中心
到顶部
到尾部
MATLAB毕业设计

基于BP网络的英文字母识别系统毕业设计

时间:2020/10/13 22:24:01  作者:  来源:  查看:0  评论:0
内容摘要: 基于BP网络的英文字母识别系统姓名: 学号: 班级:(控制科学与技术专业)一、实现功能:利用BP神经网络,对大写字母进行识别。 二、使用说明:利用Matlab打开Example1.m文件运行。    &...
基于BP网络的英文字母识别系统
姓名: 
学号: 
班级:(控制科学与技术专业)
一、实现功能:利用BP神经网络,对大写字母进行识别。
 
二、使用说明:利用Matlab打开Example1.m文件运行。
              1)“网络训练”对样本进行训练。
              2)利用“选择图片”来选择要识别的字母图像,同时图像显示于左边。
              3)“二值化”实现对图像的预处理和处理结果的显示。
              4)“字母识别”实现对图像的识别,识别的结果将显示在编辑框中。

三、核心代码:
 
1  %Example1 英文字母识别
clear all;
%添加图形窗口
H=figure('Color',[0 0.7 0.6],...
    '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',[350 300 90 50],...
    'String','选择图片',...
    'FontSize',12,...
    'Call','op');
%画坐标轴对象,显示经过预处理之后的图像
h2=axes('position',[0.1 0.2 0.3 0.3]);
%添加预处理按钮
h3=uicontrol(H,'Style','push',...
    'Position',[240 240 90 50],...
    'String','二值化',...
    'FontSize',12,...
    'Call','preprocess');
%添加识别按钮
h4=uicontrol(H,'Style','push',...
    'Position',[350 240 90 50],...
    'String','字母识别',...
    'FontSize',12,...
    'Call','recognize');
%添加显示识别结果的文本框
h5=uicontrol(H,'Style','edit',...
    'Position',[250 80 180 120],...
    'String','显示识别结果',...
    'FontSize',14,...
    'Back',[1 1 1],...
    'Fore',[1 0 0]);
%添加训练神经网络按钮
h6=uicontrol(H,'Style','push',...
    'Position',[240 300 90 50],...
    'String',' 网络训练',...
    'FontSize',12,...
'Call','Example1Tr');
 
2   %Example1Tr
M=1;
N=26*M;%样本数
%获取26个大写字母图像的数据
for kk=0:N-1
    p1=ones(16,16);%初始化16*16的二值图像(全白)
    m=strcat(int2str(kk),'.bmp');%形成文件名
    x=imread(m,'bmp');%读取图像
    bw=im2bw(x,0.5);%转换成二值图像数据
    %用矩形框截取
    [i,j]=find(bw==0);%查找像素为黑的坐标
    %取边界坐标
    imin=min(i);
    imax=max(i);
    jmin=min(j);
    jmax=max(j);
    bw1=bw(imin:imax,jmin:jmax);%截取
    %调整比例,缩放成16*16的图像
    rate=16/max(size(bw1));
    bw1=imresize(bw1,rate);%会存在转换误差
    %bw1转换成标准的16*16图像p1
    [i,j]=size(bw1);
    i1=round((16-i)/2);
    j1=round((16-j)/2);
    p1(i1+1:i1+i,j1+1:j1+j)=bw1;
    p1=-1.*p1+ones(16,16);
    %p1转换成输入向量
    for m=0:15
        p(m*16+1:(m+1)*16,kk+1)=p1(1:16,m+1);
    end
end
%形成目标向量
for kk=0:M-1
    for ii=0:25
       t(kk+ii+1)=ii;
    end
end
%设置输入向量范围
pr(1:256,1)=0;
pr(1:256,2)=1;
%创建两层BP神经网络,隐层有25个节点
net=newff(pr,[25 1],{'logsig' 'purelin'},'traingdx','learngdm');
net.trainParam.epochs=2500;
net.trainParam.goal=0.001;
net.trainParam.show=10;
%训练神经网络
net=train(net,p,t);
%存储训练好的神经网络
 
3  %op
%读取图像文件
[filename,pathname]=uigetfile({'*.bmp';'*.jpg';...
    '*.gif';'*.*'},...
    'Pick an Image File');
X=imread([pathname,filename]);
%显示图像
axes(h0);%h0设置为当前坐标轴句柄
imshow(X);%h0上显示原始图像
 
%preprocess
p1=ones(16,16);
bw=im2bw(X,0.5);%转换成二值图像
%用矩形框截取图像
[i,j]=find(bw==0);
imin=min(i);
imax=max(i);
jmin=min(j);
jmax=max(j);
bw1=bw(imin:imax,jmin:jmax);
%调整比例,变换成16*16图像
rate=16/max(size(bw1));
bw1=imresize(bw1,rate);
[i,j]=size(bw1);
i1=round((16-i)/2);
j1=round((16-j)/2);
p1(i1+1:i1+i,j1+1:j1+j)=bw1;
p1=-1.*p1+ones(16,16);
%显示预处理的结果
axes(h2);
imshow(p1);
 
4  %recognize
%生成向量形式
for m=0:15
    q(m*16+1:(m+1)*16,1)=p1(1:16,m+1);
end
%识别
[a,Pf,Af]=sim(net,q);
a=round(a);
switch a
    case 0,ch='A';
    case 1,ch='B';
    case 2,ch='C';
    case 3,ch='D';
    case 4,ch='E';
    case 5,ch='F';
    case 6,ch='G';
    case 7,ch='H';
    case 8,ch='I';
    case 9,ch='J';
    case 10,ch='K';
    case 11,ch='L';
    case 12,ch='M';
    case 13,ch='N';
    case 14,ch='O';
    case 15,ch='P';
    case 16,ch='Q';
    case 17,ch='R';
    case 18,ch='S';
    case 19,ch='T';
    case 20,ch='U';
    case 21,ch='V';
    case 22,ch='W';
    case 23,ch='X';
    case 24,ch='Y';
    case 25,ch='Z';
end
%显示识别结果
set(h5,'String',ch,...
    'FontSize',30);
  


相关评论
本类推荐
    广告联系QQ:45157718 点击这里给我发消息 电话:13516821613 杭州余杭东港路118号雷恩国际科技创新园  网站技术支持:黄菊华互联网工作室 浙ICP备06056032号