Я пытаюсь оценить трехмерную матрицу вращения между двумя наборами точек, и я хочу сделать это путем вычисления SVD ковариационной матрицы, скажем C
, следующим образом:
U,S,V = svd(C)
R = V * U^T
C
в моем случае это 3x3
.Для этого я использую модуль JacobiSVD от Eigen, и только недавно обнаружил, что он хранит матрицы в мажорном столбце.Так что это меня запутало.
Так что, при использовании Eigen, я должен делать: V*U.transpose()
или V.transpose()*U
?
Кроме того, вращение является точным вплоть до изменения знака столбцаU соответствует наименьшему сингулярному значению, так что определитель R положителен.Допустим, индекс наименьшего единственного значения равен minIndex
.
Поэтому, когда определитель отрицательный из-за путаницы в столбце, я должен сделать:
U.col(minIndex) *= -1 or U.row(minIndex) *= -1
Спасибо!