what is the problem in my following face recognition code?

i dont know this is my code......
load data.mat
%Declare training data
P=[r h b bd];
%Create SOM neural network
%(64 minimum points and 64 maximum points)
net=newsom(minmax(P),[64 2]);
%Train SOM neural network for 1000 epochs
net.trainParam.epochs=100;
net=train(net,P);
%Plot SOM layer weights
x=net.iw{1,1},net.layers{1}.distances;
figure, plot(dist(x),'o');
title('SOM Layer Weights');
xlabel('Layer Weights');
ylabel('Magnitude');
%Plot SOM weight vectors
figure, plotsom(net.iw{1,1},net.layers{1}.distances)
sx=sim(net,P);
[l,m]=size(sx);
for u=1:1:m
sm(u)=find(sx(:,u));
end
%Load input face image
Q=imread('hulk6.jpg');
Q=double(reshape(Q,64,1));%(28 line)
i am getting the error
??? Error using ==> reshape
To RESHAPE the number of elements must not change.
Error in ==> simsom at 28
Q=double(reshape(Q,64,1));
what is the problem

5 Comments

There are two problems:
  1. format your question using "{} Code"
  2. You get an error when you run the code.
Luckily, the error message is pretty clear: Q does not have 64 elements in it!
uday
uday on 18 Jul 2013
Edited: uday on 18 Jul 2013
how can you say that Q doesn't have 64 elements? can you explain me that?
@uday: I edited your code to be more readable (using the "{}Code" functionality that Jos mentioned).
Does this code compares a picture to pictures in database? if yes can you please add the edited file please

Sign in to comment.

 Accepted Answer

Line 28 of your code is attempting to reshape Q into a 64x1 vector. The error is saying that there are not 64 elements in Q, the operation is impossible. You could breakpoint your code at line 27 to see why Q doesn't have the number of elements you expect.

2 Comments

how will i know the number of elements in my input image i.e Q?
Shot in the dark, but I think this should work:
Q = double(reshape(Q,64,[]));
Note that second parameter is empty ([]) rather than 1. Keep in mind this approach only works in the number of elements in Q (from the previous imread() call) is divisible by 64, i.e.,
numel(Q)/64
yields a whole number.
If that is not the case, you will also need to resample the image to a 64xN image using imresize() or similar. In that case, this should work:
Q = double(imresize(Q, [64 NaN]));

Sign in to comment.

More Answers (1)

Q is an entire image. It probably has 10 or 20 megapixels in it. Why do you think it has only 64 pixels in it?

1 Comment

Q=imread('hulk6.jpg') do you mean to say that the above image hulk have 10 to 20 megapixels in it or this images P=[r h b bd]? hulk is the image 0f dimension 512*512 which is taken from a 2 megapixel camera and r,h,b,bd are the images after dct conversion of 8*8 net=newsom(minmax(P),[64 2]); Q=double(reshape(Q,64,1)); so what would be the appropriate number of the Q? r give me the idea how can i know it

Sign in to comment.

Asked:

on 18 Jul 2013

Commented:

on 16 Jan 2014

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!