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;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第 377 场周赛 解题报告 | 珂学家 | Floyd + 划分型DP

前言 整体评价 天崩局,压哨绝杀,感谢天,感谢地,T_T. 感觉被T2玩惨了,T3和T4很像,无非一个贪心,一个是划分型DP,但是都需要基于floyd预处理。 T1. 最小数字游戏 思路: …

接口测试 — 11.logging日志模块处理流程

1、概括理解 了解了四大组件的基本定义之后,我们通过图示的方式来理解下信息的传递过程: 也就是获取的日志信息,进入到Logger日志器中,传递给处理器确定要输出到哪里,然后进行过滤器筛选,通过后再按照定义…

【LeetCode】链表精选11题

目录 快慢指针: 1. 相交链表(简单) 2. 环形链表(简单) 3. 快乐数(简单) 4. 环形链表 II(中等) 5. 删除链表的倒数第 N 个节点(中等) 递归迭…

量化投资策略的评估标准及其计算公式

收益率指标:分为策略的总收益率和策略的年化收益率 策略的总收益率: 策略的总收益率是评价一个策略盈利能力的最基本的指标,其计算方法为: 公式中Vt表示策略最终的股票和现金的总价值,V0表示策略最初的股票和现金的总…

探秘JDK 13的黑科技:新特性一览

欢迎来到我的博客,代码的世界里,每一行都是一个故事 探秘JDK 13的黑科技:新特性一览 前言switch表达式扩展Switch表达式的基本概念:使用Switch表达式的优势:示例代码:注意事项和最佳实践: Text …

Spring Cloud + Vue前后端分离-第7章 核心业务功能开发

Spring Cloud Vue前后端分离-第7章 核心业务功能开发 7-1 课程管理功能开发 课程管理页面美化 1.课程管理页面美化 demo-course.jpg 复制search.html中的部分代码 course.vue 看效果 测试一下新增修改删除效果 1.课程管理页面美化2 scoped:style下的样式只应用于当前组件…

LCT(link cut tree) 详细图解与应用

樱雪喵用时 3days 做了 ybtoj 的 3 道例题,真是太有效率了!!1 为了避免自己没学明白就瞎写东西误人子弟,这篇 Blog 拖到了现在。 图片基本沿用 OIwiki,原文跳步骤(主要是 access 部分)的就自己…

Spark编程实验三:Spark SQL编程

目录 一、目的与要求 二、实验内容 三、实验步骤 1、Spark SQL基本操作 2、编程实现将RDD转换为DataFrame 3、编程实现利用DataFrame读写MySQL的数据 四、结果分析与实验体会 一、目的与要求 1、通过实验掌握Spark SQL的基本编程方法; 2、熟悉RDD到DataFram…

如何利用flume进行日志采集

介绍 Apache Flume 是一个分布式、可靠、高可用的日志收集、聚合和传输系统。它常用于将大量日志数据从不同的源(如Web服务器、应用程序、传感器等)收集到中心化的存储或数据处理系统中。 基本概念 Agent(代理): …

039、转置卷积

之——增大高宽 杂谈 通常来说,卷积不会增大输入的高宽,通常要么不变,要么减半;如果想要直接padding来增加高宽,在不断的卷积过程中,padding的0越来越多,最后要做像素级的判断时候,由…

分布式核心技术之分布式共识

文章目录 什么是分布式共识?分布式共识方法PoWPoSDPoS 三种分布式共识算法对比分析 选主过程就是一个分布式共识问题,因为每个节点在选出主节点之前都可以认为自己会成为主节点,也就是说集群节点“存异”;而通过选举的过程选出主节…

基于Java SSM框架实现医院挂号上班打卡系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现医院挂号上班打卡系统演示 摘要 在网络发展的时代,国家对人们的健康越来越重视,医院的医疗设备更加先进,医生的医术、服务水平也不断在提高,给用户带来了很大的选择余地,而且人们越来越追求更个…

【leetcode100-019】【矩阵】螺旋矩阵

【题干】 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 【思路】 不难注意到,每进行一次转向,都有一行/列被输出(并失效);既然已经失效,那我…

MyBatis-Plus中默认方法对应的SQL到底长啥样?

我希望成为:自媒体圈中技术最好、实战经验最丰富的达人,技术圈中最会分享的架构师。加油! 我的公众号:Hoeller 过段时间要给公司同事做Mybatis-Plus相关的培训,所以抓紧时间看看Mybatis-Plus的源码,顺便也分…

RT-Thread 内核对象管理框架

内核对象管理框架 RT-Thread采用内核对象管理系统来访问/管理所有内核对象,内核对象包含了内核中绝大部分设施,这些内核对象可以是静态分配的静态对象,也可以是从系统内存堆中分配的动态对象。 RT-Thread内核对象包括:线程&…

使用VisualStutio2022开发第一个C++程序

使用VisualStudio2022创建C项目 第一步:新建C的控制台应用 第二步:填写项目名称和代码存放位置,代码的存放目录不要有中文名 第三步:点击创建,VisualStudio会自动开始帮我们创建项目 第四步:项目创建好以后&…

2023,测试开发人的年终总结

根据TesterHome社区发帖整理。从该年终总结可以看出当前测试行业,哪怕是测试开发也是竞争很厉害。作为测试同仁,不但要掌握功能测试、接口测试、性能测试,掌握各种工具使用,还得懂开发,懂Java/Python,懂VUE…

洛谷——P3884 [JLOI2009] 二叉树问题(最近公共祖先,LCA)c++

文章目录 一、题目[JLOI2009] 二叉树问题题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示基本思路: 一、题目 [JLOI2009] 二叉树问题 题目描述 如下图所示的一棵二叉树的深度、宽度及结点间距离分别为: 深度: 4 4 4宽度&…

【AI提示词故事】《启示之星:寻找神殿的探险之旅》

故事叙述 在未来的某一天,人类发现了一个神秘的星球,被称为“启示之星”。传说在这颗星球上,有一座可以实现人类最大愿望的神殿。 启示之星 一支探险队被派往这颗星球,他们的目标是寻找神殿并实现自己的最大愿望。 在星球上&…

关于 curl 常用命令的使用整理【不定期更新】

目录 1. HTTP 请求2. 文件操作2.1 文件下载2.2 文件上传2.3 FTP 操作 3. 代理和网络设置4. 身份验证5. 调试和信息显示6. more and more curl 是一个用于在命令行下进行数据传输的工具,支持多种协议,包括 HTTP、HTTPS、FTP、FTPS、SCP、SFTP 等。它通常用…