Перейти к содержимому
Compvision.ru
BashOrgRu

Собственные вектора и значения

Recommended Posts

Собственно другой ветки куда бы моя тема подходила не нашел, по этому пишу здесь как более...

Итак, моя задача состоит в реализации алгоритма линейный дискриминантный анализ фишера..

Т.е насколько я понял из теории это почти тот же метод главных компонент + доп. проектирование...

Почитав теорию у меня сложился такой алгоритм:

1) Создать Базу фоток

2) найти ковариционную матрицу

3) найти собственные вектора и значения

4) спроектировать базу фотографий в пространство собс векторов (? так ли это? )

5) найти проекцию такую, которая бы удовлетворяла идеи Фишера

6) загнать новую фотку, спроектировать в полученное пространство и сравнить

А теперь как я это понял и начал делать:

1) У нас имется N фотография (серая, 8 битова) размерами WxH,

2) Формируем матрицу X которая состоит из фотографий. Каждый ряд - вектор размерностью (WxH). Т.е если у меня 10 фоток размерами 100х100 то матрица Х = 10000х10.

3) Необходимо найти ковариционую матрицу.

Я ее ищу таким образом:

3.1) Нахожу среднее по столбцам матрицы Х

3.2) Отнимаю от каждого столбца его среднее

3.3) Полученную матрицу транспонирую, умножаю ее на себя же и умножаю на коефициент. То есть матрица А = это матрица Х - среднее.

C = А' * A * (1/(N-1))

где ' - символ транспонирования

Получаю симетричную матрицу, которая является ковариционной.

Дальше, насколько я понял, надо найти собственные вектора, которые ищутся так:

S = F' * C * F

Где

S - собственные значения

F - собственные вектора

C - ковариционная матрица

(отсюда у меня возникает вопрос: Получается собственные вектора получаются из ВСЕЙ матрицы Х? Т.е из всех наборов фоток???)

Разве не должно быть что у каждого набора фотографий - свои собственные лица?)

Как теперь найти собственные значения и вектора? Все методы что не нахожу все аналитические, которые мне не подходят в силу размерности.

Итерационный метод есть, вроде Мизес наз. но я не могу найти описание

В общем я тут застрял.

Дальше пока не могу представить как спроектировать фотки на полученные вектора

Если кто прочел и знает как помочь - напишите, спасибо, жду.

Возможно в openCV Есть ф-ция поиска собственных векторов и значений, мне нужны первые 5..

спасибо(!)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Собственно другой ветки куда бы моя тема подходила не нашел, по этому пишу здесь как более...

Итак, моя задача состоит в реализации алгоритма линейный дискриминантный анализ фишера..

Т.е насколько я понял из теории это почти тот же метод главных компонент + доп. проектирование...

Почитав теорию у меня сложился такой алгоритм:

1) Создать Базу фоток

2) найти ковариционную матрицу

3) найти собственные вектора и значения

4) спроектировать базу фотографий в пространство собс векторов (? так ли это? )

5) найти проекцию такую, которая бы удовлетворяла идеи Фишера

6) загнать новую фотку, спроектировать в полученное пространство и сравнить

А теперь как я это понял и начал делать:

1) У нас имется N фотография (серая, 8 битова) размерами WxH,

2) Формируем матрицу X которая состоит из фотографий. Каждый ряд - вектор размерностью (WxH). Т.е если у меня 10 фоток размерами 100х100 то матрица Х = 10000х10.

3) Необходимо найти ковариционую матрицу.

Я ее ищу таким образом:

3.1) Нахожу среднее по столбцам матрицы Х

3.2) Отнимаю от каждого столбца его среднее

3.3) Полученную матрицу транспонирую, умножаю ее на себя же и умножаю на коефициент. То есть матрица А = это матрица Х - среднее.

C = А' * A * (1/(N-1))

где ' - символ транспонирования

Получаю симетричную матрицу, которая является ковариционной.

Дальше, насколько я понял, надо найти собственные вектора, которые ищутся так:

S = F' * C * F

Где

S - собственные значения

F - собственные вектора

C - ковариционная матрица

(отсюда у меня возникает вопрос: Получается собственные вектора получаются из ВСЕЙ матрицы Х? Т.е из всех наборов фоток???)

Разве не должно быть что у каждого набора фотографий - свои собственные лица?)

Как теперь найти собственные значения и вектора? Все методы что не нахожу все аналитические, которые мне не подходят в силу размерности.

Итерационный метод есть, вроде Мизес наз. но я не могу найти описание

В общем я тут застрял.

Дальше пока не могу представить как спроектировать фотки на полученные вектора

Если кто прочел и знает как помочь - напишите, спасибо, жду.

Возможно в openCV Есть ф-ция поиска собственных векторов и значений, мне нужны первые 5..

спасибо(!)

Попалась на глаза книжечка, может чем нибудь поможет :( (там ограничение по количеству просмотренных страниц)

Reliable face recognition methods Автор: Harry Wechsler

А здесь все по шагам расписано и скачать можно :)

EigenFaces

Ну и еще статейки:

Собственные лица

Собственные лица 2

Faces Presentation

