2012-01-30 3 views
0

안녕하세요 저는 LDA (Linear Discriminant Analysis)를 사용하고있는 얼굴 인식과 관련된 프로젝트를 진행하고 있습니다. LDA는 클래스 분산 매트릭스와 클래스 분산 매트릭스 사이의 일반화 된 고유 벡터를 찾아야하며, 그것은 내가 맞은 곳입니다. 나는 코딩을 위해 DevC++와 opencv를 사용하고있다. 기본적으로 문제가 A와 B가 고유 벡터를 일반화하는 행렬을 찾을 수 있어야하는OpenCV의 두 행렬에 대한 일반화 된 고유 값

A*v=lambda*B*v 

처럼 보이는 람다는 고유 값이며, V는 많은 사람들이 갈 제안이 문제에 대해 검색하면 벡터

입니다 B의 역수를 계산 한 다음 A * v와 곱하는 것.

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

그런 다음 inv (B) * A에 대한 고유 벡터를 계산합니다.

좋은 해결책 인 것처럼 보이지만 제 경우에는 산란 행렬 B가 거의 사색입니다. 나는 그 결정자가 10^-36의 순서로 있다는 것을 알았습니다. 그래서 나는 그 역행렬을 발견하지 못하고 위의 해법을 계속 진행합니다. 그래서 어떤 사람들은 일반화 된 고유 값 문제를 별도로 코딩하는 것 외에는이 문제를 해결할 수있는 방법을 제안 할 수 있습니까?

답변

2

내 github 저장소에 Fisherfaces 구현을 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)에 메모를 보내주십시오.