BP网络识别26个英文字母matlab

wx供重浩:创享日记
对话框发送:字母识别
获取完整源码源工程文件

在这里插入图片描述


一、 设计思想

字符识别在现代日常生活的应用越来越广泛,比如车辆牌照自动识别系统,手写识别系统,办公自动化等等。本文采用BP网络对26个英文字母进行识别。首先将待识别的26个字母中的每一个字母都通过长和宽分别为7×5的方格进行数字化处理,并用一个向量表示。其相应有数据的位置置为1,其他位置置为0。

二、 程序的调用

将M文件及相应的字母图标复制到桌面上。
(一)、打开shibie.m文件,1运行会出现下列提示:请直接按回车键正在生成输入向量和目标向量,请稍等…。2直接按回车键,会出现下列提示:输入向量和目标向量生成结束!请按回车键进行神经网络的训练。3再按回车键,会进行训练,训练完毕后会出现下图所示的结果(图1)

在这里插入图片描述

(二)、打开shibie2.m文件,1运行会出现下列提示:请输入测试的图像2输入图形编号如O的为143,回车。会出现如下图所示的结果

在这里插入图片描述
同理,字母M为123,其输出结果为

在这里插入图片描述
三、 总结

通过仿真结果可看出,基于BP算法的字母识别其容错性和识别率相对较高,在有噪声的情况下训练其识别出错率也相应增加,许进一步改进。

