www.gusucode.com > 人脸识别识别正确率仿真源码程序 > 人脸识别识别正确率仿真源码程序/facedetect/GAface.m

    %%遗传算法进行特征筛选
%faces.mat为ORL人脸图像库,共40人,每人10幅图像,其中每人的前5幅作为训练样本,
%后5幅作为测试分类样本,统计正确分类率。分类准则为余弦距离分类。

%真实的图像尺寸为112x92=10304,列向量堆积对应人脸库矩阵的每一列。 

clear all
clc
load  faces.mat;
a=faces;%%样本库
%for i=1:20
%f=reshape(a(:,i),112,92);
%subplot(5,4,i);
%imshow(f);
%imagesc(f);
%end

i=0;
j=0;

trainsamples=[];
testsamples=[];
index1=[1 2 3 4 5];
index2=[6 7 8 9 10];
numbpatten=400;
while(i<numbpatten)
    
   
   index1=[i+1 i+2 i+3 i+4 i+5];
   index2=[i+6 i+7 i+8 i+9 i+10];
   trainsamples=[trainsamples,a(:,index1)] ;
   testsamples=[testsamples,a(:,index2)];
   
   i=i+10;
   
   
end



%% 通过训练样本求出人脸的特征子空间U
%training

num=numbpatten/2;%样品类数
trainsamples=trainsamples';
testsamples=testsamples';
trainsamplesmean=mean(trainsamples);%samplesmean维数为1*10304,为训练样本的均值行向量 
testsamplesmean=mean(testsamples);
trainallsamples=trainsamples-repmat(trainsamplesmean,num,1);%200*10304
testallsamples=testsamples-repmat(testsamplesmean,num,1);
trainallsamples=trainallsamples';%10304*200 为A矩阵
testallsamples=testallsamples';

a=trainallsamples;

Gt=a'*a;

[V D]=eig(Gt);
[PD index2]=sort(-diag(D));
PV=V(:,index2);

dim=num;%%可以根据特征谱信息来选取
%dim=num;
PV=PV(:,1:dim);%200*50 PY为特征脸空间

U=trainallsamples*PV;%为特征脸空间 10304*100




%% 遗传算法进行特征脸筛选
%code
[x,y]=size(U);%x is 基因位的向量长度 y is 染色体的长度

m=15;
n=y;%选定初始种群的大小
facechrom=crtbp(m-1,n);%生成初始种群
facechrom(m,:)=ones(1,n);
ii=0;


while ii<=8  %设定循环终止条件    
    
   %P为一个列向量数组  
facep= facefitness(facechrom,U ,trainallsamples,testallsamples,dim);%初始种群的适应度函数大小

facechrom= faceselecpopu(facechrom,facep) ;%轮盘赌方法取w的行元素,即选新的种群.

%%%交叉 %%%变异


%w=Cross(w);%以1/4的交叉率进行杂交
facep
ii=ii+1;
end

  
%%经过调试,发现遗传算法的解空间没有优于PCA的解,经过增加种群数和改变
%%人脸的特征数,效果不明显。。。。
%goalsolve(a,w)  %求种群的最优值
       
%%2010 ,by  哈工程alin