opencv - OpenCV中两个矩阵的广义特征值

您好,我正在从事一个涉及人脸识别的项目,该项目正在使用线性判别分析(LDA)。 LDA要求找到类散点矩阵之间以及类散点矩阵之间的广义特征 vector ,这就是我的印象。我在DevC++中使用opencv进行编码。基本上问题看起来像

A*v=lambda*B*v

其中A和B是应找到广义特征 vector 的矩阵
lambda是特征值,v是 vector

在搜索了这个问题后,许多人建议去计算B的逆,然后乘以A * v
(inv(B)*A)*v=lambda*v 

然后计算inv(B)* A的特征 vector 。

这似乎是一个很好的解决方案,但在我的情况下,散射矩阵B几乎是奇异的。我发现它的行列式在10 ^ -36的量级中,所以我找不到它的逆值并继续上述解决方案。因此,有人可以建议我摆脱该问题的一种方法,除了说单独为广义特征值问题编码。

最佳答案

我在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的项目页面上给我留言。

https://stackoverflow.com/questions/9059849/

相关文章:

android - 使用 OpenCV 在 Android 中将 4 channel 矩阵转换为 1

c# - 在EMGU CV中将图像ROI设置为其他矩形形状吗?

visual-studio-2008 - 应用程序无法启动:VS中的OpenCV x64编译使用x8

c# - DLL 'cvCreateContourTree'中的 'opencv_imgproc23

image - 颜色键在图像处理中的作用是什么?

image-processing - cvCalculateOpticalFlowFarneback

docker - 如何使用非 root 用户权限构建 docker 以使用 pipenv 设置 py

opencv - 用opencv实现消失点算法

opencv - OpenCV || matchShapes findContours断言失败

opencv - mac上opencv2.3.1中 undefined symbol ,cvSmoo