模式识别论文_第1页
模式识别论文_第2页
模式识别论文_第3页
模式识别论文_第4页
模式识别论文_第5页
已阅读5页,还剩1页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

手写体图片识别学号:姓名:专业:通信工程基于支持向量机的手写体数字图片识别摘要:手写体图片识别有多种方法,基于支持向量机的手写体图片识别相比其它方法来说,所使用的样本数量较少,结果较为精确。因此,基于支持向量机的手写体图片识别有比较重要的意义,较好的方法将会在社会生活中发挥作用。本文以作者做的一个小程序来阐述手写体图片识别的基本步骤,本程序并不是最好的程序,有待改进。另外,由于时间有限,网上没有找到手写体图片训练样本,因此,作者亲自为本程序做了样本,但是只有30张图片。关键词:手写体图片识别向量机数字图片二值图像引文:如今,社会生活中手写体图片识别有重要意义,各种方法应运而生。向量机相比神经网络来说需要的样本数量较少,是一种比较先进的方法。本程序首先需要采集手写体数字图片样本。首先找四位同学,请他们在空白纸上写下0到9十个数字。然后用ZJ886相机逐个数字进行拍片。任选3组作为训练样本,文件名命名规则为第一个数字代表实际数字,第二个数字为实际组数。例如:0的第一张样本我们命名为01.jpg,第二张命名为02.jpg。依次类推。我们通过第一个数字告诉了电脑训练图片的实际数字是多少。关键词:手写体图片识别向量机数字图片二值图像正文:我们首先来记录一下整个实验步骤:首先,打开Matlab,新建M文件,输入如下程序:clear;clc;picformat=('*.jpg','JPEGimage(*,jpg)';'*.bmp','bitmapimage(*,bmp)';'*.*','Allfiles(*,*)');%可以处理图片的各种格式[filename,filepath]=uigetfile(picforma>入训练图片,'*.jpg','multiselect','on');%可以一次性选择多张图片输入filename=cellstr(filename);%B片名字,如01,代表数字0的第一幅图片n=length(filename);totalpicture=zeros(n,256);group=zeros(n,1亮%度255代表白色fori=1:nI=imread([filepath,filename(i)]);I=255-I;I=im2bw(I,0.5)|%色处理并转化为二值图像[y,x]=find(I==1);bw=I(min(y):max(y),min(x):max(x));%完整数字的最小区域bw=imresize(bw,[16,16]);%2020像素大小totalpicture(i,:)=double(bw(:)');将图像转化数字矩阵group(i)=str2double(filename{i}(1));图片对应的真实数字endtrain_pic=arrayfun(@(k)totalpicture(group==k,:),0:9,'uniformoutput',false循环函数,即将指定的函数应用到给定数组的所有元素nchk=nchoosek(0:9,2);%将0~9两两配对svm=cell(size(nchk,1),1);*将0~9数字分类总共需要的向量机fork=1:size(nchk,1)t1=train_pic{nchk(k,1)+1};t2=train_pic{nchk(k,2)+1}t%成训练样本svm{k}=svmtrain([t1;t2],[ones(size(t1,1),1);zeros(size(t2,1),1)],'kernel_function','polynomial','polyorder',1);%支持向量机训练函数,核函数可以选用其他end%导入测试图片[filename1,filepath1]=uigetfile(picforma导入测试图片,'*.jpg','multiselect','on');%可以一次性选择多张图片输入filename=cellstr(filename1);晦片名字,如01,代表数字0的第一幅图片m=length(filename1);totalpicture1=zeros(n,256);group1=zeros(n,1)亮度255代表白色fori=1:m%true_num(i)=str2double(filename1{i}(1));每幅图片代表的真实数字,文件名为1等J=imread([filepath1,filename1{i}]);J=255-J;J=im2bw(J,0.5);[y,x]=find(J==1);bw=J(min(y):max(y),min(x):max(x));bw=imresize(bw,[16,16]);test=double(bw(:)');fork=1:length(svm)svmresult(k)=svmclassify(svm{k},test);支持向量机分类函数temp(k)=nchk(k,1).*svmresult(k)+nchk(k,2).*~svmresult(k);endresult(i)=mode(temp);%两两比较,以出现次数多的为最终类别endresult然后,我们让四位同学在空白纸上写下0到9十个数字,用ZJ886相机进行拍片,得到分辨率为320*240的40张数字图片。任选三组作为训练图片,并按照引文中说的那样对文件名正确命名。另一组作为训练图片,文件名可任意。第三步,点击运行。程序提示导入训练图片:打开训练图片的文件夹,全选进行导入:第四步:稍等片刻,注意训练图片越多,等待的时间越长。程序再次提示导入图片,不过是

导入测试图片。我们在第四位同学的手写体图片中任选两张放入测试1文件夹中。全选进行导入:此时可以在Matlab的命令窗口中看到实验结果:由于我们的训练图片较少,程序不够完美等原因。本程序识别时产生了误差,将第一个图片4识别成了0,识别错误。但是第二张图片成功识别。测试陌生图片结束,现在我们试试测试训练图片:再次运行本程序(注意需再次导入训练图片),当程序提示我们导入测试图片时,我们不导入第四位同学的手写体图片,而是在训练图片中任选两张放入测试2文件夹中,重新命名为任意名字。打开并全选导入。

此时我们可以看到结果:程序识别完全正确,说明程序对已经训练过的图片识别效果要比陌生图片效果要好,经过作者多次测试,本程序对已经训练过的图片识别正确率几乎为100%。而陌生图片的效果则没有这么好。注意本程序由于元胞数组的限制,每次测试至少导入两张测试图片。实验已经结束,我们对程序做一下简单的分析,首先程序用picformat语句规定了要导入图片的格式。AllFiles表示我们可以导入任何类型的图片。[filename,filepath]=uigetfile(picformat,'导入训练图片','*.jpg','multiselect','on')语句打开了导入训练图片的对话框,并把文件名字和文件路径相应的赋值给数组filename,filepath.注意我们可以导入多张图片,因此filename的值是一个数组,而不是一个变量。filename=cellstr(filename)这条语句将filename数组转换成了字符串数组。group(i)=str2double(filename{i}(1))这条语句是我们进行数字图片命名的基本依据,因为程序截取了文件名的第一个字符,因此,我们把文件名的第一个字符设置成真实数字的名字。这样程序就可以识别出每张训练图片了。训练程序结束后我们需要导入测试图片,注意这一步不能少。因此我们需要再次产生一个导入测试图片的对话框。是我们能够导入测试图片:[filenamel,filepath1]=uigetfile(picformat,'导入测试图片','*.jpg','multiselect','on');最后的语句:result(i)=mode(temp);得至|了实验结果。但是加分号后我们什么也看不出来。另外这条语句是在循环体内,为了避免重复显示,我们需要在循环体外再加上一个result语句。此时,结果就可以正确显示在命令窗口中了。通过手写体数字图片的识别,我们可以加深对模式识别的理解。模式识别需要样本,具有代表性的样本往往可以让程序运行出更为精确的结果。另外,程序对已经训练过的样本识别效果要明显比陌生图片

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论