Матлаб туториал по фейсам:

Туториал

Можете покопать код итальянца (C++Builder): 71477208Autofaro.zip

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да, это ок (http://www.cyberguru.ru/programming/programming-theory/matrix-vectors-values-page6.html) внизу написано:

/* Программа eigsrt, получая на входе собственные значения d[1...n] и соответствующие

собственные векторы v[1...n][1...n], сортирует собственные значения в нисходящем

порядке, делая соответствующие преобразования в массиве векторов. Метод сортировки

прямая вставка

*/

Итак, ключевые слова для поисковиков:(

Якоби исходник, якоби собственные значения исходник, собственные вектора, якобы, eigenvectors, eigenvalues, jacobi, source++, якоби, якоби

:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Напоследок, если в курсе, подскажи:

1) я выбираю 5 векторов которым соотвествуют 5 макс собс значений.. (после сортировки)

2) далее мне надо фотку разложить на эти вектора (как)

3) спроектировать ее в этот базис (как?)

я честно говоря не дружил с алгеброй... по этому сори(

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Напоследок, если в курсе, подскажи:

1) я выбираю 5 векторов которым соотвествуют 5 макс собс значений.. (после сортировки)

2) далее мне надо фотку разложить на эти вектора (как)

3) спроектировать ее в этот базис (как?)

я честно говоря не дружил с алгеброй... по этому сори(

Как фотку разложить не знаю, а вот вектор по базису, например можно здесь посмотреть

Разложение по базису

Я думаю, что решение с фотками надо искать здесь (правда там надо вникать)

http://www.cse.unr.edu/~bebis/MathMethods/..._study_pca1.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
прикол в том, что в opencv есть все для PCA(

Ага, вот здесь: PCA Functions

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
может есть что-то по алгоритму фишера в opencv? :) я чет не нашел:(

Вот китайцы понаписали, не сильно радуйтесь, но поковырять можно: Fisher.rar

Самый толковый файл, по моему - FisherfaceCore.m из 5956440FLD-Face-Recognition.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Это матлаб ?

Там несколько проектов часть на с++, а часть на матлаб

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Есть более быстрый алгоритм поиска собств. значений

потому как якоби я запустил на матрице 2500х2500 он что-то завис глухо... хотя если поставить брекпоинт то считает... т.е работает но долго(

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Есть более быстрый алгоритм поиска собств. значений

потому как якоби я запустил на матрице 2500х2500 он что-то завис глухо... хотя если поставить брекпоинт то считает... т.е работает но долго(

А откуда такая матрица?

Там ведь при вычислении матрицы ковариации используется переставленное транспонирование, то есть размер матрицы не должен превышать количества фотографий, насколько я понял. Смотри опция OpenCV: CV_COVAR_SCRAMBLED - Fast PCA “scrambled” covariance.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

да ну...

матрица пикселей жеж.... если размер матрицы не превышает кол-ва фоток то как усечь?)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
да ну...

матрица пикселей жеж.... если размер матрицы не превышает кол-ва фоток то как усечь?)

Насколько я понимаю, не нужно ничего усекать. Эта матрица ковариации имеет те-же собственные векторы, что и правильная матрица ковариации (большая). Однако, у маленькой матрицы их N, а у большой N^2, но те N собственных векторов маленькой матрицы содержат все собственные векторы с максимальными собственными значениями из множества собственных векторов большой матрицы.

Выбираем из этого количества K векторов, с самыми большими собственными значениями u1,u2,...uK.

Нормируем их (приводим длины к единице).

Дальше каждая фотка представляется как линейная комбинация этих самых K собственных векторов w1,w2,..wK.

Fi: i-тое лицо (вектор (N^2)x1) (в pdf см. ниже это обозначено как Г )

mean: "среднее лицо"

Найдем W =(w1,w2,...,wK), где

wi=ui(это строка) * (Fi-mean)(это столбец) (Результат одно число для каждого wi)

где u1,u2,...uK - это векторы базиса

А i-тое лицо будет представлено вектором W=(w1,w2,w2,...wK)

Получили векторы с которыми будем сравнивать поступающие на вход лица.

Далее рассчитываем wi для поступившего лица. См выше. и сравниваем векторы (находим Евклидову дистанцию или можно (лучше) по Маханоблису).

ЗЫ: Если где заглючился, прошу делать скидку на то что писал ночью :(

Подробнее тут, см. стр.5. из http://www.cse.unr.edu/~bebis/MathMethods/..._study_pca1.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость silverworld

Здравствуйте Меня очень заинтересовал , описанный метод Мне кажется это прорыв в алгоритмах сжатия данных

А можно ли посмотреть на работу алгоритма , какоенить консольное тестовое приложени е ??? Или сравнение на стандартных последовательностях ?

Спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Здравствуйте Меня очень заинтересовал , описанный метод Мне кажется это прорыв в алгоритмах сжатия данных

А можно ли посмотреть на работу алгоритма , какоенить консольное тестовое приложени е ??? Или сравнение на стандартных последовательностях ?

Спасибо

Программа, использующая описанный метод здесь: http://www.compvision.ru/forum/index.php?showtopic=74

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×