人脸识别系统开放实验分析研究范文.docx
《人脸识别系统开放实验分析研究范文.docx》由会员分享,可在线阅读,更多相关《人脸识别系统开放实验分析研究范文.docx(14页珍藏版)》请在冰点文库上搜索。
![人脸识别系统开放实验分析研究范文.docx](https://file1.bingdoc.com/fileroot1/2023-5/18/ce32a441-83c7-4ee9-a9de-b3f5e1fe7518/ce32a441-83c7-4ee9-a9de-b3f5e1fe75181.gif)
人脸识别系统开放实验分析研究范文
开放性实验报告
《人脸识别系统》
小组成员:
姓名李宏利
学号109021075
指导老师:
彭艳斌
2011年12月
【实验名称】人脸识别系统
【实验目的】1.对人脸识别系统的图像预处理有一定的掌握;
2.对后续操作只简单了解;
3.通过功能模块实现人脸识别系统。
【实验内容】1.系统需求分析;
2.系统设计;
3.系统实现。
【实验步骤】
一、系统需求分析
1、目的与背景
当前社会上频繁出现的入室偷盗、抢劫、伤人等案件的不断发生,鉴于此种原因,防盗门开始走进千家万户,给家庭带来安宁;然而,随着社会的发展,技术的进步,生活节奏的加速,消费水平的提高,人们对于家居的期望也越来越高,对便捷的要求也越来越迫切,基于传统的纯粹机械设计的防盗门,除了坚固耐用外,很难快速满足这些新兴的需求:
便捷,开门记录等功能。
广义的人脸识别实际包括构建人脸识别系统的一系列相关技术,包括人脸图像采集、人脸定位、人脸识别预处理、身份确认以及身份查找等;而狭义的人脸识别特指通过人脸进行身份确认或者身份查找的技术或系统。
人脸识别
生物特征识别技术所研究的生物特征包括脸、指纹、手掌纹、虹膜、视网膜、声音(语音)、体形、个人习惯(例如敲击键盘的力度和频率、签字)等,相应的识别技术就有人脸识别、指纹识别、掌纹识别、虹膜识别、视网膜识别、语音识别(用语音识别可以进行身份识别,也可以进行语音内容的识别,只有前者属于生物特征识别技术)、体形识别、键盘敲击识别、签字识别等。
人脸识别主要用于身份识别。
由于视频监控正在快速普及,众多的视频监控应用迫切需要一种远距离、用户非配合状态下的快速身份识别技术,以求远距离快速确认人员身份,实现智能预警。
人脸识别技术无疑是最佳的选择,采用快速人脸检测技术可以从监控视频图象中实时查找人脸,并与人脸数据库进行实时比对,从而实现快速身份识别
二.系统设计
1)理论知识
fisher概念引出
在应用统计方法解决模式识别问题时,为了解决“维数灾难”的问题,压缩特征空间的维数非常必要。
fisher方法实际上涉及到维数压缩的问题。
fisher分类器是一种几何分类器,包括线性分类器和非线性分类器。
线性分类器有:
感知器算法、增量校正算法、LMSE分类算法、Fisher分类。
若把多维特征空间的点投影到一条直线上,就能把特征空间压缩成一维。
那么关键就是找到这条直线的方向,找得好,分得好,找不好,就混在一起。
因此fisher方法目标就是找到这个最好的直线方向以及如何实现向最好方向投影的变换。
这个投影变换恰是我们所寻求的解向量
,这是fisher算法的基本问题。
样品训练集以及待测样品的特征数目为n。
为了找到最佳投影方向,需要计算出各类均值、样品类内离散度矩阵
和总类间离散度矩阵
、样品类间离散度矩阵
,根据Fisher准则,找到最佳投影准则,将训练集内所有样品进行投影,投影到一维Y空间,由于Y空间是一维的,则需要求出Y空间的划分边界点,找到边界点后,就可以对待测样品进行进行一维Y空间的投影,判断它的投影点与分界点的关系,将其归类。
Fisher法的核心为二字:
投影。
1)一维实现方法
(1)计算给类样品均值向量
,
是各个类的均值,
是
类的样品个数。
(2)计算样品类内离散度矩阵
和总类间离散度矩阵
(3)计算样品类间离散度矩阵
(4)求向量
我们希望投影后,在一维Y空间各类样品尽可能地分开,也就是说我们希望两类样品均值之差(
)越大越好,同时希望各类样品内部尽量密集,即希望类内离散度越小越好,因此,我们可以定义Fisher准则函数:
使得
取得最大值的
为
(5)将训练集内所有样品进行投影
(6)计算在投影空间上的分割阈值
在一维Y空间,各类样品均值
为
样品类内离散度矩阵
和总类间离散度矩阵
【注】【阈值
的选取可以由不同的方案:
较常见的一种是
另一种是
】
(7)对于给定的X,计算出它在
上的投影y
(8)根据决策规则分类
2)matlab编程
1、matlab程序分为三部分。
程序框图如下图所示。
三、系统实现
打开程序
进行人脸识别
变化角度
四、代码实现
A.第一部分:
CreatDatabase.m
functionT=CreatDatabase(TrainDatabasePath)
TrainFiles=dir(TrainDatabasePath);
Train_Number=0;
%%%%%%%%统计文件数%%%%%%%%%%%%%
fori=1:
size(TrainFiles,1)
ifnot(strcmp(TrainFiles(i).name,'.')|strcmp(TrainFiles(i).name,'..')|strcmp(TrainFiles(i).name,'Thumbs.db'))
Train_Number=Train_Number+1;
end
end
%%%%%%%%二维转一维%%%%%%%%%%%%
T=[];
fori=1:
Train_Number
str=int2str(i);%把文件索引转换为字符串格式
str=strcat('\',str,'.pgm');
str=strcat(TrainDatabasePath,str);
img=imread(str);
[irowicol]=size(img);
temp=reshape(img',irow*icol,1);
T=[Ttemp];
end
T=double(T);
B.第二部分:
FisherfaceCore
function[m_databaseV_PCAV_FisherProjectedImages_FisherClass_numberClass_population]=FisherfaceCore(T)
%%%%%%%%返回值注释%%%%%%%%%%%
%m_database---(M*Nx1)维的训练样本均值
%V_PCA---(M*Nx(P-C)训练样本协方差的特征向量
%V_Fisher---((P-C)x(C-1))最大的(C-1)维J=inv(Sw)*Sb的特征矩阵
%ProjectedImages_Fisher---((C-1)xP)维训练样本,这些样本从fisher线性空间中提取
%%%%%基本量赋值%%%%%%%%%
Class_number=(size(T,2))/9;类的数目,除以8取决于样本中有多少类人
Class_population=9;%每一类的图像数目
P=Class_population*Class_number;%总训练样本的数目
%%%%%计算均值%%%%%
m_database=mean(T,2);%°包含T每一行均值的列向量
%%%%计算方差%%%%%
A=T-repmat(m_database,1,P);
%%%%%计算特征脸的算法%%%%%%
L=A'*A;
[VD]=eig(L);
V=fliplr(V);
%%%%筛选小的特征值%%%%%
L_eig_vec=[];
dig=fliplr(max(D));
fori=1:
Class_number
L_eig_vec=[L_eig_vecV(:
i)/sqrt(dig(i))];
end
%%%%计算特征矩阵的协方差矩阵C%%%%%
V_PCA=A*L_eig_vec;%V_PCA就是降维后的协方差矩阵
ProjectedImages_PCA=[];
fori=1:
P
temp=V_PCA'*A(:
i);
ProjectedImages_PCA=[ProjectedImages_PCAtemp];
end
%%%%%fisher分类器的设计方法%%%%
%%%%%计算在特征空间里面每一个类的均值%%%%%
m_PCA=mean(ProjectedImages_PCA,2)%特征空间总的均值
m=zeros(Class_number,Class_number);
Sw=zeros(Class_number,Class_number);
Sb=zeros(Class_number,Class_number);
fori=1:
Class_number
m(:
i)=mean((ProjectedImages_PCA(:
((i-1)*Class_population+1):
i*Class_population)),2)';%每一类的样本分别求均值
S=zeros(Class_number,Class_number);
forj=((i-1)*Class_population+1):
(i*Class_population)
S=S+(ProjectedImages_PCA(:
j)-m(:
i))*(ProjectedImages_PCA(:
j)-m(:
i))';
end
Sw=Sw+S;
Sb=Sb+(m(:
i)-m_PCA)*(m(:
i)-m_PCA)'
end
%%%%%%¼计算fisher判别准则,目标是获取最大类间离散度和最小类内离散度%%%%%%
%%%%%%ÎÒÃǵÄÄ¿±êÊÇ£º»ñÈ¡×î´óÀà¼äÀëÉ¢¶ÈºÍ×îСµÄÀàÄÚÀëÉ¢¶È¡£
[J_eig_vec,J_eig_val]=eig(Sb,Sw);
J_eig_val=max(J_eig_val);
J_eig_vec=fliplr(J_eig_vec);
%%%%%%去除0特征根和排序
fori=1:
Class_number-1
V_Fisher(:
i)=J_eig_vec(:
i);%fisher判别法将N维映射到C-1维
end
%%%%%从fisher线性空间中提取图像%
Yi=V_Fisher'*V_PCA'*(Ti-m_database)
fori=1:
Class_number*Class_population
ProjectedImages_Fisher(:
i)=V_Fisher'*ProjectedImages_PCA(:
i);end%由PCA过渡到FLD
%img_fisher=w_fisher'*pca_img;
%ProjectedImages_Fisher=V_Fisher'*ProjectedImages_PCA;
C.第三部分:
Recognition.m
functionOutputName=Recognition(TestImage,m_database,V_PCA,V_Fisher,ProjectedImages_Fisher,Class_number,Class_population)
%函数描述:
这个函数将源图像提取成特征脸,然后比较它们之间的欧几里得距离
%输入量:
TestImage---测试样本的路径
%%V_PCA---(M*Nx(P-C)训练样本协方差的特征向量
%V_Fisher---((P-C)x(C-1))最大的(C-1)维J=inv(Sw)*Sb的特征矩阵
%ProjectedImages_Fisher---((C-1)xP)维训练样本,这些样本从fisher线性空间中提取
%Class_number---类的数目
%Class_population---每一类图像的数目
%返回值:
OutputName---在训练样本中的被识别的图像的名字
Train_Number=size(ProjectedImages_Fisher,2);
%%%%%%%%%%%%%%%%%%%%%%%%从测试样本中提取PCA特征%%%%%%%%%%%%%%%%%%%
InputImage=imread(TestImage);
temp=InputImage(:
:
1);
[irowicol]=size(temp);
InImage=reshape(temp',irow*icol,1);
Difference=double(InImage)-m_database;
ProjectedTestImage=V_Fisher'*V_PCA'*Difference;
%%%%%%%%%%%%%%%%%%%%%%%%计算欧几里得几何距离%%%%%%%%%%%%%%%%
Euc_dist=[];
fori=1:
Train_Number
q=ProjectedImages_Fisher(:
i);
temp=(norm(ProjectedTestImage-q))^2;
Euc_dist=[Euc_disttemp];
end
Euc_dist2=[];
fori=1:
Class_number
dist=mean(Euc_dist(((i-1)*Class_population+1):
(i*Class_population)));
Euc_dist2=[Euc_dist2dist];
end
[Euc_dist_min,Recognized_index]=min(Euc_dist2);
Recognized_index=(Recognized_index-1)*Class_population+1;
OutputName=strcat(int2str(Recognized_index),'.pgm');