EigenfaceCore.m
上传用户:netsea168
上传日期:2015-08-07
资源大小:617k
文件大小:3k
源码类别:

图形图象

开发平台:

Matlab

  1. function [m, A, Eigenfaces] = EigenfaceCore(T)
  2. % Use Principle Component Analysis (PCA) to determine the most 
  3. % discriminating features between images of faces.
  4. %
  5. % Description: This function gets a 2D matrix, containing all training image vectors
  6. % and returns 3 outputs which are extracted from training database.
  7. %
  8. % Argument:      T                      - A 2D matrix, containing all 1D image vectors.
  9. %                                         Suppose all P images in the training database 
  10. %                                         have the same size of MxN. So the length of 1D 
  11. %                                         column vectors is M*N and 'T' will be a MNxP 2D matrix.
  12. % Returns:       m                      - (M*Nx1) Mean of the training database
  13. %                Eigenfaces             - (M*Nx(P-1)) Eigen vectors of the covariance matrix of the training database
  14. %                A                      - (M*NxP) Matrix of centered image vectors
  15. %
  16. % See also: EIG
  17. % Original version by Amir Hossein Omidvarnia, October 2007
  18. %                     Email: aomidvar@ece.ut.ac.ir                  
  19.  
  20. %%%%%%%%%%%%%%%%%%%%%%%% Calculating the mean image 
  21. m = mean(T,2); % Computing the average face image m = (1/P)*sum(Tj's)    (j = 1 : P)
  22. Train_Number = size(T,2);
  23. %%%%%%%%%%%%%%%%%%%%%%%% Calculating the deviation of each image from mean image
  24. A = [];  
  25. for i = 1 : Train_Number
  26.     temp = double(T(:,i)) - m; % Computing the difference image for each image in the training set Ai = Ti - m
  27.     A = [A temp]; % Merging all centered images
  28. end
  29. %%%%%%%%%%%%%%%%%%%%%%%% Snapshot method of Eigenface methos
  30. % We know from linear algebra theory that for a PxQ matrix, the maximum
  31. % number of non-zero eigenvalues that the matrix can have is min(P-1,Q-1).
  32. % Since the number of training images (P) is usually less than the number
  33. % of pixels (M*N), the most non-zero eigenvalues that can be found are equal
  34. % to P-1. So we can calculate eigenvalues of A'*A (a PxP matrix) instead of
  35. % A*A' (a M*NxM*N matrix). It is clear that the dimensions of A*A' is much
  36. % larger that A'*A. So the dimensionality will decrease.
  37. L = A'*A; % L is the surrogate of covariance matrix C=A*A'.
  38. [V D] = eig(L); % Diagonal elements of D are the eigenvalues for both L=A'*A and C=A*A'.
  39. %%%%%%%%%%%%%%%%%%%%%%%% Sorting and eliminating eigenvalues
  40. % All eigenvalues of matrix L are sorted and those who are less than a
  41. % specified threshold, are eliminated. So the number of non-zero
  42. % eigenvectors may be less than (P-1).
  43. L_eig_vec = [];
  44. for i = 1 : size(V,2) 
  45.     if( D(i,i)>1 )
  46.         L_eig_vec = [L_eig_vec V(:,i)];
  47.     end
  48. end
  49. %%%%%%%%%%%%%%%%%%%%%%%% Calculating the eigenvectors of covariance matrix 'C'
  50. % Eigenvectors of covariance matrix C (or so-called "Eigenfaces")
  51. % can be recovered from L's eiegnvectors.
  52. Eigenfaces = A * L_eig_vec; % A: centered image vectors