基于知识库的手写体数字识别.docx
《基于知识库的手写体数字识别.docx》由会员分享,可在线阅读,更多相关《基于知识库的手写体数字识别.docx(12页珍藏版)》请在冰点文库上搜索。
基于知识库的手写体数字识别
HUNANUNIVERSITY
课程
模式识别
题目
基于知识库的手写体数字识别
学生姓名
学生学号
专业班级
学院名称
2016年6月25日
基于知识库的手写体数字识别
1案例背景:
手写体数字识别是图像识别学科下的一个分支,是图像处理和模式识别研究领域的重要应用之一,并且具有很强的通用性。
由于手写数字的随意性很大,如笔画粗细、字体大小、倾斜角度等因素都有可能直接影响到字符的识别准确率,所以手写体数字识别是一个很有挑战性的课题。
在过去的数十年中,研究者们提出了许多识别方法,并取得了一定的成果。
在大规模数据统计如例行年检、人口普查、财务、税务、邮件分拣等应用领域都有广阔的应用前景。
本案例实现了手写阿拉伯数字的识别过程,并对手写数字识别的基于统计的方法进行了简要介绍和分析。
本文实现的手写字体识别程序具有手写数字图像读取、特征提取、数字模板特征库以及识别功能。
2理论基础:
2-1手写字体识别方法:
手写体数字识别是一个跨学科的复杂问题,综合了图像处理、模式识别、机器学习等多个领域的知识,其识别过程一般包含图像预处理、特征提取、分类器的设定及其后处理等组成。
处理流程如图2-1所示。
图2-1手写体数子识别流程图
2-2图像预处理
手写体数字识别的首要工作是图像预处理。
在图像预处理过程中需要解决的主要问题有:
定位、图像二值化、平滑化(去噪)HJ、字符切分、规范化等。
图像二值化是指将整个图像呈现出明显的黑白效果。
待识别的手写体数字图像在扫描过程中,常会带来一些噪声,用不同的扫描分辨率得到的数字图像,其质量也各不相同,故而要先将这些干扰因素排除掉。
另外,还需要正确分割整幅文档图像中的手写体数字,而分割后的数字大小、字体常各不相同,故还需进行归一化处理。
2-3特征提取
特征提取的目的是从经过预处理后的数字图像中,提取出用以区分与其它数字类别的本质属性并数值化,形成特征矢量的过程。
常见的手写体数字特征有:
模板特征、统计特征、结构特征和变换特征。
2-4分类器
不同的分类方式对应不同的分类器,可选的分类器有神经网络、支持向量机等。
利用训练出的分类器,对特征提取后的手写体数字进行分类识别。
分类器的识别原理是通过其拓扑结构和内置参数定义了特征空间上的一组曲面或超曲面,利用这组曲面或超曲面将特征空间划分为不同的区域,从而达到分类识别的目的。
2-5算法流程
首先,读入手写数字图片进行归一化处理,统一尺寸。
默认为24×24图形块,并通过ostu算法进行二值化;其次,对二值化图像进行图像细化等形态学操作,并按照算法要求进行特征提取;最后,载入模板矩阵进行对比,选用欧式距离测度,得到识别结果。
其算法流程如图1所示。
特征提取
根据手写数字图像本身的结构特征,通过计算端点、指定方向直线的交叉点个数来作为特征向量。
其主要步骤如下:
1.垂直交点。
对细化后的手写数字图像分别在其列宽的5/12、1/2、7/12处生成垂直的三条直线,提取这三条垂直直线与数字笔画的角点数并存储。
2.水平交点。
对细化后的手写数字图像分别在其列宽的1/3、1/2、2/3处生成水平的三条直线,提取这三条垂直直线与数字笔画的角点数并存储。
3.对角交点。
对细化后的手写数字图像分别提取两条对角直线,提取这两条对角直线与数字笔画的交点数并存储。
由于以上步骤均作用于细化后的数字图像,其笔画简单且特征稳定,因此对其提取的基本交点及结构端点能反映数字的本质特征,可快速、有效地识别数字字符,并达到较好的识别正确率。
其中,提取笔画结构端点特征的算法如下。
1.目标定位。
对细化后的手写数字图像按行从上到下、按列从左到右进行顺序扫描,定位选择黑像素点P作为手写笔画目标。
2.邻域统计。
计算黑色像素P的8领域之和N,若N=1,则像素P为端点,端点计数器加1;否则舍弃该点。
3.遍历图像。
遍历整个图像,重复进行目标定位、领域统计的操作流程,提取端点特征。
依据上述对手写数字图像的交点、端点特征提取方法,本案例中的特征向量VEC由9个分类组成,其排列如下:
VEC=[垂直5/12处交点数,垂直中线交点数,垂直7/12处交点数,
水平1/3处交点数,水平中线交点数,水平2/3处交点数,左对角线交点数,右对角线交点数,端点数]
3模式识别
本案例采用的是基于模式知识库的识别方法,所以系统调研的关键步骤就是对数字字符的结构特征的分析及其模型的构造。
因此,本案例首先对0-9这10个数字进行结构分析并建模,然后提取相关特征,最后构造模板库。
在实验过程中,我们选择规范手写和自由手写两组样本对知识库进行参数调整,这些训练样本由200个规范手写样本和200个自由手写样本组成,通过计算样本对应分量的算术平均值获得知识库中特征向量的每个分量。
通过上述步骤得到的知识库由两套模板组成,在本次实验过程中,我们选择基于模板匹配的识别方法,通过技术欧式距离来衡量匹配程度。
识别系统中的特征向量包含9个分量,且计算距离公式是欧式距离。
因此,在识别过程中分别计算待识别图像与知识库中各个模板特征向量之间的欧式距离,即与0-9这10个数字逐个比较,选择最小距离对应的数字作为最后的识别结果。
4程序实现
手写体数字识别有着广泛的应用前景,目前被广泛应用于财务报表、银行票据、户籍登记、税务信息、统计信息等方面,是模式识别和图像处理领域的一个研究热点。
4-1图像预处理
该步骤主要是对输入的图像进行灰度化、归一化、滤波、二值化。
鉴于数字的识别与色彩无关,并且考虑到噪声影响,这里采用中值滤波去噪,将图像进行预处理,最终可得到二值化图像。
图4-1待识别手写数字图4-2二值化图像
图4-3归一化图像图4-4中值滤波
4-2特征提取
该步骤主要是对预处理得到的二值图像进行图像细化操作,并按照算法要求提取交点、端点特征,组成特征向量。
本节根据上一节中的特征提取方法,对基于24x24点阵的细化图像进特征提取,提取的特征矢量维度为32。
对于矩特征,提取特征变量M,M为7个Hu平面不变矩的第一个,再除以1000,将特征变量的取值范围规范化,这是为了防止特征变量的取值较大时发生浮点数溢出。
M/1000是特征矢量的第1个矢量。
综合端点特征提取方法和分区域特征提取方法产生了6个特征矢量:
点阵上半区域端点数、点阵下半区域端点数、点阵左半区域端点数、点阵右半区域端点数、三结点数和四结点数
图4-5图像特征预处理结果
4-3模式识别
该步骤主要是对载入的模板矩阵及输入图像计算出特征向量选用欧式距离测度,进而得到识别结果。
载入模式库。
我们选择规范手写和自由手写两组样本对知识库进行参数调整,这些训练样本由200个规范手写样本和200个自由手写样本组成,通过计算样本对应分量的算术平均值获得知识库中特征向量的每个分量。
该知识库也称为判别标准向量矩阵,本文把该矩阵命名为Data.mat。
匹配识别。
在本文所提出的方法中,选择基于模板匹配的识别方法,通过计算欧式距离来衡量匹配的程度。
识别系统中的特征向量包含9个分量,且计算距离公式是欧式距离。
5实验结果
6不足与展望
手写体数字的样本类别只有10类,与其他大字符集的识别相比要容易得多。
本案例采用的模板匹配分类器节省时间,简单却也可以达到较高的识别效果。
但是在系统的设计上由于实验条件限制,只采用了200组样本图像进行特征提取,得到模板库。
特征训练不够导致识别率不高,可以考虑增加训练样本,采用神经网络等识别器进行处理,提高识别率。
参考文献
[1]钱谡.基于图像处理的字符识别系统研究[M].河北农业大学,2007.
[2]范艳峰,肖乐,甄彤.自由手写体数字识别技术研究[J].计算机工程,2005.
[3]阮秋琦.数字图像处理[M].北京:
电子工业出版社,2001.
[4]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解.北京:
清华大学出版社,2012.
[5]SahelBa-KaraitNO,ShamsuddinSM.HandwriRendigitsrecognitionusingparticleswarmoptimization[C].Modeling&Simulation,2008.AICMS08.SecondAsiaInternationalConferenceon.IEEE,2008:
615.619.
源代码
本程序采用模块化编程的思想进行设计,不同的函数模块实现各自的一个功能,然后由功能模块对各函数模块进行整合与调用。
最后,再在主函数模块中调用功能模块,实现程序的最终功能。
二值化模块:
functionbw=Bw_Img(I)
ifndims(I)==3
I=rgb2gray(I);
end
bw=im2bw(I,graythresh(I));
bw=~bw;
归一化模块
functionI1=Normalize_Img(I)
ifndims(I)==3
I=rgb2gray(I);
end
I1=imresize(I,[2424],'bicubic');
特征提取模块
functionnum=Main_Process(I,flag)
ifnargin<2
flag=1;
end
I1=Normalize_Img(I);
bw1=Bw_Img(I1);
bw2=Thin_Img(bw1);
bw=bw2;
sz=size(bw);
[r,c]=find(bw==1);
rect=[min(c)min(r)max(c)-min(c)max(r)-min(r)];
vs=rect
(1)+rect(3)*[5/121/27/12];
hs=rect
(2)+rect(4)*[1/31/22/3];
pt1=[rect(1:
2);rect(1:
2)+rect(3:
4)];
pt2=[rect
(1)+rect(3)rect
(2);rect
(1)rect
(2)+rect(4)];
k1=(pt1(1,2)-pt1(2,2))/(pt1(1,1)-pt1(2,1));
x1=1:
sz
(2);
y1=k1*(x1-pt1(1,1))+pt1(1,2);
k2=(pt2(1,2)-pt2(2,2))/(pt2(1,1)-pt2(2,1));
x2=1:
sz
(2);
y2=k2*(x2-pt2(1,1))+pt2(1,2);
ifflag
figure('Name','数字识别','NumberTitle','Off','Units','Normalized','Position',[0.20.450.50.3]);
subplot(2,2,1);imshow(I,[]);title('原图像','FontWeight','Bold');src=I;
subplot(2,2,2);imshow(I1,[]);title('归一化图像','FontWeight','Bold');guiYi=I1;
holdon;
h=rectangle('Position',[rect(1:
2)-1rect(3:
4)+2],'EdgeColor','r','LineWidth',2);
legend(h,'数字区域标记','Location','BestOutside');
subplot(2,2,3);imshow(bw1,[]);title('二值化图像','FontWeight','Bold');erZh=bw1;
subplot(2,2,4);imshow(bw,[],'Border','Loose');title('细化图像','FontWeight','Bold');xiHua=bw;
holdon;
h=[];
fori=1:
length(hs)
h=[hplot([1sz
(2)],[hs(i)hs(i)],'r-')];
end
fori=1:
length(vs)
h=[hplot([vs(i)vs(i)],[1sz
(1)],'g-')];
end
h=[hplot(x1,y1,'y-')];
h=[hplot(x2,y2,'m-')];
legend([h
(1)h(4)h(7)h(8)],{'水平线','竖直线','左对角线','右对角线'},'Location','BestOutside');
holdoff;
end
v{1}=[1:
sz
(2);repmat(hs
(1),1,sz
(2))]';
v{2}=[1:
sz
(2);repmat(hs
(2),1,sz
(2))]';
v{3}=[1:
sz
(2);repmat(hs(3),1,sz
(2))]';
v{4}=[repmat(vs
(1),1,sz
(1));1:
sz
(1)]';
v{5}=[repmat(vs
(2),1,sz
(1));1:
sz
(1)]';
v{6}=[repmat(vs(3),1,sz
(1));1:
sz
(1)]';
v{7}=[x1;y1]';
v{8}=[x2;y2]';
fori=1:
8
num(i)=GetImgLinePts(bw,round(v{i})-1);
end
num(9)=sum(sum(endpoints(bw)));
计算交点函数:
functionnum=GetImgLinePts(bw,v)
num=0;
fori=1:
size(v,1)
ifv(i,2)>1&&v(i,2)1&&v(i,1)num=num+1;
end
end
计算端点函数:
functionnum=GetImgEndPts(bw)
num=0;
fori=1:
size(bw,1)
forj=1:
size(bw,2)
ifi>2&&i2&&j&&bw(i,j)==1...
&&sum(sum(bw(i-1:
i+1,j-1:
j+1)))==1
num=num+1;
end
end
end
匹配识别模块:
functionresult=MaskRecon(Data,v)
fori=1:
size(Data,1)
dis(i)=norm(v-Data(i,:
));
end
[mindis,ind]=min(dis);
ifind<11
result=ind-1;
else
result=ind-11;
end
主函数模块
functionres=ShowNum(img)
loadData.mat
v=Main_Process(img,0);
res=MaskRecon(Datas,v);
msgbox(sprintf('识别结果:
%d',res),'提示信息','modal');
end