⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 featureextract.m

📁 LDA是人脸识别中比较基础的一个算法
💻 M
字号:
%此函数为特征提取函数
%输出变量:A为提取后的特征向量,为(112×92)×40的矩阵,每一列就代表了对应类的Fisher脸
%输入变量:MeanClass表示总体均值列向量
%        MeanEachClass表示每类的均值列向量
%        EachClassNum表示训练样本中每类的数目
%        ClassClientNum表示Client人脸的类别数目
%        TrainX表示训练样本的数据,为(112×92)×80的矩阵,每列代表一个图片的数据

function A=FeatureExtract(MeanClass,MeanEachClass,EachClassNum,ClassClientNum,TrainX)

%--------------------------------------------------------------------------
%计算类间散布矩阵Sb=phib*phib',为简化运算,求取Sb_t=phib'*phib

N=EachClassNum*ClassClientNum;                        %训练样本的总数量
Q=repmat(MeanClass,1,ClassClientNum);
phib=(MeanEachClass-Q)*sqrt(EachClassNum/N);          %计算phib
Sb_t=phib'*phib;
clear('Q','N');

%N=EachClassNum*ClassClientNum;
%Q=repmat(MeanClass,1,N);
%phit=TrainX-Q;
%St=phit*phit'/N;
%clear('Q');

%Sw=zeros(rows*cols,rows*cols);
%for i=1:ClassClientNum
%    S=MeanEachClass(:,i);
%    for j=1:EachClassNum
%        SS=(TrainX(:,(i-1)*EachClassNum+j)-S);
%        Sw=Sw+SS*SS';
%    end
%end
%Sw=Sw/(ClassClientNum*EachClassNum);

%--------------------------------------------------------------------------
%计算Sb_t的特征值和特征向量
[eigvec,eigval]=eig(Sb_t);
eigval=diag(eigval)';
[eigval,I]=sort(eigval);
eigval_Sb_t=fliplr(eigval);
eigvec_Sb_t=fliplr(eigvec(:,I));
% 提取前m_b个特征值和特征向量
m_b=ClassClientNum-1;
eigval_Sb_t=eigval_Sb_t(:,1:m_b);
eigvec_Sb_t=eigvec_Sb_t(:,1:m_b);

%--------------------------------------------------------------------------
%计算Sb的特征向量
eigvec_Sb=phib*eigvec_Sb_t;

%计算子空间U
Db=diag(eigval_Sb_t);
U=eigvec_Sb*(inv(sqrt(Db)));

%--------------------------------------------------------------------------
%将所有的样本投影到子空间U上
p=size(TrainX,2);
Q=repmat(MeanClass,1,p);

ChangeX=U'*(TrainX-Q);

%计算投影后的全局散布矩阵
Sp=1/p*(ChangeX*ChangeX');

%计算投影后的每类的均值
for i=1:ClassClientNum
    MeanEachClassChange(:,i)=mean(ChangeX(:,EachClassNum*(i-1)+1:EachClassNum*i),2);
end

%计算Fisher准则下每类对应的最优向量
V=inv(Sp)*MeanEachClassChange;

%计算每类的Fisher脸
A=U*V;




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -