近邻法对09进行数字识别程序.docx
- 文档编号:23347118
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:12
- 大小:16.35KB
近邻法对09进行数字识别程序.docx
《近邻法对09进行数字识别程序.docx》由会员分享,可在线阅读,更多相关《近邻法对09进行数字识别程序.docx(12页珍藏版)》请在冰豆网上搜索。
近邻法对09进行数字识别程序
子程序
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%特征生成方法1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
functionfeature=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=[f1f2f3f4]';%%feature是一个4行1列的矩阵
主程序
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%使用1近邻和3近邻法对0-9个数字进行判别
%%每个文件夹中的前30个为训练样本,后10个测试样本
%%得到:
sum为正确率
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%清除运算空间
clc;
clear;
%根据目录读取文件
Path='E:
\数字识别\';%目录名
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%训练过程
%训练样本特征提取,得到10类各30个样本的特征值
%将所有的特征值合成一个300*4的矩阵
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
forj=1:
10
TypeA=strcat(Path,num2str(j-1),'\');%获取训练样本目录
PicDirA=dir([TypeA,'*.bmp']);%%dir函数
fori=1:
30
A=imread([TypeA,PicDirA(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;
forj=1:
10
TypeA=strcat(Path,num2str(j-1),'\');%获取待测样本目录读0的文件夹(转成字符串型)
PicDirA=dir([TypeA,'*.bmp']);%%dir函数列出所有0文件夹中为bmp的文件
fori=31:
40
A=imread([TypeA,PicDirA(i).name]);%获取待测样本文件名
Feature=Get_Feature(A);%获取待测样本特征值
fork=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;%计数清零
ifInd(1,1)<=30%当最近的点原序号小于30,则0数字计数值加1
class0=class0+1;
elseifInd(1,1)>30&&Ind(1,1)<=60%当最近的点原序号大于30小于60,则1数字计数值加1
class1=class1+1;
elseifInd(1,1)>60&&Ind(1,1)<=90%当最近的点原序号大于60小于90,则2数字计数值加1
class2=class2+1;
elseifInd(1,1)>90&&Ind(1,1)<=120%依次求得各数字的计数值
class3=class3+1;
elseifInd(1,1)>120&&Ind(1,1)<=150
class4=class4+1;
elseifInd(1,1)>150&&Ind(1,1)<=180
class5=class5+1;
elseifInd(1,1)>180&&Ind(1,1)<=210
class6=class6+1;
elseifInd(1,1)>210&&Ind(1,1)<=240
class7=class7+1;
elseifInd(1,1)>240&&Ind(1,1)<=270
class8=class8+1;
elseifInd(1,1)>270&&Ind(1,1)<=300
class9=class9+1;
end
class=[class0,class1,class2,class3,class4,class5,class6,class7,class8,class9];%将计数值合成一个矩阵
switchmax(class)%判断最大计数值,并赋给相应的m值
caseclass0
m=0;
caseclass1
m=1;
caseclass2
m=2;
caseclass3
m=3;
caseclass4
m=4;
caseclass5
m=5;
caseclass6
m=6;
caseclass7
m=7;
caseclass8
m=8;
caseclass9
m=9;
end
disp(sprintf('第%d张图片上数字是%d',i,m));%显示判断结果
%%计算正确率
ifj==1&m==0%当判断正确时相应值加1
sum0=sum0+1;
elseifj==2&m==1;
sum1=sum1+1;
elseifj==3&m==2
sum2=sum2+1;
elseifj==4&m==3
sum3=sum3+1;
elseifj==5&m==4
sum4=sum4+1;
elseifj==6&m==5
sum5=sum5+1;
elseifj==7&m==6
sum6=sum6+1;
elseifj==8&m==7
sum7=sum7+1;
elseifj==9&m==8
sum8=sum8+1;
elseifj==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(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近邻法识别照片中的数字
disp('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;
forj=1:
10
TypeA=strcat(Path,num2str(j-1),'\');%获取待测样本目录读0的文件夹(转成字符串型)
PicDirA=dir([TypeA,'*.bmp']);%%dir函数列出所有0文件夹中为bmp的文件
fori=31:
40
A=imread([TypeA,PicDirA(i).name]);%获取待测样本文件名
Feature=Get_Feature(A);%获取待测样本特征值
fork=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;
forn=1:
q
ifInd(1,n)<=30%当最近的点原序号小于30,则0数字计数值加1
class0=class0+1;
elseifInd(1,n)>30&&Ind(1,n)<=60
class1=class1+1;%当最近的点原序号大于30小于60,则1数字计数值加1
elseifInd(1,n)>60&&Ind(1,n)<=90
class2=class2+1;%当最近的点原序号大于60小于90,则2数字计数值加1
elseifInd(1,n)>90&&Ind(1,n)<=120
class3=class3+1;%依次求得各数字的计数值
elseifInd(1,n)>120&&Ind(1,n)<=150
class4=class4+1;
elseifInd(1,n)>150&&Ind(1,n)<=180
class5=class5+1;
elseifInd(1,n)>180&&Ind(1,n)<=210
class6=class6+1;
elseifInd(1,n)>210&&Ind(1,n)<=240
class7=class7+1;
elseifInd(1,n)>240&&Ind(1,n)<=270
class8=class8+1;
elseifInd(1,n)>270&&Ind(1,n)<=300
class9=class9+1;
end
end
class=[class0,class1,class2,class3,class4,class5,class6,class7,class8,class9];%将计数值合成一个矩阵
switchmax(class)
caseclass0%判断最大计数值,并赋给相应的m值
m=0;
caseclass1
m=1;
caseclass2
m=2;
caseclass3
m=3;
caseclass4
m=4;
caseclass5
m=5;
caseclass6
m=6;
caseclass7
m=7;
caseclass8
m=8;
caseclass9
m=9;
end
disp(sprintf('第%d张图片上数字是%d',i,m));
%%计算正确率
ifj==1&m==0%当判断正确时相应值加1
sum0=sum0+1;
elseifj==2&m==1;
sum1=sum1+1;
elseifj==3&m==2
sum2=sum2+1;
elseifj==4&m==3
sum3=sum3+1;
elseifj==5&m==4
sum4=sum4+1;
elseifj==6&m==5
sum5=sum5+1;
elseifj==7&m==6
sum6=sum6+1;
elseifj==8&m==7
sum7=sum7+1;
elseifj==9&m==8
sum8=sum8+1;
elseifj==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(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));
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 近邻 09 进行 数字 识别 程序
![提示](https://static.bdocx.com/images/bang_tan.gif)