Jump to content
Compvision.ru
Sign in to follow this  
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..

спасибо(!)

Share this post


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

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

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

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

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

Share this post


Link to post
Share on other sites

Да, это ок (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++, якоби, якоби

:)

Share this post


Link to post
Share on other sites

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

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

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

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

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

Share this post


Link to post
Share on other sites
Напоследок, если в курсе, подскажи:

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

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites
прикол в том, что в opencv есть все для PCA(

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

Share this post


Link to post
Share on other sites
может есть что-то по алгоритму фишера в opencv? :) я чет не нашел:(

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

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

Share this post


Link to post
Share on other sites
Это матлаб ?

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
Есть более быстрый алгоритм поиска собств. значений

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

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

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

Share this post


Link to post
Share on other sites

да ну...

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

Share this post


Link to post
Share on other sites
да ну...

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

Насколько я понимаю, не нужно ничего усекать. Эта матрица ковариации имеет те-же собственные векторы, что и правильная матрица ковариации (большая). Однако, у маленькой матрицы их 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

Share this post


Link to post
Share on other sites
Guest silverworld

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

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

Спасибо

Share this post


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

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

Спасибо

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×