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