【字母识别】基于matlab BP神经网络英文字母识别【含Matlab源码 2226期】

news2024/11/20 11:49:27

⛄一、BP神经网络英文字母识别

1 典型前向网络——BP神经网络
前向网络是目前研究最多的网络形式之一, 它包含输入层、隐层以及输出层, 其中隐层可以为一层或者多层 , 其结构如图1所示.
在这里插入图片描述
图1 BP神经网络模型
BP神经网络误差反向传播学习算法的基本思想如下:向网络提供训练例子, 包括输入单元的活性模式和期望的输出单元活性模式;确定网络的实际输出与期望输出之间允许的误差;改变网络中所有连接权值, 使网络产生的输出更接近于期望的输出, 直到满足确定的允许误差.

2 字母图像的预处理及其识别方法
由于字母图像的输入信号往往带有干扰, 因此在图像识别时分为3步进行:

  1. 先不考虑干扰, 同时在输入和测试时也只做理想信号的输入和测试.

  2. 在训练神经网络的时候用带有少量随机干扰的图像来训练, 分别测试不带干扰和带干扰的信号.

  3. 在训练神经网络的时候用带有少量随机干扰的样本来训练, 在测试数据之前先通过阈值处理得出预处理图像, 然后再进行测试.

2.1 字母图像的预处理
字母图像的预处理将输入图像转化为一种约定的形式, 这样, 经过特殊训练的神经网络才能对其进行识别.而去噪功能的加入大大减轻了神经网络的负担, 从而极大地提高了网络的正确识别率.于是图像的预处理就有了3个步骤.

首先, 将待处理的26个字母中的每一个都分别做如下处理:将其图像分割为14×10的方格 (之所以分成14×10而不是传统的7×5[6], 是为了细分后能得到像素更加连贯的笔画, 以便后面的去噪处理) , 样本如图3所示.然后做阈值处理, 将灰度大于阈值的像素格置为“1” ( 该格有输入) , 同时将灰度小于阈值的像素格置“0” (该格无输入) .在不同的采样环境下, 阈值的选取可能有一定差异, 但是经过一定数量的样本观察, 一定能找到一个适合的阈值.
在这里插入图片描述
图3 识别结果为“B”的一个样本

然后, 将经过阈值化处理以后的图像中连续像素面积小于4 (不包括4, 因为经过统计, 正常笔画中最小像素面积应该为4) 的像素点全部去掉.

最后, 将连续像素面积等于4但是该连续面积不为正方形的像素去掉 (正常笔画中面积最小的点应该是正方形) .

2.2 字母图像的识别
为了进一步减轻网络的负担, 本文中使用了52个网络来分别判断26个字母的大小写, 共52种形式.52个网络同时对输入进行判断, 采取竞争的形式, 这里将输出值最大的网络的输出作为最终的输出, 其他输出同时作废.

由于图像分割的时候有14×10个方格, 那么神经网络的输入就有140个, 而对应的输出则只有一个.根据经验公式, 隐含层的神经元数量选择为15.

⛄二、部分源代码

clear all
p(1:256,1)=1;
p1=ones(16,16);%初始化16.16的二值图像像素值(全白)
load E52net net;%加载训练后的BP网络
test=input(‘请输入测试的图像:’,‘s’);%提示输入测试样本图像文件名
if isempty(test),test=0;end
if test0,
disp(‘错误,请重新输入’);
test=input(‘请输入测试的图像:’,‘s’);%提示输入测试样本图像文件名
end
figure(2)
x=imread(test,‘bmp’);%读入测试样本图像
subplot 121,imshow(x);title(‘输入样本图’);hold on;
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 x 16的二值图像
[i,j]=size(bw1);%转换图像的大小
i1=round((16-i)/2);%计算转换图像的宽度与16的差距
j1=round((16-j)/2);%计算转换图像的高度与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

⛄三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]高富强,邹恒,秦昌硕,须民健,杨勇.BP和RBF神经网络在字母识别中的比较[J].重庆工学院学报(自然科学版). 2009,23(09)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

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

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

相关文章

智慧公路筑基者!天翼云打造全栈能力新底座

