资源简介
人脸识别MATLAB程序,opencv人脸识别
代码片段和文件信息
% facerec.m %
allsamples = []; %所有训练图像
for i=1:40
for j=1:5
a=imread(strcat(‘D:\ORL2\s‘num2str(i)‘\‘num2str(j)‘.pgm‘)); %读图共40组每组五幅
b=a(1:112*92); %b为行矢量1*n n=112*92=10304顺序为先列后行
b=double(b);
allsamples=[allsamples;b];%allsamples为m*n矩阵
end
end
samplemean=mean(allsamples);%求均值
for i=1:200
xmean(i:)=allsamples(i:)-samplemean;%每幅图像均值差
end
% 得到特征值及特征向量 %
sigma=xmean*xmean‘;
[v d]=eig(sigma);
dl=diag(d);
% 按特征值大小降序排列 %
dsort=flipud(dl);
vsort=fliplr(v);
dsum=sum(dsort);
dsum_extract=0;
p=0;
while(dsum_extract/dsum<0.9)
p=p+1;
dsum_extract=sum(dsort(1:p));
end
i=1;
% 计算所形成的新的座标系 %
base=xmean‘*vsort(:1:p)*diag(dsort(1:p).^(-1/2));
allcoor=allsamples*base;
accu=0;
% 测试过程 %
for i=1:40
for j=6:10
a=imread(strcat(‘d:\ORL2\s‘num2str(i)‘\‘num2str(j)‘.pgm‘));
b=a(1:10304);
b=double(b);
tcoor=b*base;%计算座标
for k=1:200
mdist(k)=norm(tcoor-allcoor(k:));
end;
[distindex2]=sort(mdist);
class1=floor((index2(1)-1)/5)+1;
class2=floor((index2(2)-1)/5)+1;
class3=floor((index2(3)-1)/5)+1;
if class1~=class2 && class2~=class3
class=class1;
elseif class1==class2
class=class1;
elseif class2==class3
class=class2;
end;
if class==i
accu=accu+1;
end;
end;
end;
accuracy=accu/200%输出识别率
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1866 2010-04-02 20:49 面部识别MATLAB程序\facec.m
目录 0 2010-04-08 16:13 面部识别MATLAB程序
----------- --------- ---------- ----- ----
1866 2
- 上一篇:quanxixue.m
- 下一篇:QPSK的matlab实现,调制解调
评论
共有 条评论