19使用MATLAB中的BP神经网络来做字母识别

1.简述

      学习目标:  学习BP神经网络字母识别

字符识别应用非常广泛,比如车辆牌照自动识别和手写识别等。我们采用BP网络对26个英文字母进行识别,首先将26个字母中每一个字母都通过7×5的方格进行数字化处理,并用一个向量表示,其相应有数据的位置设置为1,其他位置设置为0。

打开shibie.m文件,运行会出现下列提示:输入图像

输入图形编号2.bmp,按回车键。

会出现如下图所示的结果

19使用MATLAB中的BP神经网络来做字母识别_第1张图片

字母M为3.bmp,其输出结果为

19使用MATLAB中的BP神经网络来做字母识别_第2张图片

通过仿真结果可以看出,基于BP神经网络算法的字母识别方法,容错性和识别还可以接受,在有噪声的情况下训练,其识别出错率较高,因此应当客观看待此方法。

程序中需要识别的图片:

19使用MATLAB中的BP神经网络来做字母识别_第3张图片

 

 

2.代码

clear all             %清空环境变量
p(1:256,1)=1;         %P为256行1列,全部赋值为1
p1=ones(16,16);       %初始化16*16的二值图像,像素值全部为1(全白),0是全黑
load E11net net;      %加载训练后的BP网络
test=input('输入图像:','s');       %提示输入图像文件名,需要添加后缀
if isempty(test),test=0;
end
if test==0,
    disp('输入错误,请重新输入图像名称和完整后缀');
    test=input('请输入图像:','s');         %提示输入图像文件名
end
figure(2)
x=imread(test,'bmp');         %读入图像
subplot 121,imshow(x);
title('输入图像');
hold on;
bw=im2bw(x,0.5);              %将读入的训练样本图像x转换为二值图像bw
[i,j]=find(bw==0);            %寻找二值图像bw中像素值为0(黑色)的行号i和列号j
imin=min(i);                  %寻找二值图像bw中像素值为0(黑色)的最小行号imin
imax=max(i);                  %寻找二值图像bw中像素值为0(黑色)的最大行号imax
jmin=min(j);                  %寻找二值图像bw中像素值为0的最小列号jmin
jmax=max(j);                  %寻找二值图像bw中像素值为0的最大列号jmax
bw1=bw(imin:imax,jmin:jmax);    %截取图像像素值为0的最大矩形区域bw1
rate=16/max(size(bw1));         %计算转换为16*16的二值图像的缩放比例rate
bw1=imresize(bw1,rate);         %将截取图像转换为16 x 16的二值图像bw1
[i,j]=size(bw1);                %转换图像bw1的大小
i1=round((16-i)/2);             %计算转换图像bw1的宽度与16的差距
j1=round((16-j)/2);             %计算转换图像bw1的高度与16的差距
p1(i1+1:i1+i,j1+1:j1+j)=bw1;    %将截取图像转换为标准的16*16的图像
p1=-1.*p1+ones(16,16);          %反色处理
 for m =0:15
        p(m*16+1:(m+1)*16,1)=p1(1:16,m+1);      %形成测试样本输入向量
 end
    
 [a,Pf,Af]=sim(net,p);                           %BP神经网络网络仿真
    subplot 122,imshow(p1);title('测试图像结果显示');        %显示测试图像
    
   

3.运行结果

 19使用MATLAB中的BP神经网络来做字母识别_第4张图片

 

 19使用MATLAB中的BP神经网络来做字母识别_第5张图片

 19使用MATLAB中的BP神经网络来做字母识别_第6张图片

你可能感兴趣的:(数学建模,算法,计算机视觉,matlab,神经网络)