gpt4 book ai didi

c++ - 使用 OpenCV 计算特征值、特征向量

转载 作者:行者123 更新时间:2023-11-28 08:08:24 27 4
gpt4 key购买 nike

我在计算 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 完全一样。在带有 two input argumentsscipy 案例中你正在解决广义特征值问题,但只有一个参数,它假设另一个矩阵是单位矩阵(这通常是我们所说的对角化的意思)

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

关于c++ - 使用 OpenCV 计算特征值、特征向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9723616/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com