11月9日-11日,在第十七届中国智能交通年会(ITSAC 2022)暨2022中国智能交通大会上,中国电信作为本届大会特别支持单位,于11月10日成功举办了主题为“构建智慧公路全栈能力新底座”的运营商赋能智慧交通创新论坛。 交通运…

windows 安装ElasticSearch(es)可视化工具

因项目需要,小编这里使用的是 npm版本 6.14.16 nodejs版本14.19.1 1、下载nodejs地址:https://nodejs.org/download/release/v14.19.1/ 版本需要可根据自己电脑进行选择 2、下载可视化项目包 下载地址:https://github.com/mobz/elasticse…

2020年聚合支付评级结果及如何开展评级工作经验分享

一年一度的收单外包服务机构评级工作即将启动,笔者认为479家聚合支付机构也在关心本机构要不要进行评级并希望了解聚合支付评级要求、评级对机构有何意义和影响、目前聚合支付评级情况及如何开展评级工作。为此,基于笔者最近作为两家聚合支付机构常年顾问…

传奇脚本中提到的WIL序号是什么?在哪查看WIL序号?

传奇M2引擎设置WIL序号方便脚本<IMG:12:2>代码调用,在NPC对话界面显示图片信息。 传奇补丁文件WIL序号设置方法&#xff1a; 传奇M2-查看-列表信息二 很多脚本命令和功能都会使用这个WIL序号。 WIL序号的计算是从0开始的,例如下图中从0开始数 MonEffect.wzl的WIL文件序号…

专肽生物:蛋白激酶C底物 Protein Kinase C Substrate

蛋白激酶 C (PKC) 底物。编号: 161721 中文名称: 蛋白激酶C底物 Protein Kinase C Substrate CAS号: 105802-82-2 单字母: H2N-VRKRTLRRL-OH 三字母: H2N-Val-Arg-Lys-Arg-Thr-Leu-Arg-Arg-Leu-COOH 氨基酸个数: 9 分子式: C51H100N22O11 平均分子量: 1197.48 精确分子量: 1196…

北科天绘 16线3维激光雷达开发教程

文章目录前言一、配置IP地址二、ROS Driver1.创建工作空间并初始化2.启动雷达驱动程序三、 RVIZ 显示 R-Fans 点云数据前言 本教程使用的是三维激光雷达为北科天绘的R-Fans-16,采用网口连接传输数据&#xff0c;9-36V供电。 Ubuntu版本为20.04&#xff0c;Ros版本为Neotic。 !…

【长难句分析精讲】定语从句

1. 定语从句知识总结 1.基本概念&#xff1a; 先行词、关系词、不完整的句子2.先行词的形式&#xff1a; 名词、代词、名词短语、句子3.关系词的秘密 关系代词&#xff1a; 在从句中充当主(who, which, that, whom)、宾(which, that)、定语(whose)&#xff09;关系副词 &#…

送别金铁霖,被谷传民起诉,农民歌唱家大衣哥人品高下立判

最近一段时间&#xff0c;因为被著名作家兼编剧谷传民告上法庭&#xff0c;农民歌唱家大衣哥一夜之间人设崩塌。有人说大衣哥不讲武德&#xff0c;无偿使用别人的音乐&#xff0c;赚钱后又不支付版权费&#xff0c;农民歌唱家的人品真不咋样。 面对互联网铺天盖地的流言蜚语&am…

高斯判别分析(GDA)公式推导

解&#xff1a;将概率分布代入对数似然函数&#xff0c; l(ψ,μ0,μ1,∑)∑i1mlogpX∣Y(x(i)∣y(i);μ0,μ1,∑)∑i1mlogpY(y(i);ψ)l(\psi,\mu_0,\mu_1,\sum)\sum^m_{i1}{log{p_{X|Y}(x^{(i)}|y^{(i)};\mu_0,\mu_1,\sum)}}\sum^m_{i1}log{p_Y}(y^{(i)};\psi)l(ψ,μ0​,μ1​…

mbedtls 自带SSL demo调试

概述&#xff1a; 运行mbedtls自带 ssl demo的记录&#xff1b; 操作过程&#xff1a; 编译Demo&#xff0c;请看我专栏中的相关文章 先运行服务端程序&#xff0c;运行ssl_server.exe&#xff0c;运行结果如下&#xff1a; mbedtls-3.2.1\mbedtls-3.2.1\programs\ssl> .…

