I am getting an error in disply the eigenvectors the 4 th last line reshape can anyone help me out???
Show older comments
%%Loading the Images
clear all
input_dir = ‘D:\MATLAB R2012a\work’;
image_dims = [300, 238];
filenames = dir(fullfile(input_dir, ‘*.jpg’));
num_images = numel(filenames);
images = zeros(prod(image_dims),num_images);
for n = 1:num_images
filename = fullfile(input_dir, filenames(n).name);
img = imread(filename);
% img = rgb2gray(img); % I’ve done it manually before using IrfanView
img = im2double(img); % Thanks to this line the best match is shown. Without it it was just a white space.
img = imresize(img,image_dims);
images(:, n) = img(:);
end
%%Training
% steps 1 and 2: find the mean image and the mean-shifted input images
mean_face = mean(images, 2);
shifted_images = images – repmat(mean_face, 1, num_images);
% steps 3 and 4: calculate the ordered eigenvectors and eigenvalues
[evectors, score, evalues] = princomp(images’, ‘econ’);
% step 5: only retain the top ‘num_eigenfaces’ eigenvectors (i.e. the principal components)
num_eigenfaces = 11;
evectors = evectors(:, 1:num_eigenfaces);
% step 6: project the images into the subspace to generate the feature vectors
features = evectors’*shifted_images;
% calculate the similarity of the input to each training image
input_image = imread(‘PC044879_cr.jpg’);
% input_image = rgb2gray(input_image);
input_image = imresize(input_image,image_dims);
input_image = im2double(input_image);
feature_vec = evectors’ * (input_image(:) – mean_face);
similarity_score = arrayfun(@(n) 1 / (1 + norm(features(:,n) – feature_vec)), 1:num_images);
% find the image with the highest similarity
[match_score, match_ix] = min(similarity_score);
% % display the result
% figure, imshow([input_image reshape(images(:,match_ix), image_dims)]);
% colormap(gray);
% title(sprintf(‘matches %s, score %f’, filenames(match_ix).name, match_score));
% display the result
figure, imshow([input_image reshape(images(:,match_ix), image_dims)]);
% colormap(gray);
title(sprintf(‘matches %s, score %f’, filenames(match_ix).name, match_score));
% display the eigenvectors
figure;
for n = 1:num_eigenfaces
subplot(2, ceil(num_eigenfaces/2), n);
evector = reshape(evectors(:,n), image_dims);
imshow(evector);
colormap(gray); % Thanks to this line I’ve got all the eigenfaces instead of getting black rectangles
end
Accepted Answer
More Answers (0)
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!