您的当前位置:首页正文

数字图像处理作业 数字识别

2021-03-27 来源:钮旅网
数字识别

摘要

介绍了一种简易的标准数字识别的方法,与传统的方法比较,算法简易了许多,识别的速度较快,本文主要从图像的预处理,数字图像分割以及数字识别三个方面设计思想进行简单的讨论,实际对一串数字的图像进行处理,并且得到了正确的识别结果。

关键词

图像处理,数字识别,图像分割

引言

数字识别是模式识别中的一个代表性问题,而是该问题在现实生活中也具有显著地应用价值,所以,它理论研究一直受到人们的青睐。数字识别系统在多个方面有应用价值,比如:大型的数据统计(人口,工农业普查),大量的金融相关票据,身份证号码识别,甚至是邮件的分拣中都发挥了很大的作用。数字识别系统的理论价值,首先,阿拉伯数字有明显优越性,类别不大,而且不受国界影;其次,虽然国内外对数字识别的研究很多,但是其系统的判断能力还远远不及大脑;最后,数字识别研究理论还可以延生应用到字母识别中去,对二十六个字母组成的英文识别带来可能,此外,还可以将之应用到其他一些问题。本文主要内容:一是介绍数字识别的研究内容和发展状况,二是数字识别过程中的预处理,分割,以及识别等方法;三是数字识别的发展前景。

正文

1.1设计思想

把要识别的图片读入,分三步处理,第一,进行预处理,主要包括滤波处理和二值化处理;第二,数字分割,把处理好的数字图片中的每个数字分割处理;第三,数字识别,把分割出来的数字与与模板数字一一对比,并识别出图片上的数字。 1.2 实现过程 (一)图像预处理

(1)把原图(彩图)用imread语句读入系统

(2)彩图分层处理

将彩图分成R,B,G三个图层,分别对三个图层进行滤波(中值滤波)和二值化,可以得到以下图样:

(3)三层图像合并

(4)上图中有依然有许多椒盐噪声,可使用中值滤波滤去椒盐噪声,并且将图片二值化。

(二)图像分割

(1)确定图像中数字的大致高度:

先自上而下对图像进行逐行扫描,并且计算黑色像素点的总个数,当黑色像素点的数目大于某个数值(避免有一些“椒噪声”出现误判),记录下行数;然再自下而上进行逐行扫描,并且计算每行黑色像素点的总个数,当黑色像素点

的数目大于某个数值(这个要视情况设定),记录下行数。这两个行号就是数字大致的高度范围。结果如下图所示。

(2)确定每个数字的左右起始位置:

与第(1)步相似,在上一步得到图像中,从左向右逐列扫描,并且计算黑色像素点的总个数,当黑色像素点的数目大于某个数值(避免有一些“椒噪声”出现误判),记录下列数,认为是该数字分割的起始位;然后继续从左向右逐列扫描,并且计算每行黑色像素点的总个数,当色像素点的数目小于某个数值,记录下列数,认为是该数字分割的右终止位。准备开始下一个数字的分割,按照上述的方法继续扫描,知道扫描到图像的最右端,这样便得到每一个数字的大致宽度范围,执行结果如下图:

(三)数字识别

(1)像素点阵标准化

分别对每个分割出来的数字进行识别,由于分割出来的数字图像与标准模板的大小(像素点阵规格)并不相同,所以必须对他们统一成一样大小的点阵(比如:m*n),下图是数字模板图像。

(2)对比识别

先给出一个计数器sum,且将之置sum=0.将要识别的图像与每个模板图像一一比较,每两张图像比较过程是将对应像素点(只有0或1)一一对比,如果像素点的灰度值相同(同为0或同为1),计数器加1,如果灰度值不同则不加,比较结束后算出相同像素点的比例,即相似度P=sum/(m*n)。相似度最大的那个模板的数字就是要识别的图像上的数字了。将分割完数字进行识别可以得到以下结果: y =

