基于MATLAB的字母识别系统

2023-11-04

一、算法步骤

1.测试图像预处理及连通区域提取

2.样本库的建立采集feature

3.选择算法输入测试图像进行测试

二、识别过程+源码

1.连通区域提取分割(在原图的基础上进行了膨胀、腐蚀、膨胀的操作使截取的图像更加接近字母)

%%提取数字的边界,生成新的图

clear;

clc;

f=imread('识别图片.jpg');

f=imadjust(f,[0 1],[1 0]);

SE=strel('square',5); %%膨胀、腐蚀、膨胀

A2=imdilate(f,SE);

SE=strel('disk',3)

f=imerode(A2,SE)

SE=strel('square',3);

f=imdilate(f,SE);

gray_level=graythresh(f);

f=im2bw(f,gray_level);

[l,n]=bwlabel(f,8) %%8连接的连接分量标注

imshow(f)

hold on

for k=1:n %%分割字符子句

[r,c]=find(l==k);

rbar=mean(r);

cbar=mean(c);

plot(cbar,rbar,'Marker','o','MarkerEdgeColor','g','MarkerFaceColor','y','MarkerSize',10);

% plot(cbar,rbar,'Marker','*','MarkerEdgecolor','w');

row=max(r)-min(r)

col=max(c)-min(c)

for i=1:row

for j=1:col

seg(i,j)=1;

end

end

con=[r-min(r)+1,c-min(c)+1];

[a,b]=size(con);

for i=1:a

seg(con(i,1),con(i,2))=0;

end

imwrite(seg,strcat('seg',int2str(k),'.bmp'));

%seg=zeros(size(seg));

clear seg;

end


截取后的图像


2. 样本库的的建立并采集

在对截取出来的图像进行识别之前要先输入样本并提取特征进入templet.mat:

我自己通过WORLD打出字母后截屏下来获得字母样本并各自命名 .jpg放入digitalRec目录下用以建立样本库获取特征。


对每个字母都进行下面代码的的执行得到新的1x14的pattern得到各个字母(前9个为数字1~9)每个cell内的feature信息,因为样本有限在此每个字母只提取一次feature。

运行digRec01.m

clear all;clc;

load templet;

% A 被分成5*5=25个cell

%注意A的size(长和宽都需被定义成5的倍数,因为后面要被5除)

A=imread('a.jpg');

A=imresize(A,[25 25]) %%将输入图像转化为25*25的尺寸

figure(1),imshow(A)

B=zeros(1,25); %%初始化一个B用于存放25个cell的feature

[row col] = size(A); %%得到图像的长宽

for currentRow = 0:4 %%遍历25个cell获取feature

for currentCol = 0:4

for i = 1:cellRow

for j = 1:cellCol

if(A(currentRow*cellRow+i,currentCol*cellCol+j)==0)

count=count+1;

end

end

end

ratio = count/(cellRow*cellCol);

B(1,currentCell) = ratio; %%将feature信息存入B中

currentCell = currentCell+1;

count = 0;

end

end

pattern(11).num=1; %%每个字母只有一个样本

pattern(11).feature(:,1)=B'; %%将B置入pattern

save templet pattern pattern、pattern.feature:



3.图像测试

在将截取下来的图像放入 digitalRec目录下 并改名为 .bmp作为测试输入图像


由于用到imshow([num2str(class),'.jpg']),测试后只得到“编号.jpg”所以根据样本库中的字母对应的数字编号新建图像命名为10~14.jpg,用以输出识别出的图像。


选取基于最小距离的数字识别

function y=neartemplet(sample);

clc;

load templet pattern;

d=0;

min=[inf,0];

for i=1:14 %%遍历14个样本进行feature的测试

for j=1:pattern(i).num

d=sqrt(sum((pattern(i).feature(:,j)-sample).^2));

if min(1)>d

min(1)=d;

min(2)=i;

end

min

end

end

y=min(2);

运行neartempletTest.m 输入测试图像调用neartemplet函数

先将测试图像调整为25*25的图像,然后同建立样本库一样的方法取得测试图像的25个cell的feature信息用于与样本库的feature作测试

A=imread('a.bmp'); %待测样本

A=imresize(A,[25 25]) %%调整大小

figure(1),subplot(121),imshow(A),title(['待识别的数:']);

B=zeros(1,25);

[row col] = size(A); %%获取测试图像特征

cellRow = row/5

cellCol = col/5

count = 0;

currentCell = 1;

for currentRow = 0:4

for currentCol = 0:4

for i = 1:cellRow

for j = 1:cellCol

if(A(currentRow*cellRow+i,currentCol*cellCol+j)==0)

count=count+1;

end

end

end

ratio = count/(cellRow*cellCol);

B(1,currentCell) = ratio;

currentCell = currentCell+1;

count = 0;

end

end

