# Load images from a folder to an array for the purpose of detecting faces in a video

I need to load the yalefaces database into my matlab, the photos go like this
subject01.glasses then subject02 - subject15
after that
subject01.happy - subject15.happy and so on ..
I need to load them into matlab then calculate the eigenspace for them, so I can detect face location
in a video.
The thing is that I'm not so familure with Matlab, so I need help.
A guide or something or just some commands that will help me out, any help would be appreciated, thank you.
LVL 10
###### Who is Participating?

Commented:
Ah, it's PCA. There is PRINCOMP function. Take a look into doc.
0

Commented:
The question is very broad. You should not create a question for the whole problem, but rather make several small question for each step.

Let's limit this question to reading several files from a folder. Since you know how to form file names, you can do it easily in a loop:

``````dirname = 'c:\images';
suffix = 'glasses';
n = 15;
Images = cell(n,1);
for f = 1:n
filename = sprintf('subject%02d.%s',f,suffix);
end
``````

This code will create cell array Images with single image in each cell. You access each image as Images{number}. For example, to show an image run:
imshow(Images{1})

MATLAB has very clear and rich documentation. If you don't understand the code look at doc for all functions in this code you are not familiar with. You can type in MATLAB help functionname or doc functionname.

I didn't test this code in MATLAB, so if you get an error let me know.
0

Author Commented:
no errors, this code is clean! THNX
Do you know how to create the eigenface subspace (PCA)?
0

Author Commented:
We'll do, tahnks!
0

FounderCommented:
refer to the code of   Amir Hossein Omidvarnia, October 2007

``````function [m, A, Eigenfaces] = EigenfaceCore(T)
% Use Principle Component Analysis (PCA) to determine the most
% discriminating features between images of faces.
%
% Description: This function gets a 2D matrix, containing all training image vectors
% and returns 3 outputs which are extracted from training database.
%
% Argument:      T                      - A 2D matrix, containing all 1D image vectors.
%                                         Suppose all P images in the training database
%                                         have the same size of MxN. So the length of 1D
%                                         column vectors is M*N and 'T' will be a MNxP 2D matrix.
%
% Returns:       m                      - (M*Nx1) Mean of the training database
%                Eigenfaces             - (M*Nx(P-1)) Eigen vectors of the covariance matrix of the training database
%                A                      - (M*NxP) Matrix of centered image vectors
%

% Original version by Amir Hossein Omidvarnia, October 2007
%                     Email: aomidvar@ece.ut.ac.ir

%%%%%%%%%%%%%%%%%%%%%%%% Calculating the mean image
m = mean(T,2); % Computing the average face image m = (1/P)*sum(Tj's)    (j = 1 : P)
Train_Number = size(T,2);

%%%%%%%%%%%%%%%%%%%%%%%% Calculating the deviation of each image from mean image
A = [];
for i = 1 : Train_Number
temp = double(T(:,i)) - m; % Computing the difference image for each image in the training set Ai = Ti - m
A = [A temp]; % Merging all centered images
end

%%%%%%%%%%%%%%%%%%%%%%%% Snapshot method of Eigenface methos
% We know from linear algebra theory that for a PxQ matrix, the maximum
% number of non-zero eigenvalues that the matrix can have is min(P-1,Q-1).
% Since the number of training images (P) is usually less than the number
% of pixels (M*N), the most non-zero eigenvalues that can be found are equal
% to P-1. So we can calculate eigenvalues of A'*A (a PxP matrix) instead of
% A*A' (a M*NxM*N matrix). It is clear that the dimensions of A*A' is much
% larger that A'*A. So the dimensionality will decrease.

L = A'*A; % L is the surrogate of covariance matrix C=A*A'.
[V D] = eig(L); % Diagonal elements of D are the eigenvalues for both L=A'*A and C=A*A'.

%%%%%%%%%%%%%%%%%%%%%%%% Sorting and eliminating eigenvalues
% All eigenvalues of matrix L are sorted and those who are less than a
% specified threshold, are eliminated. So the number of non-zero
% eigenvectors may be less than (P-1).

L_eig_vec = [];
for i = 1 : size(V,2)
if( D(i,i)>1 )
L_eig_vec = [L_eig_vec V(:,i)];
end
end

%%%%%%%%%%%%%%%%%%%%%%%% Calculating the eigenvectors of covariance matrix 'C'
% Eigenvectors of covariance matrix C (or so-called "Eigenfaces")
% can be recovered from L's eiegnvectors.
Eigenfaces = A * L_eig_vec; % A: centered image vectors
``````
0

Author Commented:
Thank you all for your help!
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.