通用后台管理系统前端界面

1、项目搭建 局部安装vue-cli 4.5.15 和创建项目 1.1 局部安装vue-cli 工具&#xff0c;方便不同版本进行切换 ###安装指定版本的vue脚手架工具 或者是已安装了&#xff0c;该命令则为使用4.5.15版本的vue/cli npm i -D vue/cli4.5.15 ###查看当前vue脚手架工具版本…

第七节.常用Linux命令—查找文件,软硬链接,软件安装,系统信息

第七节.常用Linux命令—查找文件&#xff0c;软硬链接&#xff0c;软件安装&#xff0c;系统信息 1.查找文件&#xff1a; 序号命令作用01find [路径] -name “.py”查找指定路径下扩展名是.py的文件&#xff0c;包括子目录 功能&#xff1a;通常用来在特定目录下搜索符合条件…

SpringMVC之全局异常管理

在开发过程中一个项目可以要抛出很多很多的异常&#xff0c;这对于用户来说非常地不方便&#xff0c;而且非常地不安全&#xff0c;特别容易导致用户信息地泄露。在SpringMVC中有一种全局异常管理方法&#xff0c;这种方法收集项目中存在所有地异常&#xff0c;以保证项目正常地…

windows 定制 terminal 上手实践

文章目录1. 前言2. 安装 Windows Terminal3. 安装 nerd-fonts4. Microsoft store 安装 powershell5. 改变终端背景颜色6. 安装 scoop7. 安装 git8. 安装 Neovim9. 设置别名10. 安装 oh My Posh11. 自定义 prompt&#xff08;path&#xff09;12. 安装 nodejs13. 安装 Terminal …

数据库高级 I

数据库高级 I 双向链表 什么是双向链表 双向链表是一种数据结构,由若干个节点构成,其中每个节点均由三部分构成,分别是前驱节点,元素,后继节点.双向链表中的节点在内存中是游离状态存在的.双向链表的应用:LinkedList 双向链表中的元素部分保存的都是对象,实际上保存的是元素对…

Tomcat 源码解析一请求处理的整体过程-黄泉天怒(下)

上一篇博客 Tomcat 源码解析一请求处理的整体过程-黄泉天怒(上) NonLoginAuthenticator NonLoginAuthenticator并没有实现invoke()方法&#xff0c;而是由父类AuthenticatorBase实现了invoke()方法&#xff0c;AuthenticatorBase类关系如下。   先弄清楚NonLoginAuthentica…

07.URL调度器工作原理

1.工作原理 django通过urlconf来映射视图函数&#xff0c;只区分路径&#xff0c;不区分http方法 Django确定要使用的根URLconf模块&#xff0c;一般实在settings中的ROOT_URLCONF设置的值&#xff0c;但是如果传入HttpRequest对象具有一个urlconf属性&#xff08;由中间件设置…

直播预告|OceanBase 社区版 4.0 全解析

小就是大&#xff0c;OceanBase 社区版 4.0 | 单机到分布式一体化与最佳实践 随着云原生时代的到来&#xff0c;越来越多的业务系统会采用云原生架构。云原生数据库通过资源解耦和资源池化等技术支撑了不同业务领域的场景需求。 2022 年 11 月 3 日&#xff0c;OceanBase 社区版…

Linux结构目录说明以及相关作用【重点】

目录目录结构目录结构介绍&#xff1a;/bin [重点] (/usr/bin 、 /usr/local/bin)/home/root/sbin/lib/lost found/etc/usr/boot/dev/media/mnt/opt/usr/local/var目录结构 1&#xff1a;图解目录结构 2&#xff1a;用命令行看目录结构&#xff08;里面自己装了一些东西&…

1024程序员节过后,我才知道JVM有多重要

为什么要学习JVM? 和大部分程序员一样&#xff0c;我最初接触 Java 虚拟机只是因为面试官会问Java虚拟机的相关问题&#xff0c;所以不得不看&#xff0c;而且刷了很多面试题&#xff1b;那段时间刷面试题刷的心烦甚至会觉得&#xff0c;我面试的岗位平时也用不上Java虚拟机&…