Собственные лица в OpenCV с использованием переполнения стека

Я написал код для создания собственных лиц. Я взял 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:
Выходное изображение final2

А остальные два выглядят так:Выходное изображение final1

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

4

Решение

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

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

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

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

(важно: нормализуйте интерфейс так, чтобы || ui || = 1)

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

2

Другие решения


По вопросам рекламы [email protected]