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?
Ah, it's PCA. There is PRINCOMP function. Take a look into doc.
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);
    Images{f} = imread(fullfile(dirname,filename));

Open in new window

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:

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.
aboo_sAuthor Commented:
no errors, this code is clean! THNX
Do you know how to create the eigenface subspace (PCA)?
Cloud Class® Course: Microsoft Azure 2017

Azure has a changed a lot since it was originally introduce by adding new services and features. Do you know everything you need to about Azure? This course will teach you about the Azure App Service, monitoring and application insights, DevOps, and Team Services.

aboo_sAuthor Commented:
We'll do, tahnks!
Puneet AroraFounderCommented:
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
% See also: EIG

% 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

%%%%%%%%%%%%%%%%%%%%%%%% 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)];

%%%%%%%%%%%%%%%%%%%%%%%% 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

Open in new window

aboo_sAuthor Commented:
Thank you all for your help!
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.

All Courses

From novice to tech pro — start learning today.