当前位置:   article > 正文

【图像识别】基于LDA实现人脸识别matlab代码_lda模型matlab代码

lda模型matlab代码

1 简介

使用增强识别能力的低维特征表示对人脸识别系统是非常重要的.线性判别分析(LDA)是一种较为普遍的用于特征提取的分类方法.但是将LDA 直接用于人脸识别会遇到维数问题和"小样本"问题.人们经过研究通过多种途径解决了这两个问题并实现了基于LDA 的人脸识别.本文对几种基于LDA 的人脸识别方法做了理论上的比较和实验数据的支持,这些方法包括Eigenfaces,Fisherfaces,DLDA,VDLDA 及VDFLDA.通过比较分析得出VDFLDA 是其中最好的一种方法.

2 部分代码

clear all
clc
close all
start=clock;
sample_class=1:40;%样本类别
sample_classnum=size(sample_class,2);%样本类别数
fprintf('程序运行开始....................\n\n');

for train_samplesize=3:8;
   train=1:train_samplesize;%每类训练样本
   test=train_samplesize+1:10;%每类测试样本
   
   train_num=size(train,2);%每类训练样本数
   test_num=size(test,2);%每类测试样本数
   
   address=[pwd '\ORL\s'];
   %读取训练样本
   allsamples=readsample(address,sample_class,train);
   
   %先使用PCA进行降维
  [newsample base]=pca(allsamples,0.9);
   %计算Sw,Sb ;sw 类内
  [sw sb]=computswb(newsample,sample_classnum,train_num);
   
   %读取测试样本
   testsample=readsample(address,sample_class,test);
   best_acc=0;%最优识别率
   %寻找最佳投影维数
   for temp_dimension=1:1:length(sw)
       vsort1=projectto(sw,sb,temp_dimension);
       
       %训练样本和测试样本分别投影
       tstsample=testsample*base*vsort1;
       trainsample=newsample*vsort1;
       %计算识别率
       accuracy=computaccu(tstsample,test_num,trainsample,train_num);
       if accuracy>best_acc
           best_dimension=temp_dimension;%保存最佳投影维数
           best_acc=accuracy;
       end
   end
   %---------------------------------输出显示----------------------------------
   fprintf('每类训练样本数为:%d\n',train_samplesize);
   fprintf('最佳投影维数为:%d\n',best_dimension);
   fprintf('FisherFace的识别率为:%.2f%%\n',best_acc*100);
   fprintf('程序运行时间为:%3.2fs\n\n',etime(clock,start));
end
fprintf('程序运行结束....................\n\n');

3 仿真结果

4 参考文献

[1]张燕昆, and 刘重庆. "一种新颖的基于LDA的人脸识别方法(英文)." 红外与毫米波学报 22.5(2003):327-330.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/358860
推荐阅读
相关标签
  

闽ICP备14008679号