pca.m
上传用户:lzb_9569
上传日期:2013-05-03
资源大小:5k
文件大小:3k
源码类别:

生物技术

开发平台:

Matlab

  1. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2. % PCA Face Recognition Script %
  3. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  4. % by Teofilo Emidio de Campos
  5. % mailto:teo@ime.usp.br
  6. % http://www.ime.usp.br/~teo
  7. % ICQ# 6011445
  8. % Creative Vision Research Group
  9. % http://www.ime.usp.br/~cesar/creativision
  10. % Computer Science Department
  11. % Institute of Mathematics and Statistics
  12. % Sao Paulo University - Brazil
  13. % DCC - IME - USP
  14. %
  15. % Wed May 17  2000
  16. % First it is necessary to normalize the size of
  17. % all the image database.
  18. % In the nest instructions, you have to
  19. % set some input variables:
  20. imageformat = '???';  % ??? = file format of the images on the database 
  21.                       %       (e. g. tif);
  22. imageheight = ???;    % ??? = desirable height (in pixels) for all 
  23.                       %       the images in the database;
  24. imagewide = ???;      % ??? = desirable wide (in pixels) for all the
  25.                       %       images in the database;
  26.                       % Remark: Due to the computational cost, 
  27.                       %       it is recommended to use images smaller than 
  28.                       %       48*48 pixels.
  29. people = ???;         % ??? = how many people has the database;
  30.                       %                      
  31. test = ???;           % ??? = number of testing images per person.
  32.                       %
  33. neig = ???;           % ??? = number of eigenfaces for recognition.
  34.                       %       if neig==-1, it will be used all the eigenfaces.
  35. pcadir = pwd;
  36. path(path, pcadir); % Set the current folder in the path.
  37. cd ??? % ??? = image database folder's name. It is supposed that
  38. % the current folder is the one where the pca functions and
  39. % scripts are in.
  40. ['Normalizing the size of the images... ']
  41. resize(imageheight, imagewide, imageformat);
  42. cd ???x??? % ??? = folder where the function resize() stored the normalized images.
  43. ['Loading the population...']
  44. X = loadpop(imageformat);
  45. save  population X  % Stores the population matrix X in the file population.mat
  46. ['Creating the training matrix...'];
  47. imgpperson = size(X,2)/people;  % Calculate the number of images per person.
  48. rnd=999999;
  49. elem=rnd*ones(test,1); % I is supposed that the database has less than 999999 images per person.
  50. for c=1:test
  51.    while find(rnd == elem),
  52.       rnd = floor(1+(10*rand)*(imgpperson-1)/9);  % Ramdomly choose testing elements.
  53.    end
  54.    elem(c)=rnd;
  55. end
  56. save testelem elem; % Stores the sorted test elents in the file testelem.mat
  57. % Creanting a new matrix Xbase that has only the trainning images:
  58. sizetrain = [size(X,1) size(X,2)-people*length(elem)];
  59. Xbasis=zeros(sizetrain);
  60. sizetest = [size(X,1) people*length(elem)];
  61. Xtest =zeros(sizetest);
  62. d=1;
  63. e=1;
  64. for c=1:size(X,2),
  65.    if isempty(find(mod(c,imgpperson)==mod(elem,imgpperson))),
  66.       Xbasis(:,d) = X(:,c);
  67.       d=d+1;
  68.    else
  69.       Xtest(:,e) = X(:,c);
  70.       e=e+1;
  71.    end   
  72. end
  73. ['Creating the face spaces basis...']
  74. A=makebasis(Xbasis);
  75. save basis A  % Stores the basis A in the file basis.mat
  76. ['Creating the faces representation in face space...']
  77. if neig==-1,
  78.    Ytrain= A'*Xbasis;
  79.    Ytest = A'*Xtest;
  80. else
  81.    Ytrain= A(:,1:neig)'*Xbasis;
  82.    Ytest = A(:,1:neig)'*Xtest;
  83. end
  84. ['Recognizing faces...']
  85. classification=classif(Ytrain, Ytest);
  86. ['Recognition rate:']
  87. success(classification, test, imgpperson-test)