【精品】手写数字识别代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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()

相关文档
最新文档