Обобщенное собственное значение для двух матриц в OpenCV - PullRequest
0 голосов
/ 30 января 2012

Здравствуйте. Я работаю над проектом, связанным с распознаванием лиц, для которого я использую линейный дискриминантный анализ (LDA).LDA требует найти обобщенные собственные векторы для матрицы рассеяния между классами и в матрице рассеяния классов, и это то, где я поражен.Я использую opencv с DevC ++ для кодирования.В основном проблема выглядит так:

A*v=lambda*B*v

, где A и B - матрицы, для которых должны быть найдены обобщенные собственные векторы, лямбда - собственные значения, а v - векторы

При поиске этой проблемы многие люди предложилипойти для вычисления обратного B и затем умножить на A * v

(inv(B)*A)*v=lambda*v 

, а затем вычислить собственные векторы для inv (B) * A.

Это кажется хорошим решениемно в моем случае матрица рассеяния B почти сигулярна.Я обнаружил, что его определитель находится в порядке 10 ^ -36. Так что я не могу найти его обратное и перейти к вышеуказанному решению.Так может кто-нибудь предложить мне выход из этой проблемы, кроме как сказать код для обобщенной проблемы собственных значений отдельно.

1 Ответ

2 голосов
/ 04 марта 2012

Я предоставляю реализацию Fisherfaces в моем репозитории github на https://github.com/bytefish/opencv/tree/master/lda. Это включает в себя реализацию решателя собственных значений для общих матриц, см .: https://github.com/bytefish/opencv/blob/master/lda/include/decomposition.hpp (я перенес великий JAMA solver ), который является именно тем, что вы ищете.

Если у вас есть проблемы с кодом, пожалуйста, напишите мне на странице проектов на http://www.bytefish.de/blog/fisherfaces_in_opencv.

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