【精品】手写数字识别代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【关键字】精品
function feature = scFeature(im)
%把三层的RGB图像转化成二层的灰度图
if length(size(im)) == 3
I = im(:,:,1);
else
I = im;
end
[row, col] = size(I);
bwI = im2bw(I); %样本图像二值化
bwI = ~bwI;
count = 1;
%提取样本特征
for i = 1: 5
for j = 1:5
imTemp = bwI(row/5*(i-1) + 1:row/5*i,col/5*(j-1) + 1:col/5*j);%将数字区域平均分为5*5的小区域
numTemp = sum(sum(imTemp)); %每个区域像素总数
feature(count) = 25*numTemp/(row*col); %每个小区域黑像素所占比例
count = count + 1;
end
end
%函数功能建立样本库
clc
clear
for i= 1:10
for j = 1:25
I = imread(strcat('C:\Documents and Settings\Administrator\桌面\
图片\',num2str(i-1),'\s',mynum2str(i),' (',num2str(j),')','.bmp'));
I = I(:,:,1);
%对读入的图像进行二值化
bwI = im2bw(I);
%裁剪读入图像
[r,c] = find(bwI==0);
rmin = min(r);
rmax = max(r);
cmin = min(c);
cmax = max(c);
II = I(rmin:rmax,cmin:cmax);
%把裁剪图像缩小成规格的150*150
III = imresize(II,[150 150]);
%生成样本特征
feature(:,j,i) = scFeature(III);
end
end
%以结构体形式存储样本特征
for i = 1:10
pattern(i).num = 25;
pattern(i).feature = feature(:,:,i);
end
save myTemplet
%函数功能降维
function [y1,y2]=pcapro(sample)
load myTemplet pattern;%加载样品库
mixedsig=[];
sum1=0;
%将所有类别的所有样品合并到mixedsig
for i=1:10;
sum1=sum1+ pattern(i).num;
mixedsig=[mixedsig pattern(i).feature];
end
[Dim,NumofSampl]=size(mixedsig);%Dim为特征值NumofSampl为样品总个数
dsig_cov=cov(mixedsig');%求协方差矩阵
%利用pcacov()函数求的从小到大的排序好的协方差矩阵的特征值latent和相应特征向量pc
[pc,latent,tspuare]=pcacov(dsig_cov);
temp=0;con=0;m=0;
%根据贡献率取舍特征向量
sum2=sum(latent);
for i=1:25
if(con<0.9)
temp=temp+latent(i);
con=temp/sum2;
m=m+1;
else
break;
end
end
pc(:,m+1:25)=[];
%求待测样品主成分
x=sample*pc;
%求样本库品成分
y=mixedsig'*pc;
y1=y';
y2=x';
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%函数名称bayesleasterror()
%参数sample待识别样品特征
%返回值y待识别样品所属类别
%函数功能最小错误率概率的贝叶斯分类器
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function y=bayesleasterror(sample)
clc;
load myTemplet pattern;
%对样品库和待测样品进行主成分分析
[pcapat,pcasamp]=pcapro(sample);
temp=0;
for i=1:10
pattern(i).feature=pcapat(:,temp+1:temp+pattern(i).num);
temp=temp+pattern(i).num;
end
s_cov=[];
s_inv=[];
s_det=[];
for i=1:10
s_cov(i).dat=cov(pattern(i).feature');%求各类别的协方差矩阵
s_inv(i).dat=inv(s_cov(i).dat);%求协方差矩阵的逆矩阵
s_det(i)=det(s_cov(i).dat);%求协方差矩阵的行列式
end
sum1=0;
p=[];
for i=1:10
sum1=sum1+pattern(i).num;%求样品库样品总数
end
for i=1:10
p(i)=pattern(i).num/sum1;%求各类别的先验概率
end
h=[];
mean_sap=[];
for i=1:10
mean_sap(i).dat=mean(pattern(i).feature')';%求每一类样品的特征值
end
%计算最大的判别函数
for i=1:10
h(i)=(pcasamp-mean_sap(i).dat)'*s_inv(i).dat*(pcasamp-mean_sap(i).dat)*(-0.5)+log(p(i))+ log(abs(s_det(i)))*(-0.5);
end
[maxval maxpos]=max(h);
y=maxpos-1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %函数名称fisherclassify()