繁体   English   中英

使用OpenCV计算特征值和特征向量

[英]Computing Eigen Values, Eigen Vectors using OpenCV

我在计算特征向量(OpenCV中的值)时遇到麻烦。 我在Python(SciPy)中也做过同样的事情,但是在移植代码时遇到了麻烦。

我有2个矩阵Sw,Sb,其值为:

Sw:[0.0112962962962963, 0.00675925925925926;
  0.00675925925925926, 0.007962962962962963]
Sb:[0.0530787037037037, 0.01657407407407407;
  0.01657407407407407, 0.004606481481481482]

对于Sw,Sb的上述值, 使用以下方法计算本征值,SciPy(Python)中的本征向量

from numpy import *
from scipy import linalg as la
evals,evecs = la.eig(Sw,Sb)

产生以下内容:

evals:
[ 0.17299805+0.j -8.47412141+0.j]
evecs:
[[ 1.         -0.31926401]
 [-0.54311321  1.        ]]

我正在尝试将上述代码移植到OpenCV(C ++ API)

对于相同的Sw,Sb 值,使用以下方法在OpenCV中计算特征值和特征向量

cv::eigen(Sb,Sb_Eig_Val,Sb_Eig_Vec);

产生不同的值 ,即:

Sb_Eig_Val
[0.05820394496612978; -0.0005187597809445917]
Sb_Eig_Vec
[0.9553644860284983, 0.2954296850952915;
  -0.2954296850952915, 0.9553644860284983]

我在这里想念什么吗?

您正在解决两个不同的线性代数问题! 考虑:

from scipy import linalg as la
sw=[[0.0112962962962963, 0.00675925925925926],[0.00675925925925926, 0.007962962962962963]]
sb=[[0.0530787037037037, 0.01657407407407407],[0.01657407407407407, 0.004606481481481482]]
print la.eig(sb)

这使:

(array([ 0.05820394+0.j, -0.00051876+0.j]), array([[ 0.95536449, -0.29542969],
   [ 0.29542969,  0.95536449]]))

与openCV完全一样。 在具有两个输入参数scipy情况下,您正在解决广义特征值问题,但是只有一个参数时,它假定另一个矩阵是恒等式(这通常是我们说对角线化时的意思)

由于矩阵是对称的,因此应在eigh中使用eigh。 实对称矩阵给出实特征对,它将停止返回复数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM