基于MATLAB的图⽚中⽂字的提取及识别
基于MATLAB的图⽚中⽂字的提取及识别
⼀.引⾔
随着计算机科学的飞速发展,以图像为主的多媒体信息迅速成为重要的信息传递媒介,在图像中,⽂字信息(如新闻标题等字幕) 包含了丰富的⾼层语义信息,提取出这些⽂字,对于图像⾼层语义的理解、索引和检索⾮常有帮助。图像⽂字提取⼜分为动态图像⽂字提取和静态图像⽂字提取两种,其中,静态图像⽂字提取是动态图像⽂字提取的基础,其应⽤范围更为⼴泛,对它的研究具有基础性,所以本⽂主要讨论静态图像的⽂字提取技术。静态图像中的⽂字可分成两⼤类: ⼀种是图像中场景本⾝包含的⽂字, 称为场景⽂字; 另⼀种是图像后期制作中加⼊的⽂字, 称为⼈⼯⽂字,如右图所⽰。场景⽂字由于其出现的位置、⼩、颜⾊和形态的随机性, ⼀般难于检测和提取;⽽⼈⼯⽂字则字体较规范、⼤⼩有⼀定的限度且易辨认,颜⾊为单⾊, 相对与前者更易被检测和提取,⼜因其对图像内容起到说明总结的作⽤,故适合⽤来做图像的索引和检索关键字。对图像中场景⽂字的研究难度⼤,⽬前这⽅⾯的研究成果与⽂献也不是很丰富,本⽂主要讨论图像中⼈⼯⽂字提取技术。
⼆.静态图像中⽂字的特点
静态图像中⽂字(本⽂特指⼈⼯⽂字,下同)具有以下主要特征:
(1)⽂字位于前端,且不会被遮挡;
丰田凯美瑞第七代
(2)⽂字⼀般是单⾊的;
(3)⽂字⼤⼩在⼀幅图⽚中固定,并且宽度和⾼度⼤体相同,从满⾜⼈眼视觉感受的⾓度来说,图像中⽂字的尺⼨既不会过⼤也不会过⼩;
(4)⽂字的分布⽐较集中;
(5)⽂字的排列⼀般为⽔平⽅向或垂直⽅向;
(6)多⾏⽂字之间,以及单⾏内各个字之间存在不同于⽂字区域的空隙。在静态图⽚⽂字的检测与提取过程中, ⼀般情况下都是依据上述特征进⾏处理的。
三.⽂字提取、识别的⼀般流程
静态图像⽂字提取⼀般分为以下步骤:⽂字区域检测与定位、⽂字分割与⽂字提取、⽂字后处理。其流程如图1所⽰。
(图1)
四.⽂字提取、识别的详细步骤
1.
1. 在Matlab中调⽤i1=imread('字符.jpg'),可得到原始图像,如图2所⽰:
(图2)
2. 调⽤i2=rgb2gray(i1),则得到了灰度图像,如图3所⽰:
2.
(图3)
调⽤a=size(i1);b=size(i2);可得到:a=3,b=2 即三维图像变成了⼆维灰度图像3. 调⽤i3=(i2>=thresh);
其中thresh为门限,在
3.
[0,255]之间
这⾥,i2_max=double(max(max(i2))); %获取亮度最⼤值
i2_min=double(min(min(i2))); %获取亮度最⼩值
英伦金刚2代怎么样thresh=round(i2_max-((i2_max-i2_min)/3));
得到⼆值图像,如图4所⽰:
(图4)
4. 把⼆值图像放⼤观察,可看到离散的⿊点
4.
对其采⽤腐蚀膨胀处理,得到处理后的图像,如图5所⽰
(图5)
可见,腐蚀膨胀处理后的图像质量有了很⼤的改观。
横向、纵向分别的腐蚀膨胀运算⽐横向、纵向同时的腐蚀膨胀运算好上很多,图6可看出差别:
(图6)
5. 对腐蚀膨胀后的图像进⾏Y⽅向上的区域选定,限定区域后的图像如图7所⽰:
5.
扫描⽅法:中间往两边扫
(图7)
纵向扫描后的图像与原图像的对照,如图8所⽰:
(图8)
6.对腐蚀膨胀后的图像进⾏X⽅向上的区域选定,限定区域后的图像如图9所⽰:
6.
扫描⽅法:两边往中间扫
(图9)
纵向扫描后的图像与原图像的对照,如图10所⽰:
(图10)
7. 调⽤i8=(iiXY~=1),使背景为⿊⾊(0),字符为⽩⾊(1),便于后期处理。
7.
背景交换后的图像如图11所⽰:
(图11)
8. 调⽤⾃定义函数(字符获取函数)i9=getchar(i8),得到图像如图12所⽰:
油表显示不正常是因为什么(图9)
9.调⽤⾃定义的字符获取函数对图像进⾏字符切割,并把切割的字符装⼊⼀维阵列,切割 过程如图12所⽰:9.
周五限行(图12)
10.调⽤以下代码,可将阵列word中的字符显⽰出来,如图13所⽰:
10.
for j=1:cnum %cnum为统计的字符个数
subplot(5,8,j),imshow(word{j}),title(int2str(j)); %显⽰字符
end
(图13)
可以看到,字符宽度不⼀致
11.调⽤以下代码,将字符规格化,便于识别:
11.
for j=1:cnum
word{j}=imresize(word{j},[40 40]); %字符规格化成40×40的
end
得到规格化之后的字符如图14所⽰:
(图14)
12.调⽤以下代码创建字符集:
花乡二手车交易市场12.
code=char('由于作者⽔平有限书中难免存在缺点和疏漏之处恳请读批评指正,。');微面哪个好