基于MATLAB的图片中字符的提取源代码Word文件下载.docx
《基于MATLAB的图片中字符的提取源代码Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的图片中字符的提取源代码Word文件下载.docx(5页珍藏版)》请在冰点文库上搜索。
iflength(size(pic))==3%判断图片的维数,统一为灰度图片
pic=rgb2gray(pic);
pic=(pic<
127);
%转化为二值图片
pic=xylimit(pic);
%图片区域的第一次边界限定
%%%%%%%第一阶段%%%%%%
m=size(pic,1);
Ycount=zeros(1,m);
fori=1:
m
Ycount(i)=sum(pic(i,:
));
lenYcount=length(Ycount);
Yflag=zeros(1,lenYcount);
fork=1:
lenYcount-2
ifYcount(k)<
3&
&
Ycount(k+1)<
Ycount(k+2)<
3
Yflag(k)=1;
end
fork=lenYcount:
1+2
Ycount(k-1)<
Ycount(k-2)<
Yflag2=[0Yflag(1:
end-1)];
Yflag3=abs(Yflag-Yflag2);
%做差分运算
[~,row]=find(Yflag3==1);
%找突变位置
row=[1rowm];
%调整突变位置点
row1=zeros(1,length(row)/2);
%截取图像的起始位置向量
row2=row1;
%截取图像的终止位置向量
length(row)
ifmod(k,2)==1;
%奇数为起始
row1((k+1)/2)=row(k);
else%偶数为终止
row2(k/2)=row(k);
pic2=pic(row1
(1):
row2
(1),:
%截取第一列字符
alpha=1024/size(pic2,2);
%计算放缩比例
pic2=imresize(pic2,alpha);
%调整第一列字符图片大小,作为基准
fork=2:
length(row)/2
pictemp=imresize(pic(row1(k):
row2(k),:
),[size(pic2,1)size(pic2,2)]);
pic2=cat(2,pic2,pictemp);
%横向连接图像块
pic=xylimit(pic2);
%限定图像区域
%%%%%%%第二阶段%%%%%%
[~,n]=size(pic);
Xcount=zeros(1,n);
forj=1:
n
Xcount(j)=sum(pic(:
j));
lenXcount=length(Xcount);
Xflag=zeros(1,lenXcount);
lenXcount-2
ifXcount(k)<
Xcount(k+1)<
Xcount(k+2)<
Xflag(k)=1;
fork=lenXcount:
Xcount(k-1)<
Xcount(k-2)<
Xflag2=[0Xflag(1:
Xflag3=abs(Xflag-Xflag2);
[~,col]=find(Xflag3==1);
col=[1colsize(pic,2)];
coltemp=col(2:
end)-col(1:
end-1);
[~,ind]=find(coltemp<
3);
col(ind)=0;
col(ind+1)=0;
col=col(col>
0);
col1=zeros(1,length(col)/2);
col2=col1;
length(col)
ifmod(k,2)==1
col1((k+1)/2)=col(k);
else
col2(k/2)=col(k);
picnum2=length(col)/2;
piccell2=cell(1,picnum2);
picnum2
piccell2{k}=pic(:
col1(k):
col2(k));
piccell2{k}=xylimit(piccell2{k});
piccell2{k}=imresize(piccell2{k},[128128]);
%显示提取出的字符,每行最多输出8个字符
ifmod(picnum2,8)
rownum=ceil(picnum2/8)+1;
else
rownum=picnum2/8;
subplot(rownum,8,k);
imshow(piccell2{k});
%%函数xylimit如下:
functionnewpic=xylimit(pic)
%functionname:
XYLIMIT
%Inputpic:
binaryimage
%Outputnewpic:
%用途:
对二值图像边界进行限定,要求图像是黑底白图
%example:
%%pic=imread('
数字字符.jpg'
%%pic=rgb2gray(pic);
%%pic=(pic<
%%pic=xylimit(pic);
%%imshow(pic);
[m,n]=size(pic);
%%%%纵向扫描%%%
%获取每一行的像素点个数
Ybottom=m;
%底部定界
Yvalue=Ycount(Ybottom);
while(Yvalue<
3)
Ybottom=Ybottom-1;
Yvalue=Ycount(Ybottom);
Yceil=1;
%顶部定界
Yvalue=Ycount(Yceil);
Yceil=Yceil+1;
Yvalue=Ycount(Yceil);
%%%横向扫描%%%
%获取每一列的像素点个数
Xleft=1;
%左侧定界
Xvalue=Xcount(Xleft);
while(Xvalue<
2)
Xleft=Xleft+1;
Xvalue=Xcount(Xleft);
Xright=n;
%右侧定界
Xvalue=Xcount(Xright);
Xright=Xright-1;
Xvalue=Xcount(Xright);
%%%截取图片%%%
newpic=pic(Yceil:
Ybottom,Xleft:
Xright);
(输入的样品图片1)
(输出结果1)
(输入的样品图片2)
(输出结果2)
(输入的样品图片3)
(输出结果3)