中科院模式识别大作业 - 人脸识别(2)

2025-11-19

用一个文件face_recongnition.m实现从读取文件数据到PCA主成份提取和人脸识别的整个过程 tic;

SampleFiles = dir('F1');%返回目录中的文件 %经测试图片文件从3到1193 allsample = [];%样本矩阵 fnum=3; lnum=1193; for i = fnum : lnum

filename = SampleFiles(i).name;%读图片名 filename=strcat('F1','\\',filename); sample = imread(filename); [row,col]=size(sample);

pix_num=row*col;%图片像素点数目 %figure(i);

%subplot(2,2,1);imshow(sample); %subplot(2,2,2);imshow(sample);

temp=reshape(sample,pix_num,1);%返回一个m*1的矩阵temp,将二维图像数据变成一维列向量

allsample=[allsample temp];%将所有图片数据变成一个样本矩阵 end

allsample = uint8(allsample);

VI

%%%%%%%%%主成分分析(PCA)%%%%%%%%%%%%%% %%%%%%%%%计算平均图片数据%%%%%%%%%%% m = mean(allsample,2); %计算样本每一维平均值 img_num = size(allsample,2);%返回列数,也即训练图片数目

%%%%%%计算每个图像与均值的差%%%%%%%%%%%%%% A = zeros(pix_num,img_num);%行为图片像素个数,列为图片数目 m1=ones(1,img_num);%用于构造矩阵运算 A = double(allsample) - m*m1;

%%%%%%%计算协方差矩阵的特征矢量和特征值%%%%%% L = A'*A; %由SVD理论构造矩阵L=A'*A用于计算特征值和特征向量

[V D] = eig(L);%计算矩阵A的特征值D和特征向量矩阵V

d1=diag(D);

% 按特征值大小以降序排列 dsort = flipud(d1); vsort = fliplr(V); %以下选择95%的能量 dsum = sum(dsort);

VII

dsumtemp = 0;

char_num = 0;%特征值主分量个数 while( dsumtemp/dsum < 0.95) char_num = char_num + 1;

dsumtemp = sum(dsort(1:char_num)); end

%%%%%%计算特征脸主分量%%%%%%%%%% U=zeros(pix_num,char_num);%主分量特征向量 vsort=vsort(:,1:char_num); dsort=dsort(1:char_num).^(-1/2); dsort=diag(dsort);

U=A* vsort*dsort;%求协方差矩阵的特征向量主分量

%%%%%%计算训练集中人脸在特征空间中的投影表示%%%%% Train_pro=zeros(char_num,img_num); Train_pro=U'*A;

%%%%%%%%%%对测试集中人脸进行识别%%%%%%%% testFiles = dir('F2');%返回目录中的文件() %经测试图片文件从3到1193 alltest = [];%样本矩阵

VIII

for i = fnum : lnum

tfilename = testFiles(i).name; tfilename=strcat('F2','\\',tfilename); test = imread(tfilename); [row,col]=size(test);

ttemp=reshape(test,row*col,1);%返回一个m*1的矩阵temp,将二维图像数据变成一维列向量

alltest=[alltest ttemp];%将所有图片数据变成一个样本矩阵 end

alltest = uint8(alltest);

%%%%%%%%计算减去均值后的人脸矩阵%%%%%% tA = zeros(pix_num,img_num); tA = double(alltest) - m*m1;

%%%%计算测试集中人脸在特征空间中的投影表示%%%% Test_pro=zeros(char_num,img_num); Test_pro=U'*tA;

%%%%%%测试集中人脸和训练集中人脸相似性进行匹配%%%% pro_match=zeros(char_num,img_num); mtemp=ones(1,img_num);

IX

diatance=zeros(img_num,img_num); sum1=0;%sum1为匹配成功的数目

for i=1:img_num %测试集中的第i个图片数据 pro_match=Test_pro(:,i)*mtemp-Train_pro; distance=pro_match'*pro_match; distance=diag(distance); [mat_min,match(i)]=min(distance); if(i==match(i)) sum1=sum1+1; end end

rec_perc=(sum1/img_num)

%%%%%%随机抽取5个图形做代表显示匹配效果%%%%%% for i=1:5

ri=(round(100*rand(1,1))); figure(i); subplot(121); r=allsample(:,ri);

imshow(reshape(r,142,120));title(SampleFiles(ri).name,'FontWeight','bold','Fontsize',15,'color','red'); subplot(122);

X

k=match(ri);

imshow(reshape(alltest(:,k),142,120));title(testFiles(k).name,'FontWeight','bold','Fontsize',15,'color','red'); end toc

XI


中科院模式识别大作业 - 人脸识别(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:SAS中的SQL语句大全

相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219