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

news/2025/4/1 23:37:21/

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.ppmy.cn/news/476706.html

相关文章

C51/C52--LCD1602

目录 一、LCD1602简介 二、LCD1602的工作(显示)原理 三、技术参数 四、外形参数,引脚功能 五、连接方式 六、示例程序与结果 一、LCD1602简介 LCD1602液晶显示器是广泛使用的一种字符型液晶显示模块。它是由字符型液晶显示屏&#xff0…

杂记 | 使用Docker和Nginx为网站添加HTTPS访问功能

文章目录 01 准备工作1.1 HTTPS介绍1.2 准备工作 02 编写nginx.conf03 使用docker启动nginx 01 准备工作 1.1 HTTPS介绍 HTTPS(Hypertext Transfer Protocol Secure)是一种通过加密通信保护网站数据传输的协议。它是 HTTP 协议的安全版本,通…

有谁能接通信APP实现AXB呼叫转移

如题!本人有一款通信软件app,但想要现实axb呼叫转移功能,现在陷入难题,各位大佬有接的吗!

24连续Hopfield神经网络的优化旅行商问题优化计算(附matlab程序)

1.简述 学习目标: 连续Hopfield神经网络的优化旅行商问题优化计算 需要计算10个城市最优路径及总路径长度 hopfield可以分为离散型神经网络和连续型神经网络(DHNN\ CHNN) 在之前的文章中讲过的单层感知器和BP都是离散的,目前连续…

io.netty学习(三)Channel 概述

目录 前言 正文 Channel概述 Channel 特点 Channel 接口方法 ChannelOutboundInvoker AttributeMap 总结 前言 前两篇文章我们已经对Netty进行了简单的了解和架构设计原理的剖析。 本篇文章我们就来开始对Netty源码的分析,首先我们来讲解 Netty 中Channel相…

【每日一题Day242】LC1262可被三整除的最大和 | 贪心 dp

可被三整除的最大和【LC1262】 给你一个整数数组 nums,请你找出并返回能被三整除的元素最大和。 思路 题目要求求出能被3整除的最大和,那么我们可以记录每种余数对应的最大和【贪心,相同余数的情况下取最大值】,那么答案即为val[0…

io.netty学习(六)字节缓冲区 ByteBuf(上)

目录 前言 ByteBuf类 ByteBuffer 实现原理 ByteBuffer 写入模式 ByteBuffer 读取模式 ByteBuffer 写入模式切换为读取模式 clear() 与 compact() 方法 ByteBuffer 使用案例 总结 前言 网络数据传输的基本单位是字节,缓冲区就是存储字节的容器。在存取字节…

Git代码提交规范

Git代码提交规范 团队协作模式1. 分支模式2. fork模式 fork模式开发实例1. fork2. 本地仓、远程仓、主仓2.1 远程仓2.2 本地仓2.3 主仓 3. Issues4. 提交代码5. 提交MR6. 合入7. 不符合规范重新提交7.1 撤销代码 上一章我们讲解了如何Fork代码仓并提交PR代码 但是有的同学就问了…