class = neartemplet(B'); %%调用基于最小距离算法的测试函数得到class为测试结

%%果对应样本库的编号

subplot(122),imshow([num2str(class),'.jpg']),title(['该数字被识别为:']); %%num2str(class)将编号转化为字符串型分别输入测试图像得到测试结果:a、h 、e能通过neartemplet识别出来r、t识别不出来




bayesBinary.m算法可以识别r、h


t这两种算都没有识别出来应该是样本库里每个字母输入的样本只有一个造成的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于MATLAB的字母识别系统 的相关文章

随机推荐

  • Android 自动获取经纬度,计算距离、经纬度、方位角

    最近做一个项目需要通过GPS获取经纬度 通过计算算出两点之间的距离 通过对Google和百度的疯狂轰炸 终于找到了解决的办法 首先声明权限 android name android permission ACCESS FINE LOCATI
  • Scrcpy视频同步源码分析

    什么是Scrcpy https github com Genymobile scrcpy Scrcpy是genymobile开源的一款手机镜像软件 通过对手机音视频的采集和同步 可以实现在PC平台上控制手机的功能 官方解释 此应用程序镜像通
  • PHP Drupal个人博客

    PHP Drupal个人博客 官网 Prerequisite PHP Composer 快速安装 composer create project drupal recommended project drupal cd drupal php
  • lucene 总体架构

    本文转载至 http www cnblogs com forfuture1978 archive 2009 12 14 1623596 html Lucene概述 一个高效的 可扩展的 全文检索库 全部用Java实现 无须配置 仅支持纯文本
  • 混合整数规划(Mixed Integer Programming)

    混合整数规划 Mixed Integer Programming 混合整数规划问题是运筹优化中经常遇到的一类问题 在这类问题中自变量的类型可能是整数也可能不是整数 相比于连续优化 混合整数规划很多时候会更难求解 在学术界混合整数规划一直是一
  • 最小生成树(普里姆算法和克鲁斯卡尔算法)

    1 基本介绍 2 普里姆算法 普里姆算法 package algorithm import java util Arrays public class PrimDemo public static final int MAX VALUE 1
  • 从p文件到m文件,快速将Matlab p代码转换成m文件

    你是否遇到过这样的问题 发现自己写的Matlab代码根本无法加密 或者别人发给你的MATLAB代码无法打开或运行 如果是这样 那么你需要一款强有力的Matlab解密工具 左左Matlab解密助手 左左解密助手是一款功能强大的Matlab解密
  • 状态机模型

    参考 什么是状态机 用C语言实现进程5状态模型 参考 设计模式 一目了然的状态机图 案例 状态模式 C语言实现 MP3播放 暂停案例 STM32按键消抖 入门状态机思维 常用的while循环内switch case形式 实现状态机的状态跳转
  • java自动化测试语言基础之正则表达式

    java自动化测试语言基础之正则表达式 文章目录 java自动化测试语言基础之正则表达式 Java 正则表达式 Java 正则表达式 正则表达式定义了字符串的模式 正则表达式可以用来搜索 编辑或处理文本 正则表达式并不仅限于某一种语言 但是
  • 树莓派 OCR识别 2-2:chineseocr_lite 部署

    chineseocr lite github项目地址 https github com ouyanghuiyu chineseocr lite 超轻量级中文ocr 支持竖排文字识别 支持ncnn推理 dbnet 1 8M crnn 2 5M
  • JAVA 获取某段时间内的所有日期集合

    集合里包含月份 开始 结束 2019 01 01 00 00 00 2019 01 31 23 59 00 2019 02 01 00 00 00 2019 02 28 23 59 00 2019 03 01 00 00 00 2019 0
  • 社区生鲜团购小程序

    摘 要 随着生活质量的提高 人们对生鲜购物体验的要求逐步升级 传统生鲜物流成本相对较高 生鲜产品品质控制困难 在新零售背景下的社区生鲜团购模式拥有经营成本低 用户黏性高等优点 互联网与实体店相结合带来了更多的便利和机会 自微信推出以来 就迅
  • 39. 组合总和 40. 组合总和 II

    39 组合总和 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target 找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 并以列表形式返回 你可以按 任意顺序 返回这些组合
  • Java文档注释用法+JavaDoc的使用详解

    Java文档注释 JavaDoc的使用详解 简介 文档注释负责描述类 接口 方法 构造器 成员属性 可以被JDK提供的工具 javadoc 所解析 自动生成一套以网页文件形式体现该程序说明文档的注释 注意 文档注释必须写在类 接口 方法 构
  • spring boot中使用@requestbody注解接收不到值是什么鬼

    首先 先科普一下这个注解的用法吧 requestbody一般是用于put或post请求时 在controller处接收前端发送的值 通过适当的HttpMessageConverter转换为JAVA类 而前端在发送值的时候必须指定数据是jso
  • “泰迪杯”超市Spark数据处理和数据分析项目实战Dataframe

    数据和代码 2019 年 泰迪杯 数据分析职业技能大赛 超市销售数据分析 一 背景 近年来 随着新零售业的快速发展 消费者购买商品时有了更多的对比和 选择 导致超市行业的竞争日益激烈 利润空间不断压缩 超市的经营管理产 生了大量数据 对这些
  • WINDOWS下使用redi并安装成系统服务开机启动

    WINDOWS下使用redis 下载redis源码 解压使用 将redis安装成window系统服务 不显示黑窗口 下载redis源码 linux下的redis可以再redis官网上找到Statble版本并下载 但是window版本在官网上
  • 实践练习三(可选):使用OBD 部署一个 三副本OceanBase 集群(离线安装)

    部署规划 这次作业是OceanBase 集群三节点部署方法 通过中控机直接远程登录到 OceanBase 节点上部署启动 observer 和 obproxy 进程 由于手上正好有7台物理机 所以在这个作业中会使用OBD直接部署为2 2 2
  • PAT甲级2023夏季考试题解(A-1 Trap,A-2 Queue Using Two Stacks,A-3 Rank of Binary Tree,A-4 Big Number)

    很幸运得到了一个满分 最后一题真的是连蒙带猜的AC的 当AC的那瞬间 可以用喜极而泣来形容了 去年十二月也参加了一次甲级 但是才考到89分 不是很满意 因此这次又去参加了一次 但总算得到了一点收获 也算对自己的一点安慰吧 A 1 Trap
  • 基于MATLAB的字母识别系统

    一 算法步骤 1 测试图像预处理及连通区域提取 2 样本库的建立采集feature 3 选择算法输入测试图像进行测试 二 识别过程 源码 1 连通区域提取分割 在原图的基础上进行了膨胀 腐蚀 膨胀的操作使截取的图像更加接近字母 提取数字的边