模式识别方法二实验报告_第1页
模式识别方法二实验报告_第2页
模式识别方法二实验报告_第3页
模式识别方法二实验报告_第4页
模式识别方法二实验报告_第5页
已阅读5页,还剩2页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《模式识别》大作业人脸识别方法二----基于PCA和FLD的人脸识别的几何分类器(修改稿)理论知识fisher概念引出 在应用统计方法解决模式识别问题时,为了解决“维数灾难”的问题,压缩特征空间的维数非常必要。fisher方法实际上涉及到维数压缩的问题。fisher分类器是一种几何分类器,包括线性分类器和非线性分类器。线性分类器有:感知器算法、增量校正算法、LMSE分类算法、Fisher分类。若把多维特征空间的点投影到一条直线上,就能把特征空间压缩成一维。那么关键就是找到这条直线的方向,找得好,分得好,找不好,就混在一起。因此fisher方法目标就是找到这个最好的直线方向以及如何实现向最好方向投影的变换。这个投影变换恰是我们所寻求的解向量,这是fisher算法的基本问题。样品训练集以及待测样品的特征数目为n。为了找到最佳投影方向,需要计算出各类均值、样品类内离散度矩阵和总类间离散度矩阵、样品类间离散度矩阵,根据Fisher准则,找到最佳投影准则,将训练集内所有样品进行投影,投影到一维Y空间,由于Y空间是一维的,则需要求出Y空间的划分边界点,找到边界点后,就可以对待测样品进行进行一维Y空间的投影,判断它的投影点与分界点的关系,将其归类。Fisher法的核心为二字:投影。实现方法一维实现方法计算给类样品均值向量,是各个类的均值,是类的样品个数。计算样品类内离散度矩阵和总类间离散度矩阵(3)计算样品类间离散度矩阵 (4)求向量我们希望投影后,在一维Y空间各类样品尽可能地分开,也就是说我们希望两类样品均值之差()越大越好,同时希望各类样品内部尽量密集,即希望类内离散度越小越好,因此,我们可以定义Fisher准则函数:使得取得最大值的为(5)将训练集内所有样品进行投影(6)计算在投影空间上的分割阈值在一维Y空间,各类样品均值为样品类内离散度矩阵和总类间离散度矩阵【注】【阈值的选取可以由不同的方案:较常见的一种是 另一种是】 (7)对于给定的X,计算出它在上的投影y (8)根据决策规则分类 2、程序中算法的应用 Fisher线性判别方法(FLD)是在Fisher鉴别准则函数取极值的情况下,求得一个最佳判别方向,然后从高位特征向量投影到该最佳鉴别方向,构成一个一维的判别特征空间将Fisher线性判别推广到C-1个判决函数下,即从N维空间向C-1维空间作相应的投影。利用这个m维的投影矩阵M将训练样本n维向量空间转化为m维的MEF空间并且获得在MEF空间上的最佳描述特征,即由这N个MEF空间上的最佳描述特征可以求出的样品类内离散度矩阵和总类间离散度矩阵,取的K个最大的特征可以构成FLD投影矩阵W。将MEF空间上的最佳描述特征在FLD投影矩阵W上进行投影,将MEF空间降维到MDF空间,并获得对应的MDF空间上的最佳分类特征,即通过计算的欧氏距离,可以将训练样本分为C(C等于的秩),完成对训练样本集的分类matlab编程1、fisher判别法人脸检测与识别流程图 2、matlab程序分为三部分。程序框图如下图所示。mainFisherfaceCoreRecognitionCreatDataBasemainFisherfaceCoreRecognitionCreatDataBase这个函数将所有训练样本的二维图像转换成一维列向量。接着,它把这些一维列向量组合到一行里面构造出二维向量这个函数将所有训练样本的二维图像转换成一维列向量。接着,它把这些一维列向量组合到一行里面构造出二维向量T,即每个单元的信息量是一幅图片这个函数将源图像提取成特征脸,然后比较它们之间的欧几里得距离PCA这个函数将源图像提取成特征脸,然后比较它们之间的欧几里得距离PCA提取特征值Fisher分类器设计。从fisher线性空间中提取图像总结 附录(matlab程序代码)1、第一部分:CreatDatabase.mfunctionT=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;endend%%%%%%%%二维转一维%%%%%%%%%%%%T=[];fori=1:Train_Numberstr=int2str(i);%把文件索引转换为字符串格式str=strcat('\',str,'.pgm');str=strcat(TrainDatabasePath,str);img=imread(str);[irowicol]=size(img);temp=reshape(img',irow*icol,1);T=[Ttemp];endT=double(T);2、第二部分:FisherfaceCorefunction[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_numberL_eig_vec=[L_eig_vecV(:,i)/sqrt(dig(i))];end%%%%计算特征矩阵的协方差矩阵C%%%%%V_PCA=A*L_eig_vec;%V_PCA就是降维后的协方差矩阵ProjectedImages_PCA=[];fori=1:Ptemp=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_numberm(:,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))';endSw=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-1V_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_populationProjectedImages_Fisher(:,i)=V_Fisher'*ProjectedImages_PCA(:,i);end%由PCA过渡到FLD%img_fisher=w_fisher'*pca_img;%ProjectedImages_Fisher=V_Fisher'*ProjectedImages_PCA;3、第三部分:Recognition.mfunctionOutputName=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_Numberq=ProjectedImages_Fisher(:,i);temp=(norm(ProjectedTestImage-q))^2;Euc_dist=[Euc_disttemp];endEuc_dist2=[];fori=1:Class_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论