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

news2024/11/27 18:50:20

1.简述

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

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

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

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

会出现如下图所示的结果

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

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

程序中需要识别的图片:

 

 

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.运行结果

 

 

 

 

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

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

相关文章

中间件 -zookeeper

三连支持 一起鼓励 一起进步 zookeeper 文章目录 一、概述1.Leader 角色2.Follower 角色3.数据同步4. 2PC提交5. Observer 角色6. leader 选举7. 集群组成6. 惊群效应 二、Curator三、应用场景总结 一、概述 首先,在分布式架构中,任何的节点都不能以单点…

支持记录和审计上传/下载的文件内容,支持控制用户连接资产的方式,JumpServer堡垒机v3.4.0发布

2023年6月19日,JumpServer开源堡垒机正式发布v3.4.0版本。在这一版本中,JumpServer新增支持多种资源选择策略,包括用户登录、命令过滤、资产登录和连接方式;支持记录和审计上传/下载的文件内容,进一步提升系统的安全性…

linux(线程同步和互斥)

目录: 1.为什么需要同步和互斥 2.明确一些概念 3.实现一个抢票程序 4.理解加锁和解锁是原子的呢?? ------------------------------------------------------------------------------------------------------------------------- 1.为什么…

哈工大计算机网络传输层详解之:流水线机制与滑动窗口协议

哈工大计算机网络传输层详解之:流水线机制与滑动窗口协议 在上一节中我们逐步分析了可靠传输协议的设计过程,最后讲到rdt3.0的设计和实现机制。但是rdt3.0为了实现可靠性,牺牲了很大一部分性能,其中最主要的原因就在于停止等待协…

23.ELman神经网络预测数据

1.简述 学习目标:ELman神经网络预测数据 Elman网络介绍 神经网络是一个庞大的体系和概念,根据处理信息的不同方式来区分不同的network。比如根据处理信息结果的传递方向,分前馈型与反馈型。前馈型网络会根据输出数值来调整网络的参数&#xf…

LangChain 中文入门教程

为了便于阅读,已生成gitbook:LangChain 中文入门教程 - LangChain 的中文入门教程 github地址:https://github.com/liaokongVFX/LangChain-Chinese-Getting-Started-Guide 加了个 CHANGELOG,更新了新的内容我会写在这里,方便之前看…

2023-06-19 Untiy进阶 C#知识补充2——C#版本与Unity的关系

文章目录 一、Unity 与 C# 版本二、Unity 的 .Net API 兼容级别 一、Unity 与 C# 版本 Unity 版本C# 版本Unity 2021.2C# 9Unity 2020.3C# 8Unity 2019.4C# 7.3Unity 2017C# 6Unity 5.5C# 4 ​ 更多信息可以在 Unity 官网说明查看:Unity - Manual: C# compiler (u…

Git的使用方法

文章目录 Git简介Git用法上传到gitee上 Git简介 简单来说,Git就像一个日志一样,可以帮你记录你对文本文件的修改,但他的功能又强于日志,不仅可以记录,还可以帮你存储那些你对文本文件的修改,当你想要找回之…

C++基础入门教程(1)

1 C初识 1.1 第一个C程序 编写一个C程序总共分为4个步骤 创建项目 创建文件 编写代码 运行程序 1.1.1 创建项目 ​ Visual Studio是我们用来编写C程序的主要工具,我们先将它打开 1.1.2 创建文件 右键源文件,选择添加->新建项 给C文件起个名称&am…

亲测有效:自定义下拉头部刷新控件,任何子View都可以下拉

对于一个主Activity,里面进行多个fragment切换,不知其fragment包裹的是什么控件,但是都要进行下拉刷新,比如下拉切换语言、切换主题等场景。常见的方法,每个fragment里面都单独加下拉刷新;现在是自定义下拉…

Databend 开源周报 第 97 期

Databend 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展,遇到更贴近你心意的 Databend 。 列位置 Databe…

MongoDB 数据库管理系统

MongoDB是一个非关系型数据库管理系统,它使用文档模型存储数据。MongoDB中的文档类似于JSON对象,可以包含键值对和嵌套文档。MongoDB提供了强大的查询语言、聚合框架、索引和直接在数据存储中运行的计算。 MongoDB被广泛应用于许多领域,特别…

React 组件生命周期

组件的生命周期可分成三个状态: Mounting(挂载):已插入真实 DOMUpdating(更新):正在被重新渲染Unmounting(卸载):已移出真实 DOM Mounting 挂载阶段 Mounting阶段叫挂载阶段,伴随整个虚拟DOM的声明。它里面有四个小的…

Altium Designer软件点击没有反应?如何解决?

对电子工程师来说,Altium Designer(AD)是一款功能强大的PCB设计软件,被广泛应用在电子工程领域。然而在使用过程中可能会遇见AD软件点击没有反应的情况,面对这个问题该如何解决?下面来看看吧! 1…

公网访问Linux CentOS本地搭建的Web站点

文章目录 前言1. 本地搭建web站点2. 测试局域网访问3. 公开本地web网站3.1 安装cpolar内网穿透3.2 创建http隧道,指向本地80端口3.3 配置后台服务 4. 配置固定二级子域名5. 测试使用固定二级子域名访问本地web站点 转载自cpolar文章:Linux CentOS本地搭建…

videojs-player视频播放技术学习

介绍: videojs是一个开源的HTML5视频播放器,它可以在各种设备和浏览器上播放视频。videojs提供了丰富的API和插件,可以实现自定义的视频播放功能。 使用videojs实现视频播放的步骤: 1. 引入videojs库 在HTML文件中引入videojs库…

chatgpt赋能python:Python打开文件路径:一种更轻松的办法

Python打开文件路径: 一种更轻松的办法 在Python编程中,打开文件路径是非常常见的任务。然而,对于许多初学者,Python打开文件路径时可能会面临一些问题和困难。本篇文章将介绍Python打开文件路径的方法,并给出一种更加轻松的解决…

5-垃圾回收

目录 1.死亡对象的判断算法 1.1.引用计数算法 1.2.可达性分析算法(主流) PS:强引用、软引用、弱引用、虚引用 2.垃圾回收算法 2.1.标记-清除算法 2.2.复制算法 2.3.标记-整理算法 2.4.分代算法(主流) PS&…

达梦体系结构

物理结构、逻辑结构、实例(内存结构、进程结构) 一、物理结构 配置文件、控制文件、数据文件、重做日志文件、归档日志文件、备份文件、跟踪日志文件、事件日志文件 (一)配置文件 以.ini结尾的文件,例如dm.ini (相…

chatgpt赋能python:Python打包成so文件的方法:详解

Python打包成so文件的方法:详解 Python是一种灵活且易于使用的高级编程语言,由于其强大的效率和易于上手的特性,在最近几年已经迅速地流行起来。Python支持多种开发范式,例如函数式编程、面向对象编程和脚本编程。 Python的这些…