3 2 1 8 0 7 6 4 5 9 识别正确。

结论

本文的数字识别方法与传统的方法比较,图像的预处理,数字图像分割以及数字识别三个方面设计思想比较简单,算法也简易了许多,识别的速度较快,但是依然存在一些问题,在数字的字迹比较模糊的时候会出现误判的情况,所以在算法还好改进的空间。

参考文献

[1] 邬建瓴 数字识别及其应用 华中科技大学 2006年5月10日

[2] 陈展东,白宝兴 数字识别算法研究 长春理工大学学报 2010年3月 第33卷第1期 [3] 陈明华 印刷体数字识别算法研究 华中科技大学 2012年1月 [4] 张珍荣 印刷体数字识别系统研究与设计 江西理工大学 2012年6月

[5] 王亚坤 曾德良 李向菊 一种新颖的数字识别算法 电力科学与工程 2009年1月 第25卷第1期

附录:

1、图像预处理程序:

clc

I=imread('3.png'); figure; imshow(I);

imwrite(I,'000.png'); %输出原图 PR=I(:,:,1);

PR=im2bw(PR,0.5); PR=medfilt2(PR,[4,4]); PG=I(:,:,2);

PG=im2bw(PG,0.5); PG=medfilt2(PG,[4,4]); PB=I(:,:,3);

PB=im2bw(PB,0.5); PB=medfilt2(PB,[4,4]); P=cat(2,PR,PG,PB); figure; imshow(P);

imwrite(P,'001.png');

%输出三幅处理完的分量图 PRPG=(PR+PG+PB)/3; PRPG=im2bw(PRPG,0.8); figure;

imshow(PRPG);

imwrite(PRPG,'002.png'); %三幅分量图的合并

PRPG=medfilt2(PRPG,[4,4]); figure;

imshow(PRPG);

imwrite(PRPG,'003.png'); %处理合成图像

2、数字分割:

clc

I=imread('003.png'); s=size(I);

I=1-I;%图像取反 as=0;i=20;j=0; while j==0 while as<20 i=i+1; a=I(i,:);

as=sum(a); end

x1=i;%自上而下逐行扫描,且记录去行数 as=0;i=s(1)-20; while as<20 i=i-1; a=I(i,:); as=sum(a); end

x2=i;%自下而上逐行扫描,且记录去行数 if x2-x1>50 j=j+1; end end

A=I(x1:x2,1:s(2)); AA=1-A; figure;

imshow(AA);

imwrite(AA,'shangxia.png'); %输出上下切割后得到的图像 i=0;j=0; while iwhile (as==0)&&(u>0) if ib=A(:,i); as=sum(b); u=s(2)-i; end

z1=i;%逐列扫描,字母的起始位 while (as>0)&&(u>0) if ib=A(:,i); as=sum(b); u=s(2)-i; end

z2=i;%继续逐列扫描,字母的右终止位 if z2-z1>10 j=j+1;

y1(j)=z1;y2(j)=z2; end

end %确定字符宽度 for j=1:10

B=I(x1:x2,y1(j):y2(j)); BB=1-B; figure;

imshow(BB);

imwrite(BB,['fg',num2str(j),'.png']); end

%输出每一分割的数字图像

3、数字识别

for i=1:10 %将分割完的图像一一取出

I=imread(['fg',num2str(i),'.png']);I=im2bw(I); for j=0:9 %将要识别图像与模板一一对比 J=imread(['mb1',num2str(j),'.png']);J=im2bw(J); [m,n]=size(J);

I=imresize(I,[m,n]); E=abs(I-J); ss=sum(E); s=sum(ss);

s=s/(m*n);%计算相似度

x(j+1)=s;%把每个相似度放到一个数组 end

xmin=min(x); a=find(x==xmin);

y(i)=a-1;%判别的数字,且放到一个数组 x end y

%把识别结果输出

因篇幅问题不能全部显示,请点此查看更多更全内容