人脸识别基于PCA+LDA实现人脸识别matlab 源码

Posted 博主QQ2449341593

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了人脸识别基于PCA+LDA实现人脸识别matlab 源码相关的知识,希望对你有一定的参考价值。

 

2.2 LDA数学表示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、源代码

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 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
function [newsample basevector]=pca(patterns,num)
%主分量分析程序,patterns表示输入模式向量,num为控制变量,当num大于1的时候表示
%要求的特征数为num,当num大于0小于等于1的时候表示求取的特征数的能量为num
%输出:basevector表示求取的最大特征值对应的特征向量,newsample表示在basevector
%映射下获得的样本表示。
[u v]=size(patterns);
totalsamplemean=mean(patterns);
for i=1:u
    gensample(i,:)=patterns(i,:)-totalsamplemean;
end
sigma=gensample*gensample';
[U V]=eig(sigma);
d=diag(V);
[d1 index]=dsort(d);
if num>1
    for i=1:num
        vector(:,i)=U(:,index(i));
        base(:,i)=d(index(i))^(-1/2)* gensample' * vector(:,i);
    end
else
    sumv=sum(d1);
    for i=1:u
        if sum(d1(1:i))/sumv>=num
            l=i;
            break;
        end
    end
    for i=1:l
        vector(:,i)=U(:,index(i));
        base(:,i)=d(index(i))^(-1/2)* gensample' * vector(:,i);
    end
end
function sample=readsample(address,classnum,num)
%这个函数用来读取样本。
%输入:address就是要读取的样本的地址,classnum代表要读入样本的类别,num是每类的样本;
%输出为样本矩阵
allsamples=[];
image=imread([pwd '\\ORL\\s1_1.bmp']);%读入第一幅图像
[rows cols]=size(image);%获得图像的行数和列数
for i=classnum
    for j=num
        a=imread(strcat(address,num2str(i),'_',num2str(j),'.bmp'));
        b=a(1:rows*cols);
        b=double(b);
        allsamples=[allsamples;b];
    end
end

三、运行结果

在这里插入图片描述

四、备注

完整代码或者代写添加QQ1575304183

以上是关于人脸识别基于PCA+LDA实现人脸识别matlab 源码的主要内容,如果未能解决你的问题,请参考以下文章

人脸识别基于PCA+LDA实现人脸识别matlab 源码

MATLAB实战系列(三十四)-MATLAB基于PCA-LDA模糊神经网络的人脸识别

基于MATLAB实现PCA人脸识别

Matlab 实现基于 PCA 人脸识别算法

人脸识别基于 Gabor+SV和PCA+SVM实现人脸识别matlab源码含 GUI

毕业设计/Matlab系列基于PCA和BP神经网络的人脸识别系统(基于AR人脸库)