Вычисление собственных значений, собственных векторов с использованием OpenCV - PullRequest
0 голосов
/ 15 марта 2012

У меня проблемы с вычислением собственных векторов, значений в 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]

Я что-то здесь упускаю?

1 Ответ

1 голос
/ 16 марта 2012

Вы решаете две разные задачи линейной алгебры!Рассмотрим:

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 в scipy.Вещественные симметричные матрицы дают реальные собственные пары, и оно перестанет возвращать комплексное число.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...