基于MATLAB的图片中文字的提取及识别Word格式文档下载.docx
- 文档编号:6505256
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:20
- 大小:2.18MB
基于MATLAB的图片中文字的提取及识别Word格式文档下载.docx
《基于MATLAB的图片中文字的提取及识别Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的图片中文字的提取及识别Word格式文档下载.docx(20页珍藏版)》请在冰点文库上搜索。
文字区域检测与定位、文字分割与文字提取、文字后处理。
其流程如图1所示。
(图1)
四.文字提取、识别的详细步骤
1.在Matlab中调用i1=imread('
字符.jpg'
),可得到原始图像,如图2所示:
(图2)
2.调用i2=rgb2gray(i1),则得到了灰度图像,如图3所示:
(图3)
调用a=size(i1);
b=size(i2);
可得到:
a=3,b=2即三维图像变成了二维灰度图像
3.调用i3=(i2>
=thresh);
其中thresh为门限,在[0,255]之间
这里,i2_max=double(max(max(i2)));
%获取亮度最大值
i2_min=double(min(min(i2)));
%获取亮度最小值
thresh=round(i2_max-((i2_max-i2_min)/3));
得到二值图像,如图4所示:
(图4)
4.把二值图像放大观察,可看到离散的黑点
对其采用腐蚀膨胀处理,得到处理后的图像,如图5所示
(图5)
可见,腐蚀膨胀处理后的图像质量有了很大的改观。
横向、纵向分别的腐蚀膨胀运算比横向、纵向同时的腐蚀膨胀运算好上很多,图6可看出差别:
(图6)
5.对腐蚀膨胀后的图像进行Y方向上的区域选定,限定区域后的图像如图7所示:
扫描方法:
中间往两边扫
(图7)
纵向扫描后的图像与原图像的对照,如图8所示:
(图8)
6.对腐蚀膨胀后的图像进行X方向上的区域选定,限定区域后的图像如图9所示:
两边往中间扫
(图9)
纵向扫描后的图像与原图像的对照,如图10所示:
(图10)
7.调用i8=(iiXY~=1),使背景为黑色(0),字符为白色
(1),便于后期处理。
背景交换后的图像如图11所示:
(图11)
8.调用自定义函数(字符获取函数)i9=getchar(i8),得到图像如图12所示:
9.调用自定义的字符获取函数对图像进行字符切割,并把切割的字符装入一维阵列,切割过程如图12所示:
(图12)
10.调用以下代码,可将阵列word中的字符显示出来,如图13所示:
forj=1:
cnum%cnum为统计的字符个数
subplot(5,8,j),imshow(word{j}),title(int2str(j));
%显示字符
end
(图13)
可以看到,字符宽度不一致
11.调用以下代码,将字符规格化,便于识别:
cnum
word{j}=imresize(word{j},[4040]);
%字符规格化成40×
40的
得到规格化之后的字符如图14所示:
(图14)
12.调用以下代码创建字符集:
code=char('
由于作者水平有限书中难免存在缺点与疏漏之处恳请读批评指正,。
'
);
将创建的字符集保存在一个文件夹里面,以供匹配时候调用,如图15所示:
(图15)
13.字符匹配采用模板匹配算法:
将现有字符逐个与模板字符相减,认为相减误差最小的现有字符与该模板字符匹配。
假设:
字符
,模板字符
也就是说,字符A与模板字符
更相似,我们可以认为字符集中的字符
就是字符A。
经模板匹配,可得字符信息如下:
由于读者书评有限书中难免存在缺点与纰漏之处,恳请读者批评指正。
效果如图16所示:
(图16)
14.调用以下代码,将字符放入newtxt.txt文本:
new=['
newtxt'
'
.txt'
];
c=fopen(new,'
a+'
fprintf(c,'
%s\n'
Code(1:
cnum));
fclose(c);
newtxt.txt文本内容如图17所示:
(图17)
五.反思与体会
1.算法具有局限性。
对于左右结构的字符(如:
川)容易造成误识别,“川”字将会被识别成三部分。
当图片中文字有一定倾斜角度时,这将造成识别困难。
2.模板匹配效率低。
对于处理大小为m×
m的字符,假设有n个模板字符,则识别一个字符至少需要m×
m×
n×
2次运算,由于汉字有近万个,这将使得运算量十分巨大!
此次字符识别一共花了2.838秒。
3.伸缩范围比较小。
对于受污染的图片,转换成二值图像将使字符与污染源混合在一起。
对于具体的图片,需反复选择合适的thresh进行二值化处理,甚至在处理之前必须进行各种滤波。
4.通过这次数字图象处理的学习与报告的撰写,我们小组发挥了团结友爱的协作精神,大量的资料查阅丰富了我们的视野,同时使我们对这么课更加感兴趣。
参考文献
[1]樊昀,王润生.从图像中提取文字[J].国防科技大学学报,2002,24
(1):
59-62.
[2]王健,王晨.基于静态图片的文本提取技术的研究[J].延边大学学报(自然科学版),2007,33
(2):
124-128.
[3]夏莹,马少平,孙茂松等.计算机语言学方法在中文文字识别后处理中的应用[J].中文信息,1996,
(2):
50-51.
[4]郑阿奇,曹戈,赵阳.MATLAB实用教程[M].北京:
电子工业出版社
[5]程卫国,冯峰,姚东,徐听.MATLAB5.3应用指南[M].北京:
人民邮电出版社
[6]陈杨.MATLAB6.X图像编程与图像处理[M].西安:
西安电子科技大学出版社
[7]阮秋琦.数字图像处理[M].电子工业出版社,2001年.
[8]徐建华.图像处理与分析[M].科学出版社,1999年.
附录
主程序源代码:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%数字图象处理大作业%%%%%%%%%%%%%%%%
%————————图片中文字的提取及识别————————%
tic
I=imread('
%打开图片
%figure
(1);
imshow(I);
title('
原始图像'
color'
b'
I=rgb2gray(I);
%RGB图片转化成灰度图像
%figure
(2);
灰度图像'
i_max=double(max(max(I)));
%获取亮度最大值
i_min=double(min(min(I)));
thresh=round(i_max-((i_max-i_min)/3));
%计算灰度图像转化成二值图像的门限thresh
I=(I>
%I为二值图像
%figure(3);
二值图像'
seY=[1;
1;
1];
%构造结构元素
I=imdilate(I,seY);
%腐蚀图像
I=imerode(I,seY);
%膨胀图像
seX=[111];
I=imdilate(I,seX);
I=imerode(I,seX);
%figure(4);
腐蚀膨胀后的图像'
ii=double(I);
[m,n]=size(ii);
%获取图像大小信息
%确定文字区域
%纵向扫描
countY=zeros(m,1);
fori=1:
m
n
ifii(i,j)==0
countY(i,1)=countY(i,1)+1;
end
[maxYindexY]=max(countY);
tempY1=indexY;
while(countY(tempY1,1)>
3)&
&
(tempY1>
1)
tempY1=tempY1-1;
tempY2=indexY;
while(countY(tempY2,1)>
(tempY2<
m)
tempY2=tempY2+1;
tempY1=tempY1-1;
tempY2=tempY2+1;
iiY=I(tempY1:
tempY2,:
%确定了Y方向上的文字区域
%figure(5);
imshow(iiY);
Y方向区域大致确定后的图像'
%横向扫描
countX=zeros(1,n);
forj=1:
fori=tempY1:
tempY2
countX(1,j)=countX(1,j)+1;
tempX1=1;
while(countX(1,tempX1)<
(tempX1<
n)
tempX1=tempX1+1;
tempX2=n;
while(countX(1,tempX2)<
(tempX2>
tempX2=tempX2-1;
tempX1=tempX1-1;
tempX2=tempX2+1;
iiXY=iiY(:
tempX1:
tempX2);
%确定了整体的文字区域
%figure(6);
imshow(iiXY);
X、Y方向区域都大致确定后的图像'
ii=(iiXY~=1);
%黑色背景,白色字体
%figure(7);
imshow(ii);
背景与文字交换颜色的图像'
ii=bwareaopen(ii,200);
%删除面积小于200的杂质图像
%figure(8);
删除杂质干扰的图像'
myI=charslice(ii);
%限定文字区域
%figure(9);
限定文字区域的图像'
y1=10;
y2=0.25;
flag=0;
maxnum=40;
k=1;
%maxnum为字符个数限定值,k用于统计实际字符个数
word=cell(1,maxnum);
%建立单元阵列,用于储存字符
figure(10)
whilesize(myI,2)>
10%当myI的长度小等于10,可确定没有字符了
[word{k},myI]=getword(myI);
%获取字符
k=k+1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ifk==2
subplot(5,1,1);
imshow(myI);
第一次切割后的图像'
ifk==3
subplot(5,1,2);
第二次切割后的图像'
ifk==5
subplot(5,1,3);
第四次切割后的图像'
ifk==16
subplot(5,1,4);
第十五次切割后的图像'
subplot(5,1,5);
最后一次切割后的图像'
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
cnum=k-1;
%实际字符总个数
figure(11);
subplot(5,8,j),imshow(word{j}),title(int2str(j));
figure(12);
imwrite(word{j},[int2str(j),'
.jpg'
]);
%保存字符
defx=40;
defy=40;
code=char('
%创建字符集
codenum=size(code,2);
%获取字符集中字符个数
ch=int2str(i);
%数字转化为字符
tempbw=imread([ch'
%打开预匹配字符
fork=1:
codenum
fname=strcat('
C:
\Users\Administrator\Desktop\数字图像处理大作业\字符匹配库\'
code(k),'
%字符匹配库中的字符
sample=imread(fname);
subsam=abs(tempbw-sample);
%作比较
count=sum(sum(subsam));
%匹配误差统计
err(k)=count;
erro=err(1:
codenum);
minerror=min(erro);
%找出误差最小的模板字符
findc=find(erro==minerror);
%获取模板字符序号
Code(i)=code(findc);
%将字符装入Code
figure(13);
tt=title(['
文字信息:
'
Code(1:
cnum)],'
Color'
%显示字符信息
set(tt,'
fontsize'
24);
%设置字体
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%将图片文字写入newtxt文本
new=['
c=fopen(new,'
fprintf(c,'
fclose(c);
t=toc
charslice(字符分割)函数源代码:
%字符分割
functiony=charslice(ii)
top=1;
bottom=m;
left=1;
right=n;
whilesum(ii(top,:
))==0&
top<
top=top+1;
whilesum(ii(bottom,:
bottom>
=1
bottom=bottom-1;
whilesum(ii(:
left))==0&
left<
left=left+1;
right))==0&
right>
right=right-1;
ydiff=bottom-top;
xdiff=right-left;
y=imcrop(ii,[lefttopxdiffydiff]);
getword(字符获取)函数源代码:
%字符获取
function[word,result]=getword(ii)
word=[];
y1=8;
y2=0.5;
whileflag==0
[m,n]=size(ii);
wide=0;
whilesum(ii(:
wide+1))~=0&
wide<
=n-2
wide=wide+1;
temp=charslice(imcrop(ii,[11widem]));
[m1,n1]=size(temp);
ifwide<
y1&
n1/m1>
y2
ii(:
1:
wide)=0;
ifsum(sum(ii))~=0
ii=charslice(ii);
%切割出最小范围
elseword=[];
flag=1;
else
word=charslice(imcrop(ii,[11widem]));
ifsum(sum(ii))~=0;
flag=1;
elseii=[];
result=ii;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 MATLAB 图片 文字 提取 识别