基于BP神经网络的手写体数字识别matlab仿真

举报
简简单单做算法 发表于 2024/02/01 23:57:42 2024/02/01
【摘要】 1.算法运行效果图预览2.算法运行软件版本matlab2022a 3.算法理论概述        人工神经元网络是生理学上的真实人脑神经网络的机构和功能,以及若干基本特性的某种理论抽象、简化和模拟而构成的一种信息处理系统。从构造上大致可分为最简单的感知器网络、多层前馈型神经网络、反馈型神经网络和自组织神经元网络等。         由于神经网络具有可并行计算、分布式信息存储自适应和学习能力强...

1.算法运行效果图预览

2.算法运行软件版本

matlab2022a

 

3.算法理论概述

        人工神经元网络是生理学上的真实人脑神经网络的机构和功能,以及若干基本特性的某种理论抽象、简化和模拟而构成的一种信息处理系统。从构造上大致可分为最简单的感知器网络、多层前馈型神经网络、反馈型神经网络和自组织神经元网络等。

 

        由于神经网络具有可并行计算、分布式信息存储自适应和学习能力强等优点,在很多领域获得了极其广泛的应用。尤其是BP网络,即反向传播网络,其应用最为广泛。BP网络是利用非线性可微分函数进行权值训练的多层网络,在函数逼近、模式识别、信息分类及数据压缩等领域得到了广泛的应用。

 

        但是神经网络学习过程的算法在数学计算上都比较复杂,过程也比较繁琐,容易出错。因此,采用计算机辅助进行神经网络设计与分析成了必然的选择。目前,在比较成熟的神经网络软件包中,MATLAB的神经网络工具箱应用最为广泛。MATLAB是矩阵实验室(Matrix Laboratory)的简称,它可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。

 

       手写体数字识别系统的结构图如图所示。

        在对字体进行预处理后要进行的是特征的提取,选取图像的灰度特征时要考虑到特征量的维数与识别的准确率的要求。例如,我们将一个字符归—化为17像素×8像素点阵图。按每个像素位为01,形成网络的136个输入特征值。得到的特征图像是二值图像,对应一个元素为0l17像素×8像素的特征矩阵,然后是对特征图像编码。编码规则是,按照从左至右、从上到下的顺序,依次扫描整个特征矩阵,将每一行的01转换成一个136像素×1像素的特征列。将每一个字符都进行编码后,顺序送送入已经训练好的神经网络识别,识别结果最后以文本格式输出。

 

       BP网络是神经网络的一个分支,又称为多层感知或误差信号反馈网络。它是目前较流行的,应用最广的神经网络模型。BP网络是一种有教师的学习网络,其主要特点是能够实现从nm维的非线性映射,它还可以采用梯度下降法实现快速收敛。如图所示为BP网络示意图。

 

4.部分核心程序

filename = dir('images\*.bmp');     %图像文件格式
load BP.mat
 
filename = dir('test\*.bmp');     %图像文件格式
%测试集测试
figure;
for k=1:60
    filename(k).name
    p(1:256,1)=1;                %初始图像二值化像素
    p1=ones(16,16);
                 %加载训练好的网络
    x=imread(filename(k).name);
    
 
    bw=im2bw(x,0.5);              %二值化
    [i,j]= find(bw==0);           %寻找数字所在的像素索引
    imin=min(i);                  %求取数字像素占据空间的最小行索引
    imax=max(i);                  %求取数字像素占据空间的最大行的索引
    jmin=min(j);                  %求取数字像素占据空间的最小列的索引
    jmax=max(j);                  %求取数字像素占据空间的最大列的索引
    bwl=bw(imin:imax,jmin:jmax);  %把图像由39×39缩放为实际数字像素所需的空间
    rate=16/max(size(bwl));       %求取放大比率
    bwl=imresize(bwl,rate);       %按比率放大图像
    [i,j]=size(bwl);              %求取行列数
    i1=round((16-i)/2);           %取整
    j1=round((16-j)/2);
    p1(i1+1:i1+i,j1+1:j1+j)=bwl;  %图像从右向暂存
    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);      %测试
    subplot(10,6,k);
    imshow(x);                 %显示原始图像
    a=round(a);                %显示识别结果
    title(['识别结果:',num2str(a)]);                 
end
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。