人脸识别课程设计报告.docx
《人脸识别课程设计报告.docx》由会员分享,可在线阅读,更多相关《人脸识别课程设计报告.docx(8页珍藏版)》请在冰豆网上搜索。
人脸识别课程设计报告
用Matlab实现人脸识别
学院:
信息工程学院
班级:
计科软件普131
成员:
一、问题描述
在一个人脸库中,有15个人,每人有11幅图像。
要求选定每一个人的若干幅图像组成样本库,由样本库得到特征库。
再任取图像库的一张图片,识别它的身份。
对于一幅图像可以看作一个由像素值组成的矩阵,也可以扩展开,看成一个矢量。
如一幅N*N象素的图像可以视为长度为N2的矢量,这样就认为这幅图像是位于N2维空间中的一个点,这种图像的矢量表示就是原始的图像空间,但是这个空间仅是可以表示或者检测图像的许多个空间中的一个。
不管子空间的具体形式如何,这种方法用于图像识别的基本思想都是一样的,首先选择一个合适的于空间,图像将被投影到这个于空间上,然后利用对图像的这种投影间的某种度量来确定图像间的相似度,最常见的就是各种距离度量。
因此,本次采用PCA算法确定一个于空间,最后使用最小距离法进行识别,并用matlab实现。
二、PCA原理和人脸识别方法
1)K-L变换
I<-L变换以原始数据的协方差矩阵的归一化正交特征矢量构成的正交矩阵作为变换矩阵,对原始数据迸行正交变换,在变换域上实现数据压缩。
它具有去相关性、能量集中等特性,属于均方误差测度下,失真最小的一种变换,是最能去除原始数据之间相关性的一种变换。
PCA则是选取协方差矩阵前k个最大的特征值的特征向量构成I<-L变换矩阵。
2)主成分的数目的选取
保留多少个主成分取决于保留部分的累积方差在方差总和中所占百分比(即累计贡献率),它标志着前几个主成分概括信息之多寡。
实践中,粗略规定一个百分比便可决定保留几个主成分;如果多留一个主成分,累积方差增加无几,便不再多留。
3)人脸空间建立
假设一幅人脸图像包含N个像素点,它可以用一个N维向量「
表示。
这样,训练样本库就可以用ri(i=l,…,M)表示。
协方差矩
阵C的正交特征向量就是组成人脸空间的基向量,即特征脸。
将特征值由大到小排列:
其对应的特征向量为址。
这样每
一幅人脸图像都可以投影到由ul,u2,...,ur张成的子空间中。
因此,每一幅人脸图像对应于于空间中的一点。
同样,于空间的任意一点也对应于一幅图像。
4)人脸识别
有了这样一个由“特征脸”张成的降维于空间,任何一幅人脸图像都可以向其按影得到一组坐标系数,这组系数表明了该图像在于空间中的位置,从而可以作为人脸识别的依据。
计算数据库中每张图片在于空间中的坐标,得到一组坐标,作为下一步识别匹配的搜索空间。
计算新输入图片在于空间中的坐标,采用最小距离法,遍历搜索空间,得到与其距离最小的坐标向量,该向量对应的人脸图像即为识别匹配的结果。
三、实验步骤
1)每人选取4幅共60幅作为训练样本,将每一幅图像(128*128)写成列向量形式排列成矩阵
2)求协方差矩阵
3)求协方差矩阵特征值一求特征向量(特征脸)一将特征向量排列成变换矩阵
4)计算每幅图像的投影
5)计算待识别人脸的投影
6)遍历搜索进行匹配
四、实验结果与分析
matlnb界面效果如下所示
人月佥识别
-
1
08
-
06
-
04
-
02
jAccuracy
1
08
06
04
02
0111■•0
0
02
0.40.6
0.8
10
0.2
0.40.6
080$丿
Choosephoto
racagnizG
训练机器
图1用户使用界面
Hface
Qchoosephoto
憨▼甘致扳
>
tes:
1)
train
订载
■桌面
9最近询、米住1
冈岸
蜀PPTVW
昼囹片
—
图2选择图片
图3图片选择后
图4识别后
由于利用了标准库,并且识别的人数不是很多,也没有选择有大块左阴影和右阴影的人作为训练集以及测试,所以最终的结果还是非常不错的,识别率可达10()%o但是选择有较大阴影的人做测试,则会出现识别错误,所以PCA算法还是存在一定的局限性。
图5识别错误
主要代码展示
functionpushbuttonl_CaUback(hObjcct,eventdata,handles)
%hObjccthandletopushbuttonl(seeGCBO)
%cvcntdataresented-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%readimagetoberecognize
%读取图片
globalim;
[filename,pathname]=uigctfilc({,*.bmp1}/choosephoto1);
str=[pathname,filename];
im=imrcad(str);
axes(handles.axcsl);
imshow(im);
%—Executesonbuttonpressinpushbutton2.
functionpushbutton2_Callback(h()bjcct,cvcntdata,handles)
%hObjecthandletopushbutton2(seeGCBO)
%cvcntdataresented-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)globalim
globalreference
globalimgmean%均值向量
globalcol_()C^ataglobalpathname
globalimg^path_list
%预处理新数据
im=doublc(im(:
));
objectone=W'*(im-imgmean);%计算每幅图像的投影
distance=1()()()()()()()();
%最小距离法,寻找和待识别图片最为接近的训练图片
fc)rk=l:
col_ofLchta
temp=norm(objectone-reference(:
k));
if(distjuicc>tcmp)
aimonc=k;
distance=temp;
aimpath=strcat(pathnamc,7;img^pathjs^aimone).!
^!
!
!
^;
axes(handles.axes2)
imshow(aimpath)
end
end
%显示测试结果
%aimpath=strea^pathname,7;img_path_list(aimone).namc);
%axcs(handles.axes2)
%imshow(aimpath)
%Executesonbuttonpressinpushbutton3・
functionpushbutton3_Callback(h()bjcct,cvcntdata,handles)
%hObjccthandletopushbutton3(seeGCBO)
%eventdataresented-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
globalreference
globalW
globalimgmeiui
globalcol_oC^ata
globalpathname
globalimg_path_list
%批量读取指定文件夹下的图片128*128
pathname=uigetdir;
img_path」ist=di^strcatfpathnamc/X^.bmp1));
img_num=length(img^path」ist);
imagedata=[];ifimg_num>0
forj=1:
img_num
img^name=img_path_EstQ).name;
temp=imread(strcat(pathnamc,7\img_name));
temp=doublc(tcmp(:
));
imagedata=[imagedata,temp];
end
end
c()l_()匚das=sizc^magcdata^);
%中心化&计算协方差矩阵
imgmciUi=meanfimagedata^);
fori=1:
col_ofL^^ta
imagedata^i)=imagcdata(:
i)-imgmean;
end
covMat=imagedata*imagcdata;
[COEFF,latent,explained]=pcacov(covMat);
%选择构成95%能量的特征值
i=l;proportion=0;
whilc(proportion<95)
proportion=proportion+explained①;
i=i+1;
end
p=i-1;
%特征脸
W=imagcdata*C()EFF;%N*M阶
W=W(:
l:
p);%N*p阶
%训练样本在新座标基下的表达矩阵p*Mreference=VCTl*imagcclata;
如有侵权请联系告知删除,感谢你们的配合!