当前位置:文档之家› 基于matlab的文字识别算法 课程设计

基于matlab的文字识别算法 课程设计

摘要本课程设计主要运用MATLAB的仿真平台设计进行文字识别算法的设计与仿真。

也就是用于实现文字识别算法的过程。

从图像中提取文字属于信息智能化处理的前沿课题,是当前人工智能与模式识别领域中的研究热点。

由于文字具有高级语义特征,对图片内容的理解、索引、检索具有重要作用,因此,研究图片文字提取具有重要的实际意义。

又由于静态图像文字提取是动态图像文字提取的基础,故着重介绍了静态图像文字提取技术。

随着计算机科学的飞速发展,以图像为主的多媒体信息迅速成为重要的信息传递媒介,在图像中,文字信息(如新闻标题等字幕)包含了丰富的高层语义信息,提取出这些文字,对于图像高层语义的理解、索引和检索非常有帮助。

关键字:文字识别算法;静态图像文字提取;检索目录1 课程设计目的 (3)2 课程设计要求 (4)3 相关知识 (5)4 课程设计分析 (8)5 系统实现 (9)6 系统测试与分析 (17)6.1文字识别算法仿真结果 (17)6.2基于字符及单词的识别 (19)6.2.1 基于字符的识别 (19)6.2.2 基于单词的识别 (20)6.3现存算法的问题 (21)6.3.1 大多文字识别方法依赖于人工定义的特征 (21)6.3.2 脱离上下文的字符识别易造成显著的歧义 (21)6.3.3 简单的单词整体识别有着较大的局限性 (22)6.3.4 训练样本制作繁琐 (22)7 参考文献 (23)图像文字提取又分为动态图像文字提取和静态图像文字提取两种,其中,静态图像文字提取是动态图像文字提取的基础,其应用范围更为广泛,对它的研究具有基础性,所以本文主要讨论静态图像的文字提取技术。

静态图像中的文字可分成两大类:一种是图像中场景本身包含的文字,称为场景文字;另一种是图像后期制作中加入的文字,称为人工文字,如右图所示。

场景文字由于其出现的位置、小、颜色和形态的随机性,一般难于检测和提取;而人工文字则字体较规范、大小有一定的限度且易辨认,颜色为单色,相对与前者更易被检测和提取,又因其对图像内容起到说明总结的作用,故适合用来做图像的索引和检索关键字。

对图像中场景文字的研究难度大,目前这方面的研究成果与文献也不是很丰富,本文主要讨论图像中人工文字提取技术。

静态图像中文字的特点静态图像中文字(本文特指人工文字,下同)具有以下主要特征:(1)文字位于前端,且不会被遮挡;(2)文字一般是单色的;(3)文字大小在一幅图片中固定,并且宽度和高度大体相同,从满足人眼视觉感受的角度来说,图像中文字的尺寸既不会过大也不会过小;(4)文字的分布比较集中,排列一般为水平方向或垂直方向;(6)多行文字之间,以及单行内各个字之间存在不同于文字区域的空隙。

在静态图片文字的检测与提取过程中,一般情况下都是依据上述特征进行处理的。

数字图象处理静态图像文字提取一般分为以下步骤:文字区域检测与定位、文字分割与文字提取、文字后处理。

其流程如图所示。

图1 静态文字处理流程图在高速发展的计算机软硬件技术的支撑下,多媒体技术的发展非常迅速,计算机技术从传统的办公和计算逐渐向人工智能和数字娱乐发展。

在人工智能技术中,对环境信息的拾取处理和响应显得尤为重要,其中文本信息占环境信息很大一部分,为了使人工智能系统更为完善,则需要系统能够像人眼一样对周围环境信息进行理解,尤其是环境信息中的文本信息。

实验表明,人类日常生活中,50%以上的信息量来源于眼睛捕捉的周围环境的图像,人眼可以快速捕捉到图像中感兴趣的信息,而对于计算机来说,一幅图像仅仅是杂乱的数据,如何让计算机想人眼一样快速读取图像中的信息并进行分类及检索等相应处理,一直是多年来计算机视觉和模式识别研究者们探索的问题,如果能很好解决这些问题,能给工业生产及国防科技带来巨大的改进。

文字是信息存储和传递的重要载体,在很多由摄像设备拍摄的图片中,都存在或多或少的文字,比如路牌、店名、车站牌、商品简介等,识别图片中的文字对计算机理解图像的整体内容有非常重大的作用。

如何将图片中的文字信息抽象出来形成具有完整语义的信息,再将其表达出来用于信息传递,从而辅助人类的生产和生活是研究计算机视觉的学者们多年来一直致力于解决的问题。

