clc clear input_dir = 'user/mac/desktop/python/eigenfacematlab/eigenface24/train'; testdir= 'user/mac/desktop/python/eigenfacematlab/eigenface24/test'; image_dims = [200, 180]; classes=[0;1;2;3;4;5;6;7;8;9]; num_images = 170; images = []; imageclasses=[]; disp(num_images); counter = 1; c = cell(170,1); c{1}={''}; file=cell(170,1); file(1)={''}; paths = fullfile(testdir,{'0','1','2','3','4','5','6','7','8','9'}); pathsA = fullfile(testdir,{'0','1','2','3','4','5','6','7','8','9'}); for i = classes(1):classes(10) filenames = dir(fullfile(input_dir,int2str(i),'\*.jpg')); num_images = size(filenames,1); for n = 1:num_images filename = fullfile(input_dir,int2str(i), filenames(n).name); disp(filename) ij=cellstr(filename); k=cellstr(filenames(n).name); file{counter}=(k); disp(filename) img = imread(filename); img = rgb2gray(img); img = im2double(img); c{counter}=(1i); images(:, counter) = img(:); imagesclasses(:,counter)=i; counter=counter+1; end end num_images = 170; counter = 170; mean_face = mean(images, 2); shifted_images = images - repmat(mean_face, 1, num_images); [u, s, v] = pca(images'); num_eigenfaces = 20; u = u(:, 1:num_eigenfaces); features = u' * shifted_images; testlabel=[]; cc=1; testimages=[]; featuresvector=[]; predicition=[]; for i = classes(1):classes(10) filenames1 = dir(fullfile(testdir,int2str(i),'\*.jpg')); for n = 1:3 filename1 = fullfile(testdir,int2str(i),filenames1(n).name); img = imread(filename1); img = rgb2gray(img); img = im2double(img); figure(1) imshow(img) input_image(:, cc) = img(:); testlabel(:,cc)=i; feature_vec = u' * (img(:) - mean_face); similarity = arrayfun(@(n) 1 / (1 + norm(features(:,n) - feature_vec)), 1:num_images); [match, matchidx] = max(similarity); A = reshape(images(:,matchidx), image_dims); Predicition(:,cc)=imagesclasses(matchidx); if 3 figure imshow([img reshape(images(:,matchidx), image_dims)]); title(sprintf('matches %f, score %0.2f', 1-match)); end cc=cc+1; end end confusionMatrix=confusionmat(testlabel,predicition); a = reshape(mean_face, image_dims); figure imshow(a) figure; for n = 1:num_eigenvalues subplot(2, ceil(num_eigenvalues/4), n); ejector = reshape(u(:,n), image_dims); images(ejector); colormap(gray); end |