以下是我在查阅相关文献之后的一些个人的总结,望大神们指正。
基于PCA的人脸识别
PCA简介
这是百度百科的解析:
“对于一个训练集,100个对象模板,特征是10维,那么它可以建立一个100*10的矩阵,作为样本。求这个样本的协方差矩阵,得到一个10*10的协方差矩阵,然后求出这个协方差矩阵的特征值和特征向量,应该有10个特征值和特征向量,我们根据特征值的大小,取前四个特征值所对应的特征向量,构成一个10*4的矩阵,这个矩阵就是我们要求的特征矩阵,100*10的样本矩阵乘以这个10*4的特征矩阵,就得到了一个100*4的新的降维之后的样本矩阵,每个特征的维数下降了。
人脸识别实现的主要步骤
人脸识别主要分为了两个主要的部分,一个是人脸训练,另一个重要的部分是人脸测试。(为了提高识别的准确率,可以首先对图片进行一些预处理,比如是图片的平滑,锐化,小波过滤等等,降低背景,还有图片角度对识别结果的影响)
人脸训练部分:
- 读取训练数据,将图片存到矩阵中。
- 利用PCA对图片矩阵进行降维和特征提取(对于特征提取和降维,还可以使用SVD奇异值分解的方法,但是在本文中主要使用的是PCA方法)
- 训练特征数据规范化
SVM样本训练
对于人脸识别的部分(其实和人脸训练部分类似):
1.读取测试数据。
- 测试数据降维
- 测试特征数据规范化
- 样本分类
附上Matlab GUI代码:
GUI界面包括了三个按钮(faceGui.m)
- 测试准确率,就是人脸训练,将样本集中的前5张作为训练的样本,将样本中后5张作为测试样本,测试人脸识别的准确率。
- 选择图片,选择图片是选择一张图片作为人脸识别使用
- 图像匹配,就是人脸识别
global h_axes1;
global h_axes2;
global edit2;
h_f=figure('name','人脸识别系统','position',[300,200,600,400]);
%clf reset;%clf 清除当前的图像的所有自图像,Reset重新设置图像的目标属性为默认值
set(h_f,'defaultuicontrolfontsize',12);
set(h_f,'defaultuicontrolfontname','宋体');
h_axes1=axes('parent',h_f,'position',[0.2,0.28,0.25,0.56],'Unit','normalized','visible','on');
h_axes2=axes('parent',h_f,'position',[0.55,0.28,0.25,0.56],'Unit','normalized','visible','on');
figcolor=get(h_f,'color');
edit2=uicontrol(h_f,'style','text','position',[150,330,300,40],...
'backgroundcolor',figcolor);%动态变化提示
button_open=uicontrol(h_f,'style','push','string','选择照片'...
,'position',[250 40 100 50],'callback','GUIopen');
button_recg=uicontrol(h_f,'style','push','string','测试准确率',...
'position',[100 40 100 50],'callback','face');
button_match=uicontrol(h_f,'style','push','string','图像匹配',...
'position'<