2012-01-30 6 views
0

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

A*v=lambda*B*v 

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

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

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

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

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

ответ

2

Я предоставляю реализацию 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.