基于特征统计的字符识别Word文件下载.docx
- 文档编号:19809627
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:20
- 大小:105.79KB
基于特征统计的字符识别Word文件下载.docx
《基于特征统计的字符识别Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于特征统计的字符识别Word文件下载.docx(20页珍藏版)》请在冰豆网上搜索。
这种方法实际上是传统方法与神经网络技术的结合,可以利用人的经验来获取模式特征,然后充分利用神经网络的分类能力来识别字符,其识别效果与字符特征的提取有关,而字符的特征提取往往比较耗时。
因此,字符特征的提取就成为研究的关键,特征参数过多会增加训练时间,过少会引起判断上的歧义。
另一种方法是充分利用神经网络的特点,直接把待处理图像输入网络,由网络自动实现特征提取直至识别。
这种网络互连较多,待处理信息量大。
这种方法无需特征提取,由网络自动识别字符,抗干扰性能好,识别率高。
但该方法产生的网络结构比较复杂,输入模式维数的增加可能导致网络规模庞大。
虽然,神经网络在识别效果上提高的余地较大,具有较强的容错能力,还可进一步训练学习,识别率较高,但其识别速度较慢,不能满足实时性的要求。
正文
一.特征统计匹配法介绍
特征统计匹配法的要点是先提取待识别模式的一组统计特征,再按照一定准则所确定的决策函数进行分类判决。
汉字的识别是将字符点阵看作一个整体,根据每个字符的笔画特征不同,将字符分解为横、竖、撇、捺、折、圆中的一种或几种结构特征的集合,经过大量的统计得到所用特征,再与字符库中的特征集合进行匹配,从而得到输入字符的识别结果。
1.字符轮廓的定义
由于受噪声和随机污点的干扰,以及二值化和粘连字符处理会引起的字符变形。
为了尽量减少这种变形对信息特征的干扰,或者从变形的字符中提取可靠的特征信息,将字符的整体轮廓分解为顶部,底部,左侧和右侧4个方向的轮廓特征来描述,使得当其中的的某部分的笔画发生变形时,不会改变或者减少对其他部位特征的影响。
左轮廓(LP(K),k=1,2,3….M)定义为字符最左边边界像素点的水平方向坐标值。
LP(i)=min{x|P(x,y)∈C,y=i}i=1,2….M
式中P(x,y)表示图像中的坐标为(x,y)的像素点,C表示字符像素点的集合。
同理,右侧轮廓(RP(k),k=1,2,3….M)定义为字符最右边边界像素点的水平方向坐标值。
LP(i)=max{x|P(x,y)∈C,y=i}i=1,2….M
相应的顶部轮廓(TP(K),k=1,2,3….M)定义为字符最高边界像素点的垂直方向坐标值。
底部轮廓(BP(K),k=1,2,3….M)定义为字符最低边界像素点的垂直方向坐标值。
TP(j)=min{x|P(x,y)∈C,y=j}j=1,2….N
BP(j)=min{x|P(x,y)∈C,y=j}j=1,2….N
为了描述轮廓变化的特征,定义了4个方向的轮廓的一阶微分:
LPD=LP(i+1)-LP(i);
RPD=RP(i+1)-RP(i);
TPD=TP(j+1)-TP(j);
BPD=BP(j+1)-BP(j);
式中i=1,2….M-1;
j=1,2…N-1;
2.结构基元
利用定义的一阶微分变化趋势,定义构成字符轮廓的基本基元。
基本基元共有5个,分别是左斜(L),右斜(R),竖直(V),圆弧(C),突变(P)。
以左侧轮廓为例,定义上述基本基元:
(1)竖直
定义:
假设SL,SV和SR分别表示某一侧轮廓的一阶微分值大于零,等于零和小于零的个数,若SR=0,SL=0,则结构为V。
(2)左斜
假设SL,SV和SR分别表示某一侧轮廓的一阶微分值大于零,等于零和小于零的个数,若SR=0,SL大于阈值LT,则结构为L。
(3)右斜
假设SL,SV和SR分别表示某一侧轮廓的一阶微分值大于零,等于零和小于零的个数,若SL=0,SR大于阈值RT,则结构为R。
(4)圆弧
假设SL,SV和SR分别表示某一侧轮廓的一阶微分值大于零,等于零和小于零的个数,若SR大于阈值RT,SL大于阈值LT,则结构为C。
(5)突变
连续的字符轮廓,其一阶微分值的变化量比较小,而当字符轮廓不连续时,其一阶微分值相对较大,因此,定义:
当轮廓的一阶微分值超过阈值PT时,则字符轮廓有突变,即为结构P。
3.基元的检测
根据上述定义,考虑实际应用中存在的干扰,基元的检测如下:
假设PD(K)表示某侧轮廓的一阶微分,k=1,2,….K,SL,SV,和SL分别检测到的PD(K)大于零,等于零和小于零的个数,PT,RT和LT为正整数,则:
(1)若PD(K)≥PT,则在K处检测到的结构为突变P;
若SL<
LT,SR<
RT,则在K处检测到的结构为竖直V;
若SL>
LT,SR>
RT,则在K处检测到的结构为左斜L;
RT,则在K处检测到的结构为右斜R;
RT,则在K处检测到的结构为圆弧C;
(2)由于字符轮廓突变处,表示字符轮廓不连续,则突变前后的字符轮廓特征必须分别检测。
即若K1处检测到P,则在[1,k1-1]的字符轮廓范围内统计SL,SV和SR独立进行结构基元检测。
若在k2处又检测到P,则在[k1+1,k2-1]的范围内进行结构基元检测,以此类推。
(3)由于字符轮廓基元的形成需要一定的数(T)轮廓像素点,即只有当SL+SV+SR≥T时,才能进行基元检测,否则不进行基元检测,例如,当SL+SV+SR=2时,其形成的基元结构是不稳定的。
(4)检测到突变结构P有效的范围在X∈[ST,N-ST+1],y∈[ST,M-ST+1],其中的ST表示字符笔画的宽度。
这主要是为了避免干扰严重的情况下,轮廓边缘光滑处理不够理想时,可能检测到的假突变基元。
4.轮廓的统计特征
采用上述的结构基元还不足以准确识别残缺和完整的数字,引入轮廓的统计特征。
(1)水平方向的最大字符宽度Wmax:
Wmax=max{RP(k)-LP(K)}
该特征主要用于识别数字1.当Wmax≤
即为数字1.
(2)垂直方向的比划数
该特征主要用于识别数字0和8.因为0和8的轮廓结构特征极其相似,所以借助于垂直方向的比划数加以区分,受数字底部残缺的影响8在垂直方向的最大笔画数也可能为2.采用检测到的笔画数为2时垂直方向的最小值来代替。
5.数字识别算法
将数字字符的顶部,左右两侧的局部轮廓结构特征和轮廓统计特征组合成特征向量,用以描述10个数字。
根据特征向量,采用结构语句识别算法识别底部残缺的和完整的数字字符。
由于底部特征丢失,会改变左右两侧的部分特征结构,但不会影响顶部特征,因此特征描述和机构匹配识别都从顶部轮廓特征开始。
实验结果
一.结果显示
数字0的识别结果:
数字1的识别结果:
数字2的识别结果:
数字3的识别结果:
数字4的识别结果:
数字5的识别结果:
数字6的识别结果:
数字7的识别结果:
数字8的识别结果:
数字9的识别结果:
二.结果分析
由于外部原因的存在常常会出现字符模糊、字符倾斜等情况,从而影响识别效果,当字符出现笔画融合、断裂、部分缺失时,此方法更加无能为力。
因此,实际应用效果不理想,鲁棒性不强。
参考文献
[1]冈萨雷斯《数字图像处理》第二版
[2]MATLAB从入门到精通].周建兴2008
[4]S.J.Chapman《MATLAB编程》2008
[5]《MATLAB7_0基础教程》清华大学2005
[6]苏金明《Matlab图形图像》2005
[7]《基于MATLAB图像处理的汽车牌照识别系统》仇成群2008(6)
[8]许志影、李晋平.MATLAB极其在图像处理中的应用.计算机与现代化,2004(4)
[9]一种复杂车辆图像中的多车牌定位方法,光子学报2007
(1)Vol.36No.1
[10]基于图像处理的汽车牌照的识别,陈秋菊
[11]宋建才.汽车牌照识别技术研究[J].工业控制计算机,2002,4:
45-57.
[12]张兴汇,刘玲,杜升之等.车牌照定位及倾斜校正方法研究
[J].系统工程与电子技术,2004,2:
237~239.
[13]崔屹.数字图像处理技术与应用[M].电子工业出版社,1997.
[14]张旭,王宏安,戴国忠等.面向车牌识别的区域分割技术[J].
计算机工程,2002,12:
113~115.
[15]袁志民,潘晓露等.车牌定位算法的研究[J].昆明理工学报,
2001,26
(2):
56~60.
附录
源代码
主函数
I0=imread('
2.jpg'
);
%必须为二值图像
I=im2bw(I0,0.4);
[y0x0]=size(I);
Range=sum((~I)'
Hy=0;
forj=1:
y0
if(Range(j)>
=1)
Hy=Hy+1;
end
end
RangeX=sum((~I));
Wx=0;
fori=1:
x0
if(RangeX(i)>
Wx=Wx+1;
Amp=24/Hy;
%将文字图像归一化到24像素点的高度。
I=imresize(I,Amp);
[yx]=size(I);
%I=bwmorph(~I,'
skel'
Inf);
%I=~I;
tic
%======基本结构=======%
%第一类:
竖(V);
左斜(L);
右斜(R);
突变(P)
%第二类:
左半圆弧(C);
右半圆弧(Q)
%的三类:
结构待定(T);
%=====================================%
Left=zeros(1,y);
%左端轮廓检测
y
i=1;
while((i<
=x)&
&
(I(j,i)==1))
i=i+1;
if(i<
=x)
Left(j)=i;
end
y-1
LeftD(j)=Left(j+1)-Left(j);
%==========结构特征提取=============%
j=1;
while((Left(j)<
1)&
(j<
y))
j=j+1;
end
Y1=j;
j=y;
(j>
1))
j=j-1;
Y2=j-1;
%去掉急剧变化的两端
%==============右边==================%
Right=zeros(1,y);
i=x;
while((i>
=1)&
i=i-1;
if(i>
=1)
Right(j)=i;
RightD(j)=Right(j+1)-Right(j);
Top=zeros(1,x);
%顶端轮廓检测
x
j=1;
while((j<
=y)&
if(j<
=y)
Top(i)=j;
x-1
TopD(i)=Top(i+1)-Top(i);
%==============================%
i=1;
while((Top(i)<
(i<
x))
X1=i;
i=x;
(i>
X2=i-1;
%===================================%
Bottom=zeros(1,x);
%底部轮廓检测
j=y;
while((j>
if(j>
Bottom(i)=j;
BottomD(i)=Bottom(i+1)-Bottom(i);
%==========数字1的宽度特征=========%
Width=zeros(1,y);
Width(j)=Right(j)-Left(j);
W=max(Width);
Po=0;
%用于检测笔划
Ne=0;
NS=0;
%笔划数
fori=X1+4:
X2-4
forj=1:
if((I(j+1,i)-I(j,i))>
0)%由黑到白
Po=Po+1;
if((Po>
=2)&
=fix(0.7*y)))
Po=3;
elseif((I(j+1,i)-I(j,i))<
0)%由白到黑
Ne=Ne+1;
if((Ne>
Ne=3;
NS=[NSmax(Po,Ne)];
Po=0;
Ne=0;
Comp=max(NS);
%==========轮廓结构特征提取==========%
if(min(W,Wx)>
10)
StrokeT=StrDetect01(TopD,X1,X2,3,6);
%顶部基本结构检测
StrokeL=StrDetect01(LeftD,Y1,Y2,3,5);
%左边基本结构检测
StrokeR=StrDetect01(RightD,Y1,Y2,3,5);
%右边基本结构检测
StrokeB=StrDetect01(BottomD,X1,X2,3,6);
%底部基本结构检测
%==========识别==========%
Digit=Recognition(StrokeT,StrokeL,StrokeR,StrokeB,Comp)
else
Digit='
1'
t=toc
%=======显示======%
px=(1:
x);
py=(1:
y);
S=num2str(Digit);
figure
(1);
subplot(231)
imshow(I);
title('
源图像'
)
subplot(232)
plot(Left);
grid
左轮廓'
subplot(233)
plot(Top);
上轮廓'
subplot(234)
plot(Right);
右轮廓'
subplot(235)
plot(Width);
宽度'
subplot(236)
title(S)
子函数一
function[Stroke]=StrDetect01(LeftD,Y1,Y2,ST,PT)
%ST为结构阈值,为了指定高度和宽度结构变化的不同
SL=0;
SR=0;
SV=0;
Count=0;
%PT=5;
%突变的阈值
Str='
T'
;
%T表示结构未定,Str用于保存当前的基本结构
Stroke='
%用于保存基本结构
Range=Y2-Y1+1;
%字符的宽度或者高度
forj=Y1:
Y2
Count=Count+1;
if(abs(LeftD(j))<
PT)
if(LeftD(j)<
0)
SL=SL+1;
elseif(LeftD(j)>
SR=SR+1;
else
SV=SV+1;
else%检测到突变的决策
if((Count>
=fix(Range/4)+1))%设定字符轮廓可能发生的突变范围
if((SL>
=3)&
(SR>
=3))
Str='
C'
elseif((SV>
=2*(SL+SR))&
((max(SL,SR)<
3)||(min(SL,SR)<
2)))
V'
elseif((SL>
SR)&
((SL>
=0.5*SV)&
((SR<
=1)||(SL>
(SR+SV)))))
L'
elseif((SR>
SL)&
((SR>
((SL<
R'
elseif(max(SL,SR)>
(min(SL,SR)>
=2)
Stroke=[StrokeStr];
if((j>
=2+Y1)&
((j<
=Y2-2)))
Stroke=[Stroke'
P'
];
SL=0;
SR=0;
SV=0;
Count=0;
%=========提取结构===============%
if(Count>
=fix(Range/4)+1)%发生突变后,剩余部分可能无法形成字符结构
if((SL>
=ST)&
=ST))
elseif((SV>
=2)||(SL>
=(SR+SV)))))
Stroke=[StrokeStr];
子函数二
function[Numeral]=Recognition(StrokeTop,StrokeLeft,StrokeRight,StrokeBottom,Comp)
%采用四边的轮廓结构特征和笔划统计(仅针对0和8)识别残缺数字
%Comp是用于识别0和8的底部补充信息
StrT='
StrL='
StrR='
StrB='
RStr='
%用于保存识别出的数字
[tempXT]=size(StrokeTop);
[tempXL]=size(StrokeLeft);
[tempXR]=size(StrokeRight);
%[tempXB]=size(StrokeBottom);
forTi=2:
XT
if(StrokeTop(Ti)=='
if((XL==2)&
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 特征 统计 字符 识别