Я написал код для создания собственных лиц. Я взял 3 изображения разных людей в качестве входных данных. Я рассчитал собственные векторы и собственные значения. Поскольку сделано только 3 изображения, я выбираю все три собственных вектора, каждый размером 36000×1, в качестве основных компонентов. Когда я изменяю собственные векторы, чтобы увидеть изображение, я получаю собственное лицо только для одного человека. Другие изображения почти полностью пустые.
Я извлекаю каждый собственный вектор из Ковевек (матрица собственных векторов ковариационной матрицы)
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:
А остальные два выглядят так:
Что я делаю неправильно?
Ваш код выглядит хорошо, так что не так?
DataDataData, это очень важно при выполнении задач компьютерного зрения, как это. Чтобы получить преимущество, используйте готовый набор данных с соответствующими данными испытаний — Это будет работать
Также, как говорит Берак, нормализация изображений поможет. В турчанка & Pentland (Что, если вы не читали, вы должны), они утверждают:
Шаг 6.3: вычислить M лучших собственных векторов AAT: ui = Avi
(важно: нормализуйте интерфейс так, чтобы || ui || = 1)
Это будет означать, что все ваши тренировочные данные будут в том же ключе, что даст вашему алгоритму гораздо больше шансов на успех.