研究如何对自然场景图片中的字符进行识别,提取出有用信息,在获取图片文本信息的各个领域都有极大的商业价值。

场景文字识别在日常生活也有着重要的地位,例如车牌的识别,盲人对周边环境信息的获取、图书馆管理的数字化和髙效化,以及网络中对指定的内容的图像和视频的检索等。

自然场景文本识别,就是将提取出来的自然场景图片中的进行识别,提取出信息用于进一步的处理。

在对场景文字识别的研究中,获取自然场景图片时候,由于背景物体、光线、阴影、拍摄角度引起的图片背景千变万化,摄像器材的精度、拍摄人员的技术等软硬件的不同为拍摄同样的自然场景图片也带来了相当大的差别,被拍摄的图片中包含的文字大小、颜色、书写风格的各不相同等因素都为自然场景文字识别的实现增加的相当的难度。

需要对自然场景图片中的识别首先需要对图片中的文本进行定位,然后再对己经精确定位的图片进行识别。

文本定位技术作为整个自然场景文本信息获取系统中的基础技术,已经得到较好发展,相同地,文本识别技术在近年来也得到了比较好的发展,但是由于文本的复杂性和随机性,较文本定位技术来说,文本识别技术发展较为缓慢。

3 相关知识1. 在Matlab中调用i1=imread(‘8.jpg’),可得到原始图像,如图所示:图2 文字识别算法调制器模型2. 调用i2=rgb2gray(i1),则得到了灰度图像,如图所示:图3 灰度图像调用a=size(i1);b=size(i2);可得到:a=3,b=2 即三维图像变成了二维灰度图像3. 调用i3=(i2》=thresh);其中thresh为门限,介于图4所示之间图4 thresh门限值图5 取得二值得到二值图像,如图所示:图6 二值图像4. 把二值图像放大观察,可看到离散的黑点对其采用腐蚀膨胀处理,得到处理后的图像,如图所示图7 腐蚀膨胀处理后的二值图像可见,腐蚀膨胀处理后的图像质量有了很大的改观。

横向、纵向分别的腐蚀膨胀运算比横向、纵向同时的腐蚀膨胀运算好上很多。

5、对腐蚀膨胀后的图像进行Y方向上的区域选定,限定区域后的图像如图所示:扫描方法:中间往两边扫。

6、对腐蚀膨胀后的图像进行X方向上的区域选定,限定区域后的图像如图11所示:扫描方法:两边往中间扫,纵向扫描后的图像与原图像的对照。

7. 调用i8=(iiXY~=1),使背景为黑色(0),字符为白色(1),便于后期处理。

8. 调用自定义函数(字符获取函数)i9=getchar(i8)。

9、调用自定义的字符获取函数对图像进行字符切割,并把切割的字符装入一维阵列。

10.调用以下代码,可将阵列word中的字符显示出来。

for j=1:cnum %cnum为统计的字符个数subplot(5,8,j),imshow(word{j}),title(int2str(j)); %显示字符end11. 调用以下代码,将字符规格化,便于识别:for j=1:cnum word{j}=imresize(word{j},[40 40]); %字符规格化成40×40end12. 调用以下代码创建字符集:code=char(‘由于作者水平有限书中难免存在缺点和疏漏之处恳请读批评指正,。

’);将创建的字符集保存在一个文件夹里面,以供匹配时候调用。

13. 字符匹配采用模板匹配算法:将现有字符逐个与模板字符相减,认为相减误差最小的现有字符与该模板字符匹配。

图8 字符匹配也就是说,字符A与模板字符T1更相似,我们可以认为字符集中的字符T2就是字符A。

经模板匹配。

14、调用以下代码,将字符放入newtxt.txt文本:new=[‘newtxt’,‘.txt’];c=fopen(new,‘a+’);fprintf(c,‘%s\n’,Code(1:cnum));fclose(c);4 课程设计分析1、算法具有局限性。

对于左右结构的字符(如:川)容易造成误识别,“川”字将会被识别成三部分。

当图片中文字有一定倾斜角度时,这将造成识别困难。

2、模板匹配效率低。

对于处理大小为m&TImes;m的字符,假设有n个模板字符,则识别一个字符至少需要m&TImes;m×n×2次运算,由于汉字有近万个,这将使得运算量十分巨大!此次字符识别一共花了2.838秒。

3、伸缩范围比较小。

对于受污染的图片,转换成二值图像将使字符与污染源混合在一起。

对于具体的图片,需反复选择合适的thresh进行二值化处理,甚至在处理之前必须进行各种滤波。

