2015-06-10 4 views
4

Я написал код для создания собственных. В качестве входных данных я взял 3 изображения разных людей. Я вычислил собственные векторы и собственные значения. Поскольку принимаются только 3 изображения, я выбираю все три собственных вектора, каждый из которых имеет размер 36000x1, в качестве основных компонентов. Когда я изменяю собственные векторы, чтобы увидеть изображение, я получаю собственное имя только для одного человека. Остальные изображения почти полностью пусты.Собственные функции в OpenCV с использованием C++

Я извлекая каждый собственный вектор из covevec (матрица собственных векторов ковариационной матрицы)

col1=covevec.col(0); 
col2=covevec.col(1); 
col3=covevec.col(2); 

Я перекроить их следующим образом:

if (!col1.isContinuous() && !col2.isContinuous() && !col3.isContinuous()) 
{ 
    col1=col1.clone(); 
    col2=col2.clone(); 
    col3=col3.clone(); 
} 
Mat final1,final2,final3; 
final1=col1.reshape(0,200); 
final2=col2.reshape(0,200); 
final3=col3.reshape(0,200); 

Это как final2 выглядит следующим образом: Output image final2

И другие два выглядят так: Output image final1

Что я делаю неправильно?

+1

вам нужно гораздо больше данных, а также вы должны нормализовать() ваши изображения перед шагом p12 – berak

+0

Да .... увеличение данных! – KeenLearner

ответ

2

Ваш код выглядит хорошо, так что не так?

DataDataData, это так важно при выполнении таких задач компьютерного видения. Чтобы дать себе преимущество, используйте легкодоступный набор данных с соответствующими данными испытаний. This would work

Также, как говорит Берак, нормализация изображений поможет. В Turk & Pentland (который, если вы еще не читали вы должны) они заявляют:

Шаг 6.3: вычислить M лучшие собственные векторы ААТ: Ui = Avi

(важно: нормализуют щ такая, что || щ || = 1)

Это будет означать, что все ваши данные обучение будет одной и той же вены и дать алгоритм гораздо больше шансов на успех

Смежные вопросы