gusucode.com > 人脸识别源代码 采用Matlab编写源码程序 > Ultimate_Face_Recognition/facerec.m
%FACE RECOGNITION SCRIPT %First takes the last selected image %Calls the images from database %Applies PCA to images %Compares the last selected image with database images and says if it is %found at the database or not. clc close all try img2=double(img(:)); if(exist('fdata.dat')==2) load('fdata.dat','-mat'); mtr=zeros(size(data{1,1},1),fnumber); for ii=1:fnumber mtr(:,ii)=double(data{ii,1}); %Calling the images from database mtr2=double(mtr)/255; avr = mean(mtr2')'; %taking the average of the training set for i=1:fnumber mtr2(:,i) = mtr2(:,i) - avr; end end Lmat = mtr2'*mtr2 ; %Obtaining the L matrix [V,D] = eig(Lmat); %eigen values(D) and eigenvectors(V) of the L matrix %obtaining eigenfaces V = mtr2*V*(abs(D))^-0.5 ; %This line is taken from the software karhunenloeve.m %Available at %http://www.mathworks.com/matlabcentral/fileexchange/loadFile.do?objectId=6995&objectType=file %Author:Alex Chirokov f1=V'*(img2-avr) ; % feature vector of the new image fdata=zeros(max_class,max_class); %empty matrice for ii=1:fnumber imdata=double(data{ii,1}); classdata=data{ii,2}; cor=V'*(imdata-avr); % weight vector of the stored faces fdata(:,classdata)=fdata(:,classdata)+cor; end dist=zeros(max_class,1); for ii=1:(max_class) dist(ii)=norm(f1-fdata(:,ii)); end [minf,pminf]=min(dist); k=minf/1000; hll = waitbar(0,'CHECKING THE DATABASE...'); for i=1:2450, waitbar(i/100) end close(hll) if k<=6.1 disp(strcat('The corresponding ID number of the face is --> ',num2str(pminf))); pause ldinfo return end if k>=6.1 disp('The corresponding face does not exist at your database') disp('Note: Save more pictures to the group for the best recognition') disp(strcat('The similar of this face has an ID, number--> ',num2str(pminf))); pause ldinfo return end else clc disp('IMAGE PROCESSING IS NOT AVAILABLE') disp('*********************************') disp('Possible Reasons: ') disp(' ') disp('1- Database is empty') disp('2- The size of the selected image is not suitable for processing') disp('3- The color or format is not matching with database') disp(' ') disp('Press any key to continue') pause clear all bdrfacerec end catch clc disp(' ') disp('NO FACE HAS BEEN SELECTED!!') pause clear all bdrfacerec end