部分源码:(其余完整详见下载)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%识别26个大写字母%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc;
clear all;
disp('回车键 ...')
chos=input('请直接按回车键正在生成输入向量和目标向量,请稍等… ');
if isempty(chos), chos=0; end 
if chos==0,
for kk=0:256 p1=ones(16,16);% 初始化16×16的二值图像像素值(全白)   m =strcat('nums\',int2str(kk),'.bmp');% 形成训练样本图像的文件名(089.bmp)    x=imread(m,'bmp');% 读入训练样本图像文件   bw=im2bw(x,0.5);% 将读入的训练样本图像转换为二值图像  [i,j]= find(bw==0);% 寻找二值图像中像素值为0()的行号和列号  imin=min(i);% 寻找二值图像中像素值为0()的最小行号 imax=max(i);% 寻找二值图像中像素值为0()的最大行号   jmin=min(j);% 寻找二值图像中像素值为0()的最小列号   jmax=max(j);% 寻找二值图像中像素值为0()的最大列号   bw1=bw(imin:imax,jmin:jmax);% 截取图像像素值为0()的最大矩形区域 rate=16/max(size(bw1));% 计算截取图像转换为16×16的二值图像的缩放比例bw1=imresize(bw1,rate);% 将截取图像转换为16×16的二值图像(由于缩放比例  % 大多数情况下不为16的倍数,所以可能存在转换误差) [i,j]=size(bw1);% 转换图像的大小   i1=round((16-i)/2);% 计算转换图像与标准16×16的图像的左边界差    j1=round((16-j)/2);% 计算转换图像与标准16×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,kk+1)=p1(1:16,m+1);   
end    % 形成神经网络目标向量  
switch kk    
case{0,1,2,3,4,5,6,7,8,9}  % 字母A       t(kk+1)=0;   
case{10,11,12,13,14,15,16,17,18,19}  % 字母B    t(kk+1)=1;    
case{20,21,22,23,24,25,26,27,28,29}  % 字母C      t(kk+1)=2;    
case{30,31,32,33,34,35,36,37,38,39}  % 字母D      t(kk+1)=3;    
case{40,41,42,43,44,45,46,47,48,49}  %字母E           t(kk+1)=4;       
case{50,51,52,53,54,55,56,57,58,59}  %字母F        t(kk+1)=5;    
case{60,61,62,63,64,65,66,67,68,69}  % 字母G       t(kk+1)=6;     
case{70,71,72,73,74,75,76,77,78,79}  % 字母H        t(kk+1)=7;            
case{80,81,82,83,84,85,86,87,88,89}  % 字母I     t(kk+1)=8;       
case{90,91,92,93,94,95,96,97,98,99}  % 字母J      t(kk+1)=9; 
case{100,101,102,103,104,105,106,107,108,109}  % 字母K     t(kk+1)=10;
case{110,111,112,113,114,115,116,117,118,119}  % 字母L     t(kk+1)=11; 
case{120,121,122,123,124,125,126,127,128,129}  % 字母M    t(kk+1)=12; 
case{130,131,132,133,134,135,136,137,138,139}  % 字母N     t(kk+1)=13;
case{140,141,142,143,144,145,146,147,148,149}  % 字母O      t(kk+1)=14;
case{150,151,152,153,154,155,156,157,158,159}  % 字母P      t(kk+1)=15;
case{160,161,162,163,164,165,166,167,168,169}  % 字母Q      t(kk+1)=16; 
case{170,171,172,173,174,175,176,177,178,179}  % 字母R     t(kk+1)=17; 
case{180,181,182,183,184,185,186,187,188,189}  % 字母S     t(kk+1)=18; 
case{190,191,192,193,194,195,196,197,198,199}  %字母T     t(kk+1)=19; 
case{200,201,202,203,204,205,206,207,208,209}  % 字母U     t(kk+1)=20;
case{210,211,212,213,214,215,216,217,218,219}  % 字母V      t(kk+1)=21; 
case{220,221,222,223,224,225,226,227,228,229}  % 字母W      t(kk+1)=22;
case{230,231,232,233,234,235,236,237,238,239}  % 字母X    t(kk+1)=23; 
case{240,241,242,243,244,245,246,247,248,249}  % 字母Y     t(kk+1)=24; 
case{250,251,252,253,254,255,256,257,258,259}  % 字母Z      t(kk+1)=25;    
end
end
end
save E52PT p t;    % 存储形成的训练样本集(输入向量和目标向量)
disp('输入向量和目标向量生成结束!')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%神经网络的训练%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all;
disp('     ');
chos=input('请按回车键进行神经网络的训练 ');
if isempty(chos), chos=0; end 
if chos==0,
load E52PT p t;    % 加载训练样本集(输入向量和目标向量)
% 创建BP网
pr(1:256,1)=0;
pr(1:256,2)=1;
net= newff(pr,[26 1],{'logsig','purelin'},'traingdx','learngdm');
% 设置训练参数和训练BP网络
net.trainParam.epochs = 5000;
net.trainParam.goal= 0.002;
net.trainParam.show = 100;%步长为100
net.trainParam.lr=0.05;
net= train(net,p,t);
end
% 存储训练后的BP网络
save E52net net;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/296667.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CAD制图

CAD制图 二维到三维 文章目录 CAD制图前言一、CAD制图二、机械设计三、二维图纸四、三维图纸总结前言 CAD制图可以提高设计效率和准确性,并方便文档的存档和交流,是现代工程设计中不可或缺的一部分。 一、CAD制图 CAD(Computer-Aided Design)是利用计算机技术辅助进行设计…

KingbaseV8R6单实例定时全量备份步骤

此场景为单机数据库节点内部备份,方便部署和操作,但备份REPO与数据库实例处于同一个物理主机,冗余度较低。 前期准备 配置ksql免密登录(必须) 在Kingbase数据库运行维护中,经常用到ksql工具登录数据库,本地免密登录…

关于JVM的垃圾回收GC的一些记录

目录 一、JVM内存区域划分 二、从一个基本问题开始引入垃圾回收 三、GC作用的区域 三、如何确定一个对象是否可以被当成垃圾进行回收 (1)引用计数法 (2)可达性分析算法 (3)引用的类型 (3…

准确率、召回率、F1是如何确定的

准确率和召回率是评估分类模型性能的两个重要指标,准确率与召回率(Precision & Recall) 准确率P(Accuracy)是指分类器正确预测的样本数占全部样本数的比例,即: 准确率 预测正确的样本数 / …

福FLUKE禄克8808A数字多用表

福禄克8808A,用于制造、研发、维修等应用的多功能数字表,FLUKE 8808A 5.5位数字多用表可以完成当今众多常用的测量工作。无论是功能测 展开 福禄克8808A,用于制造、研发、维修等应用的多功能数字表,FLUKE 8808A 5.5位数字多用表可…

亚马逊推出 Graviton4:具有 536.7 GBps 内存带宽的 96 核 ARM CPU

如今,许多云服务提供商都设计自己的芯片,但亚马逊网络服务 (AWS) 开始领先于竞争对手,目前其子公司 Annapurna Labs 开发的处理器可以与 AMD 和英特尔的处理器竞争。本周,AWS 推出了 Graviton4 SoC,这是一款基于 ARM 的…

【Grafana】Grafana匿名访问以及与LDAP连接

上一篇文章利用Docker快速部署了Grafana用来展示Zabbix得监控数据,但还需要给用户去创建账号允许他们登录后才能看展示得数据,那有什么办法让非管理员更方便得去访问Grafana呢?下面介绍两个比较方便实现的: 在开始设置前&#xff…

【Hadoop】Zookeeper是什么?怎么理解它的工作机制?

Zookeeper是什么Zookeeper工作机制 Zookeeper是什么 Zookeeper是一个开源的分布式的,为别的分布式矿建提供协调服务的Apache项目。分布式简单地理解就是多台机器共同完成一个任务。 Zookeeper工作机制 从设计模式的角度来理解,是一个基于观察者模式设…

Mac如何配置Java环境

想必很多小伙伴会遇到配置Java环境的情况,今天就跟大家一起分享下我的安装过程,记录一下也是留给需要的小伙伴学习 一、下载和安装JDK 登录OracleJDK官网:https://www.oracle.com/java/technologies/downloads/,或者OpenJDK官网…

官宣!DevExpress Blazor UI组件,支持全新的.NET 8渲染模式

DevExpress Blazor UI组件使用了C#为Blazor Server和Blazor WebAssembly创建高影响力的用户体验,这个UI自建库提供了一套全面的原生Blazor UI组件(包括Pivot Grid、调度程序、图表、数据编辑器和报表等)。 .NET 8为Blazor引入了令人兴奋的重…

Py之tensorflow-addons:tensorflow-addons的简介、安装、使用方法之详细攻略

Py之tensorflow-addons:tensorflow-addons的简介、安装、使用方法之详细攻略 目录 tensorflow-addons的简介 tensorflow-addons的安装 tensorflow-addons的使用方法 1、使用 TensorFlow Addons 中的功能: tensorflow-addons的简介 TensorFlow Addon…

基于SSM的双减后初小教育课外学习生活活动平台的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…