2012-01-30 17 views
0

こんにちは私は、線形判別分析(LDA)を使用している顔認識に関わるプロジェクトに取り組んでいます。 LDAは、クラス間散乱行列とクラス内散乱行列との間で一般化された固有ベクトルを求める必要があり、それが私が打たれた場所である。私は、DevC++でopencvをコーディングに使用しています。基本的には問題はAとBの固有ベクトルを一般化しているために行列が発見されなければならないされているOpenCVの2つの行列の一般化された固有値

A*v=lambda*B*v 

のように見える ラムダは固有値で、vは多くの人々がために行くことが示唆この問題について検索する際のベクトル

ですBの逆数を計算し、次にA * v

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

と乗算し、inv(B)* Aの固有ベクトルを計算する。

良い解決策のようですが、私の場合には、散乱行列Bは、ほぼsigularです。その決定要因が10^-36のオーダーであることがわかりました。その逆を見つけることができず、上記の解決策を進めます。ですから、一般化された固有値問題を別々にコード化するということを除いて、この問題から抜け出す方法を提案する人もいます。

答えて

2

私はhttps://github.com/bytefish/opencv/tree/master/ldaで私のGitHubリポジトリにFisherfacesの実装を提供しています。これには、一般的な行列の固有値ソルバの実装が含まれます。https://github.com/bytefish/opencv/blob/master/lda/include/decomposition.hpp(私は偉大な移植をしましたJAMA solver)は、あなたが探しているものです。

コードに問題がある場合は、プロジェクトページのノートをhttp://www.bytefish.de/blog/fisherfaces_in_opencvにお送りください。