#matlab #computer-vision #face-recognition #eigenvector
#matlab #компьютерное зрение #распознавание лиц #собственный вектор
Вопрос:
Мне нужно показать 1st 10 собственных поверхностей, используя PCA для векторной матрицы объектов изображения.
Я использую следующий код matlab для создания 1-й собственной поверхности, но я получаю очень темные и не очень правильные собственные поверхности. eFea — это матрица размером 240×4096, где каждая строка представляет изображение размером 64×64
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))
любые подсказки относительно ошибки в коде будут полезны.
Ответ №1:
IMSHOW не масштабирует изображение автоматически. Таким образом, если у вас есть только значения, скажем, от 0 до 0.3 в собственной поверхности, все будет действительно темным. Попробуйте imshow(reshape(PC(1,:),64,64),[])
вместо этого.
Комментарии:
1. значит ли это, что добавление [] изменит масштаб изображения до 0-255??
2. imshow(I, [lo, hi]) задает диапазон отображения I, поэтому lo и любое значение ниже lo отображаются черным, а hi и любое значение выше hi отображаются белым. Использование [] вместо [lo, hi] устанавливает lo = min(I(:)) и hi = max(I(:)) .
Ответ №2:
Это действительно старая тема, но я все равно хочу кое-что ответить.
Честно говоря, я думаю, что ошибка где-то в другом месте, хотя то, что сказал Джонас, может дать красивые результаты.
В конце вам нужно снова добавить среднее значение данных. У меня только что была такая же проблема с темными основными компонентами, вот почему я нашел этот вопрос. Но потом я понял, что когда вы выполняете PCA, вы сначала вычитаете среднее значение. Это означает, что в конце концов вам нужно добавить его снова.
Комментарии:
1. вы правы, этот ответ был решением в моем случае, спасибо!!