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.mzph.cn/news/401623.shtml

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

相关文章

PWA(Progressive Web App)入门系列:Sync 后台同步

前言 当我们在一些地下停车场,或者在火车上、电梯等无法避免的信号不稳定的场所,使用网站应用处理一些表单操作或者上传数据的操作时,面临的将是网络连接错误的响应,使用户的操作白费。 而此刻 PWA 的 Sync API 就很好的解决了这…

PWA(Progressive Web App)入门系列:安装 Web 应用

前言 在传统的 Web 应用中,通常只能通过在浏览器的地址栏里输入相应的网址才能进行访问,或者把网页地址创建到桌面上通过点击,然后在浏览器里打开。 传统模式下,图标、启动画面、主题色、视图模式、屏幕方向等等都无法去自定义和…

「工具」IndexDB 版备忘录

前言 工作日常需要做一些备忘录,记录一些要做的事。在 Mac 上有使用系统的备忘录,但功能偏弱且文本格式调整不方便。再就是使用浏览器找专门的备忘录网站,功能是满足了,但是链路长,没有桌面软件直接。 所以最后干脆自…

「工具」PWA Manifest图标及 favicon.ico 生成工具

PWA 其中有一个能力就是把网站安装到系统桌面,以原生应用的体验来运行网站,使用户无需再找开浏览器输入网址进入网站,而是可以直接点击安装好的应用直接运行,给使网站访问缩短路径及增加网站的曝光度。 其中有一个问题就是需要生…

各种浏览器缓存浅析

前言 目前浏览器的缓存类型众多,HTTP Cache、Disk Cache、Memory Cache、ServiceWorker Cache、Push Cache 等等,这些缓存是如何产生的?命中优先级是怎么样?又该如何去使用它们? Disk Cache、Memory Cache Disk Cac…

[工具]TS 视频合并工具

简介 当下载 m3u8 资源时,通常产生的是多个 ts 视频文件,所以需要借助某些工具来将这些 ts 视频片段整合为一个视频文件。 本软件主要解决的就是这个问题,底层基于ffmpeg,可正常运行在 Windows 和 Mac 平台。不仅可以合并 ts 为单…

[会议分享]2020全球软件大会分享-PWA在项目中的最佳实践

大会地址:https://www.bagevent.com/event/1233659# PPT下载:https://download.csdn.net/download/lecepin/12871373

「浏览器插件」非常好用的JSON-View

Chrome 商店:地址 下载地址:地址 Github:https://github.com/lecepin/lp-json-view 查看/格式化 二合一。 功能 自动识别 JSON 内容,并在页面右下角创建切换按钮。支持展开/折叠节点。支持全部展开、全部折叠、展开一二三层节点…

Github Action 快速构建 Electron 应用

前言 在开发 Electron 应用时,比较耗时的部分应该是构建打包的过程,像用 electron-builder 这种打包工具来说,它会根据你要打包的系统来下载应用的系统镜像打包工具,由于这些镜像的源文件托管在 Github 上,且 nodejs …

「浏览器插件」网址小尾巴终结者

前言 在我们日常的开发调试中,会在 URL 上添加一些特殊的小尾巴 用来显示调试界面或者开启一些特殊功能,当你接触了越来越多的系统后,你需要使用的小尾巴就变得越来越多,记忆和使用成本非常大,以及含有小尾巴的网址 在…

什么是低代码?

低代码 是一种软件开发方法,可以减少手工编码的过程,尽可能快的交付应用程序。 低代码平台 是工具的合集,这些工具可以通过建模和图形界面来进行应用程序的可视化开发。低代码使开发人员可以跳过手工编码,从而加快了应用程序的开…

什么是 LOW-CODE ?

低代码平台的特征 可视化建模工具 使用可视化方法和模型创建应用程序比使用代码进行开发要快。具有可视化建模功能的低代码平台,使用内置的组件,以任何人都可读的形式表示任何信息,从没有技术技能的常规企业用户到专业开发人员。 开箱即用…

简简单单 上传下载

背景 我们经常会有手机向电脑传文件 或者 电脑像手机传文件的需求。 而通常的解决方案是:手机上安装一个聊天软件(如微信),电脑上安装一个聊天软件,然后自己给自己传输,然后进行下载。 这种方式是很麻烦的…

「VSCode插件」提效工具 - 快捷面板

前言 做为一个开发人员,在日常的开发过程中,经常会在 Terminal 中输入各种命令,如:npm i、npm start、git init、rm -rf、node_modules 等命令,看似方便,实则高频率的输入很烦人。那有什么方法可以把这些高…

VSCode摸鱼插件 — FreeWindow

背景 在一些不是很忙的时候,想高效利用下时间,看看书丰富一下自己,但是大庭广众下长时间看一本实体书,或者看手机的电子书,或者在电脑上看网页书都不太合适,显得自己很闲的样子,那该如何看起来…

在线生成文本图片 CFC函数计算版

百度云函数计算 CFC 运行环境。 使用 sharp 图处理(文档)。 使用 图片参数: widthheightrgba 文本参数: textfColorfSizefTopfLeft {HTTP触发器地址}?width1000&height300&fSize120&fColor%23d9333f&text奥利…

调试利器:浏览器 Logger

1. 前言 在一些业务系统中,由于集成的平台产物或工具较多,而这些产物的 log 不收敛,很多时候打开控制台就是满屏的 log,自己的 log 需要在满屏的 log 中查找,或者在 log 上加一些前缀用 Filter 去过滤,严重…

主动型页面性能利器:Page Status

1. 背景 当页面出现性能问题,如加载慢、页面卡顿等现象时,大多是用户主观上的感受。而要真正客观的去评测性能和定位问题原因,通常需要专业的前端同学通过 DevTools 中的 Performance 等工具来查看(如图 1 所示)&…

前端状态机:XState 首个中文文档上线了

XState 做为一个非常好用的前端状态机库,但官网文档却只有英文版,为了阅读体验,我这里翻译了中文版。 仓库地址:https://github.com/lecepin/xstate-docs-cn文档地址:https://lecepin.github.io/xstate-docs-cn/zh 由…

降低前端业务复杂度新视角:状态机范式

无论做业务需求还是做平台需求的同学,随着需求的不断迭代,通常都会出现逻辑复杂、状态混乱的现象,维护和新增功能的成本也变的十分巨大,苦不堪言。下图用需求、业务代码、测试代码做对比: 图中分了 3 个阶段&#xff1…