近邻法对0-9进行数字识别程序_第1页
近邻法对0-9进行数字识别程序_第2页
近邻法对0-9进行数字识别程序_第3页
近邻法对0-9进行数字识别程序_第4页
近邻法对0-9进行数字识别程序_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、子程序%特征生成方法1%function feature=Get_Feature(A)A=im2bw(A,0.5); %设置阈值为0.5,使用阈值变换法把灰度图像转化为二值图像%本方法把二值化的图片分为6部分a1=A(1:18,1:10);a2=A(1:18,11:20);a3=A(19:36,1:10);a4=A(19:36,11:20);f1=nnz(a1); %计算a1的非零元素总数f2=nnz(a2); %计算a2的非零元素总数f3=nnz(a3); %计算a3的非零元素总数f4=nnz(a4); %计算a4的非零元素总数%特征生成%feature=f1 f2 f3 f4 ; %fea

2、ture是一个4行1列的矩阵主程序% 使用1近邻和3近邻法对0-9个数字进行判别% 每个文件夹中的前30个为训练样本,后10个测试样本% 得到:sum为正确率% 清除运算空间clc;clear;%根据目录读取文件Path = E:数字识别 ; %目录名% 训练过程% 训练样本特征提取,得到10类各30个样本的特征值% 将所有的特征值合成一个300*4的矩阵%for j=1:10 TypeA = strcat(Path,num2str(j-1),); %获取训练样本目录 PicDirA = dir(TypeA,*.bmp); %dir 函数 for i=1:30 A=imread(TypeA,P

3、icDirA(i).name);%依次读入每个文件夹下的每个图片 Feature(:,i)=Get_Feature(A); %获取训练样本特征 end feature(1+(j-1)*30:j*30,:)=Feature;end% 测试部分% 将每类中剩余的10个样本提取特征% 计算每个待测样本与所有训练样本的欧式距离%disp(1近邻);sum1=0;sum2=0;sum3=0;sumz=0;sum3=0;sum4=0;sum5=0;sum6=0;sum7=0;sum8=0;sum9=0;sum0=0;for j=1:10 TypeA = strcat(Path,num2str(j-1),)

