собственные поверхности отображаются некорректно и очень темные

#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. вы правы, этот ответ был решением в моем случае, спасибо!!