前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一种MXN维的手写字符识别算法

一种MXN维的手写字符识别算法

作者头像
FPGA开源工作室
发布2019-10-29 11:45:25
7350
发布2019-10-29 11:45:25
举报
文章被收录于专栏:FPGA开源工作室

一种MXN维的手写字符识别算法

1 概述

本文的灵感来源于杨淑莹老师的一张PPT(手写数字识别),在此特别鸣谢杨淑英老师。

一般机器视觉对事物是没有感知的,比如摄像头采集到一张苹果的图片,它本身是不知道那是什么东西,在计算机里边就是一个图像数据矩阵的存在。但是我们人类可以通过各种图像处理手段,不断提取事物的特征来让机器通过特征编码来识别和区分不同的事物。

2 一种MXN维的手写字符识别算法

图1 识别过程

如图1所示,这是杨淑英老师PPT(手写数字识别)的一张图,对于一个字符,首先我们要找到字符的上下左右边界,然后在把它分为MxN维的矩阵,再提取矩阵的特征,最后通过特征库匹配来识别字符。此种方法有效的降低了目标的维数,为FPGA的实现提供了可能。

特征形成:根据被识别的对象产生出来的一组基本特征。

特征选择:对原始数据进行抽取,抽取那些对区别不同类别最为重要的特征,而舍去那些对分类并无多大贡献的特征,得到能反映分类本质的特征。

特征提取:是模式识别的关键,直接影响其识别的分类效果。两种方法:

1)以框架的左边框到数字之间的距离变化。

2)将每个数字分成N×N等份,对每一份内的像素个数进行统计,除以每一份的面积总数。

图2 25维手写体5

如图2所示,我们通过每一个小框黑色的占比来从新编码一个新的5X5矩阵,当模板与之匹配时即可识别数字5,我没还可以通过人帮助机器不断学习,让机器的识别更加准确。

分成N×N等份的好处是:

针对同一形状、不同大小的样品得到的特征值相差不大。有能力对同一形状、不同大小的样品视为同类,因此这里要求物体至少在宽度和长度上大于N个像素,否则太小无法正确分类。

3 matlab 仿真MXN维字符识别

第一步:首先找到字符上下左右边界。

I = imread('5.png');

Ib =im2bw(I);

[h,w,d] =size(Ib);

ROW = w-1;

COL = h-1;

k=1;

for i=1:COL

for j=1:ROW

if i>1 && j>1

if (Ib(i,j) == 0 &&Ib(i-1,j) == 1) || (Ib(i,j) == 0 &&Ib(i+1,j) == 1)

a(k) =i;

b(k) =j;

k=k+1;

end

end

end

end

maxa =max(a);

mina =min(a);

maxb =max(b);

minb =min(b);

%boundary

for i=1:COL

for j=1:ROW

if(i > mina &&i < maxa)&&(j==minb||j==maxb)

boundary(i,j,1)= 255;

boundary(i,j,2)= 0;

boundary(i,j,3)= 0;

elseif(i == mina ||i == maxa)&&(j>minb && j<maxb)

boundary(i,j,1)= 255;

boundary(i,j,2)= 0;

boundary(i,j,3)= 0;

else

boundary(i,j,1)= I(i,j,1);

boundary(i,j,2)= I(i,j,2);

boundary(i,j,3)= I(i,j,3);

end

end

end

图3 字符5的上下左右边界

第二步:分成MXN维。

%MXN DIM

for i=1:COL

for j=1:ROW

if(i > mina &&i < maxa)&&(j==minb||j==maxb || j==b1||j==b2|| j==b3||j==b4)

R(i,j,1)= 255;

R(i,j,2)= 0;

R(i,j,3)= 0;

elseif(i == mina ||i == maxa||i ==a1 || i ==a2 || i ==a3 || i ==a4|| i ==a5 || i ==a6 || i ==a7)&&(j>minb && j<maxb)

R(i,j,1)= 255;

R(i,j,2)= 0;

R(i,j,3)= 0;

else

R(i,j,1)= I(i,j,1);

R(i,j,2)= I(i,j,2);

R(i,j,3)= I(i,j,3);

end

end

end

图4 MXN维字符5

第三步:统计特征信息。

for i=1:COL

for j=1:ROW

if(i > mina &&i < a1 && j>minb && j<b1)&& Ib(i,j)==0

x11 =x11+1;

elseif(i > a1 &&i < a2 && j>minb && j<b1)&& Ib(i,j)==0

x12 =x12+1;

elseif(i > a2 &&i < a3 && j>minb && j<b1)&& Ib(i,j)==0

x13 =x13+1;

elseif(i > a3 &&i < a4 && j>minb && j<b1)&& Ib(i,j)==0

x14 =x14+1;

elseif(i > a4 &&i < a5 && j>minb && j<b1)&& Ib(i,j)==0

x15 =x15+1;

elseif(i > a5 &&i < a6 && j>minb && j<b1)&& Ib(i,j)==0

x16 =x16+1;

elseif(i > a6 &&i < a7 && j>minb && j<b1)&& Ib(i,j)==0

x17 =x17+1;

elseif(i > a7 &&i < maxa && j>minb && j<b1)&& Ib(i,j)==0

x18 =x18+1;

end

end

End

if(x11/y>0.5)

y11 =0;

else

y11 =1;

end

result =[y11,y21,y31,y41,y51;

y12,y22,y32,y42,y52;

y13,y23,y33,y43,y53;

y14,y24,y34,y44,y54;

y15,y25,y35,y45,y55;

y16,y26,y36,y46,y56;

y17,y27,y37,y47,y57;

y18,y28,y38,y48,y58];

图5 字符5 特征信息

第四步:与模板匹配识别。

match5 =[0,0,0,0,1;

0,1,1,1,1;

0,1,1,1,1;

0,0,0,0,1;

1,1,1,1,0;

1,1,1,1,0;

1,1,1,1,0;

0,0,0,0,1];

if(result == match0)

display(0);

elseif(result == match1)

display(1);

elseif(result == match2)

display(2);

elseif(result == match3)

display(3);

elseif(result == match4)

display(4);

elseif(result == match5)

display(5);

elseif(result == match6)

display(6);

elseif(result == match7)

display(7);

elseif(result == match8)

display(8);

elseif(result == match9)

display(9);

elseif(result == matchA)

display('A');

elseif(result == matchB)

display('B');

else

display('NO MATCH');

End

图6 字符5识别成功

其他字符展示

图7 字符9识别过程

图8 字符9识别结果

图9 字符A识别过程

图10 字符A识别结果

总结:相比较之前的特征线法,MXN维法识别准确率提高了很多,并且可以去识别字母、汉字、简单图形等。这为我们的车牌识别提供了一个理论基础和一种算法思想。对于更复杂的图案我们可以增加维数来进行更准确地识别。

欢迎大家留言讨论这种算法的好与坏,以及是否适合FPGA实现。大家可在公众号下回复"PPT"获得杨淑莹老师的手写体数字识别PPT。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-03-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FPGA开源工作室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
汽车相关识别
汽车相关识别(Vehicle Optical Character Recognition,Vehicle OCR)基于行业前沿的深度学习技术,提供驾驶证识别、行驶证识别、车牌识别、车辆 VIN 码识别等多种服务,支持将图片上的文字内容,智能识别为结构化的文本,应用于车主身份认证、ETC 出行、违章识别、停车管理等多种场景,大幅提升信息处理效率。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档