您好我正在开展涉及面部识别的项目,我正在使用线性判别分析(LDA)。 LDA要求找到类间散射矩阵和类散射矩阵的广义特征向量,这就是我被击中的地方。我正在使用带有DevC ++的opencv进行编码。基本上问题看起来像
A*v=lambda*B*v
其中A和B是应该找到广义特征向量的矩阵 lambda是特征值,v是向量
在搜索这个问题时,很多人建议去计算B的倒数然后乘以A * v
(inv(B)*A)*v=lambda*v
然后计算inv(B)* A的特征向量。
这似乎是一个很好的解决方案,但在我的情况下,散射矩阵B几乎是sigular。我发现它的行列式大约是10 ^ -36。所以我找不到它的逆并继续上面的解。所以有人可以建议我摆脱这个问题的方法,除了分别代表广义特征值问题。
答案 0 :(得分: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的项目页面上留言。