5 系统实现文字识别算法仿真代码如下:function [Stroke]= StrDetect01(LeftD,Y1,Y2,ST,PT)% ST为结构阈值,为了指定高度和宽度结构变化的不同SL=0;SR=0;SV=0;Count=0;%PT=5; % 突变的阈值Str='T'; % T表示结构未定,Str用于保存当前的基本结构Stroke='T'; % 用于保存基本结构Range=Y2-Y1+1; % 字符的宽度或者高度for j=Y1:Y2Count=Count+1;if (abs(LeftD(j))<PT)if (LeftD(j)<0)SL=SL+1;else if (LeftD(j)>0)SR=SR+1;elseSV=SV+1;endendelse % 检测到突变的决策if ((Count>=fix(Range/4)+1)) % 设定字符轮廓可能发生的突变范围if ((SL>=3)&&(SR>=3))Str='C';else if ((SV>=2*(SL+SR))&&((max(SL,SR)<3)||(min(SL,SR)<2)))Str='V';else if ((SL>SR)&&((SL>=0.5*SV)&&((SR<=1)||(SL>(SR+SV)))))Str='L';else if((SR>SL)&&((SR>=0.5*SV)&&((SL<=1)||(SL>(SR+SV)))))Str='R';else if (max(SL,SR)>=3)&&(min(SL,SR)>=2)Str='C';endendendendendStroke=[Stroke Str];endif ((j>=2+Y1)&&((j<=Y2-2)))Stroke=[Stroke 'P'];endSL=0;SR=0;SV=0;Count=0;Str='T';endend%========= 提取结构===============%if (Count>=fix(Range/4)+1) % 发生突变后,剩余部分可能无法形成字符结构if ((SL>=ST)&&(SR>=ST))Str='C';else if ((SV>=2*(SL+SR))&&((max(SL,SR)<3)||(min(SL,SR)<2)))Str='V';else if ((SL>SR)&&((SL>=0.5*SV)&&((SR<=2)||(SL>=(SR+SV)))))Str='L';else if ((SR>SL)&&((SR>=0.5*SV)&&((SL<=2)||(SL>=(SR+SV)))))Str='R';else if (max(SL,SR)>=3)&&(min(SL,SR)>=2)Str='C';endendendendendStroke=[Stroke Str];function [Numeral]=Recognition(StrokeTop,StrokeLeft,StrokeRight,StrokeBottom,Comp) % 采用四边的轮廓结构特征和笔划统计(仅针对0 和8)识别残缺数字% Comp 是用于识别0和8 的底部补充信息StrT='T';StrL='T';StrR='T';StrB='T';RStr='T'; % 用于保存识别出的数字[temp XT]=size(StrokeTop);[temp XL]=size(StrokeLeft);[temp XR]=size(StrokeRight);%[temp XB]=size(StrokeBottom);for Ti=2:XTif (StrokeTop(Ti)=='C')if ((XL==2)&&(XR==2))if((Comp>=3)||((StrokeBottom(2)~='C')&&(StrokeLeft(2)=='C')&&(StrokeRight(2)=='C')))RStr='8';elseRStr='0';endelse if((StrokeLeft(XL)=='L')&&(StrokeLeft(XL-1)=='P')&&(StrokeLeft(2)~='C'))RStr='2';else if ((StrokeLeft(2)=='C')&&(XL>=3)&&(StrokeLeft(3)=='P'))RStr='9';else if (XL>2)for Li=2:XLif (StrokeLeft(Li)=='P')RStr='3';endendelse if (XL==2)for Ri=2:XR-1if (StrokeRight(Ri)=='P')RStr='6';endendendendendendendelse if (StrokeTop(Ti)=='V') % Topif ((XR==2)&&(StrokeRight(2)=='C')) % 数字3 右端只有一个结构RStr='3';else if((XR==2)&&((StrokeLeft(2)=='P')||(StrokeLeft(3)=='P')||(StrokeLeft(XL)=='V')))RStr='7';else if (XR>2)for Ri=2:XRif (StrokeRight(Ri)=='P')RStr='5';endendendendI0=imread('8.jpg');% 必须为二值图像I=im2bw(I0,0.4);[y0 x0]=size(I);Range=sum((~I)');Hy=0;for j=1:y0if (Range(j)>=1)Hy=Hy+1;endendRangeX=sum((~I));Wx=0;for i=1:x0if (RangeX(i)>=1)Wx=Wx+1;endendAmp=24/Hy; % 将文字图像归一化到24像素点的高度。

相关主题