4、 ; %获取待测样本目录读0的文件夹(转成字符串型) PicDirA = dir(TypeA,*.bmp); %dir 函数列出所有0文件夹中为bmp的文件 for i=31:40 A=imread(TypeA,PicDirA(i).name); %获取待测样本文件名 Feature=Get_Feature(A); %获取待测样本特征值 for k=1:300 dis(k)=sqrt(sum(Feature-feature(k,:).2); %求取待测样本与各类所有点距离 end new,Ind=sort(dis); %将距离排序将距离给了new,把之前的序号给了Ind class0=0;cl

5、ass1=0;class2=0;class3=0;class4=0;class5=0;class6=0;class7=0;class8=0;class9=0;%计数清零 if Ind(1,1)30&Ind(1,1)60&Ind(1,1)90&Ind(1,1)120&Ind(1,1)150&Ind(1,1)180&Ind(1,1)210&Ind(1,1)240&Ind(1,1)270&Ind(1,1)=300 class9=class9+1; end class=class0,class1,class2,class3,class4,class5,class6,class7,class8,clas

6、s9;%将计数值合成一个矩阵 switch max(class) %判断最大计数值,并赋给相应的m值 case class0 m=0; case class1 m=1; case class2 m=2; case class3 m=3; case class4 m=4; case class5 m=5; case class6 m=6; case class7 m=7; case class8 m=8; case class9 m=9; end disp(sprintf(第%d张图片上数字是%d,i,m); %显示判断结果 % 计算正确率 if j=1&m=0 %当判断正确时相应值加1 sum

7、0=sum0+1; elseif j=2&m=1; sum1=sum1+1; elseif j=3&m=2 sum2=sum2+1; elseif j=4&m=3 sum3=sum3+1; elseif j=5&m=4 sum4=sum4+1; elseif j=6&m=5 sum5=sum5+1; elseif j=7&m=6 sum6=sum6+1; elseif j=8&m=7 sum7=sum7+1; elseif j=9&m=8 sum8=sum8+1; elseif j=10&m=9 sum9=sum9+1; end sumz=sum1+sum2+sum3+sum4+sum5+su

8、m6+sum7+sum8+sum9+sum0; end disp(-) end disp(sprintf(第%d个文件夹分类正确率为%4.2f%,1,100*sum0/10); %显示正确率 disp(sprintf(第%d个文件夹分类正确率为%4.2f%,2,100*sum1/10); disp(sprintf(第%d个文件夹分类正确率为%4.2f%,3,100*sum2/10); disp(sprintf(第%d个文件夹分类正确率为%4.2f%,4,100*sum3/10); disp(sprintf(第%d个文件夹分类正确率为%4.2f%,5,100*sum4/10); disp(spr

9、intf(第%d个文件夹分类正确率为%4.2f%,6,100*sum5/10); disp(sprintf(第%d个文件夹分类正确率为%4.2f%,7,100*sum6/10); disp(sprintf(第%d个文件夹分类正确率为%4.2f%,8,100*sum7/10); disp(sprintf(第%d个文件夹分类正确率为%4.2f%,9,100*sum8/10); disp(sprintf(第%d个文件夹分类正确率为%4.2f%,10,100*sum9/10); disp(sprintf(总分分类正确率为%4.2f%,100*sumz/100); % 使用3近邻法识别照片中的数字 di

10、sp(3近邻); q=3;sum1=0;sum2=0;sum3=0;sumz=0;sum3=0;sum4=0;sum5=0;sum6=0;sum7=0;sum8=0;sum9=0;sum0=0;for j=1:10 TypeA = strcat(Path,num2str(j-1),) ; %获取待测样本目录读0的文件夹(转成字符串型) PicDirA = dir(TypeA,*.bmp); %dir 函数列出所有0文件夹中为bmp的文件 for i=31:40 A=imread(TypeA,PicDirA(i).name); %获取待测样本文件名 Feature=Get_Feature(A);

11、 %获取待测样本特征值 for k=1:300 dis(k)=sqrt(sum(Feature-feature(k,:).2); %求取待测样本与各类所有点距离 end new,Ind=sort(dis); %将距离排序将距离给了new,把之前的序号给了Ind class0=0;class1=0;class2=0;class3=0;class4=0;class5=0;class6=0;class7=0;class8=0;class9=0; for n=1:q if Ind(1,n)30&Ind(1,n)60&Ind(1,n)90&Ind(1,n)120&Ind(1,n)150&Ind(1,n)

12、180&Ind(1,n)210&Ind(1,n)240&Ind(1,n)270&Ind(1,n)=300 class9=class9+1; end end class=class0,class1,class2,class3,class4,class5,class6,class7,class8,class9; %将计数值合成一个矩阵 switch max(class) case class0 %判断最大计数值,并赋给相应的m值 m=0; case class1 m=1; case class2 m=2; case class3 m=3; case class4 m=4; case class5

13、m=5; case class6 m=6; case class7 m=7; case class8 m=8; case class9 m=9; end disp(sprintf(第%d张图片上数字是%d,i,m); % 计算正确率 if j=1&m=0 %当判断正确时相应值加1 sum0=sum0+1; elseif j=2&m=1; sum1=sum1+1; elseif j=3&m=2 sum2=sum2+1; elseif j=4&m=3 sum3=sum3+1; elseif j=5&m=4 sum4=sum4+1; elseif j=6&m=5 sum5=sum5+1; elsei

14、f j=7&m=6 sum6=sum6+1; elseif j=8&m=7 sum7=sum7+1; elseif j=9&m=8 sum8=sum8+1; elseif j=10&m=9 sum9=sum9+1; end sumz=sum1+sum2+sum3+sum4+sum5+sum6+sum7+sum8+sum9+sum0; end disp(-) end disp(sprintf(第%d个文件夹分类正确率为%4.2f%,1,100*sum0/10); disp(sprintf(第%d个文件夹分类正确率为%4.2f%,2,100*sum1/10); disp(sprintf(第%d个文件夹分类正确率为%4.2f%,3,100*sum2/10); disp(sprintf(第%d个文件夹分类正确率为%4.2f%,4,100*sum3/10); disp(sprintf(第%d个文件夹分类正确率为%4.2f%,5,100*sum4/10); disp(sprintf(第%d个文件夹分类正确率为%4.2f%,6,100*sum5/10); disp(spri

温馨提示

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

评论

0/150

提交评论