Собственные лица не отображаются правильно и очень темные - PullRequest
0 голосов
/ 29 октября 2011

Мне нужно показать первые 10 собственных граней, используя PCA для матрицы векторов объектов изображения.

Я использую следующий код Matlab для создания 1-го собственного лица, но у меня получаются очень темные и не очень правильные собственные лица.eFea - это матрица размером 240x4096, где каждая строка представляет изображение размером 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))

. Любые подсказки относительно ошибки в коде будут полезны.

Ответы [ 2 ]

5 голосов
/ 29 октября 2011

IMSHOW не автоматически масштабирует изображение.Таким образом, если у вас есть только значения от, скажем, от 0 до 0,3 на собственном лице, все будет очень темно.Попробуйте imshow(reshape(PC(1,:),64,64),[]) вместо.

2 голосов
/ 29 марта 2014

Это действительно старая тема, но я все равно хочу что-то ответить.

Честно говоря, я думаю, что ошибка в другом месте, хотя то, что сказал Джонас, могло бы дать хорошие результаты.

Вам нужно снова добавить среднее значение данных в конце. У меня просто была такая же проблема с темными основными компонентами, поэтому я нашел этот вопрос. Но потом я понял, что когда вы делаете PCA, вы сначала вычитаете среднее. Это означает, что в конце вам нужно добавить его снова.

...