Question

I need to show 1st 10 eigenfaces using PCA for a image feature vector matrix.

I am using following matlab code to create 1st eigenface but I am getting very dark and not so correct eigenfaces. eFea is a matrix of 240x4096 where each row represents an image of 64x64

 newData = eFea';
data  = newData;
[M,N] = size(data); 

mn = mean(data,2); 
data = double(data) - repmat(mn,1,N); 
% construct the matrix Y 
Y = data' / sqrt(N-1); 
% SVD 
[u,S,PC] = svd(Y,0); 


imshow(reshape(PC(1,:),64,64))

any hints regarding the error in code will be helpful.

Was it helpful?

Solution

IMSHOW does not automatically scale the image. Thus, if you only have values from, say, 0 to 0.3 in the eigenface, everything will be really dark. Try imshow(reshape(PC(1,:),64,64),[]) instead.

OTHER TIPS

This is a really old topic but I want to answer something anyway.

Honestly, I think the error is somewhere else, although what Jonas said might give good-looking results.

You need to add the mean of the data again in the end. I just had the same problem with the dark principal components, that's why I found this question. But then I realized, that when you do PCA, you substract the mean first. That means that in the end, you need to add it again.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top