Правильный способ извлечь перевод из Essential Matrix через SVD

Я откалибровал свою камеру и нашел внутренние параметры (K). Также я рассчитал Фундаментальную Матрицу (F).

Теперь E= K_T* F * K . Все идет нормально.

Теперь мы передаем Основную Матрицу (E) в SVD, чтобы использовать значения разложения (U,W,V) для извлечения Вращения и Трансляции:

 essentialMatrix = K.Transpose().Mul(fund).Mul(K);
 CvInvoke.cvSVD(essentialMatrix, wMatrix, uMatrix, vMatrix, Emgu.CV.CvEnum.SVD_TYPE.CV_SVD_DEFAULT);

** Вопрос) На данный момент было предложено два метода, и меня смутило, какой из них действительно дает правильный ответ - специально для перевода:

При первом способе введите описание ссылки, здесь автор предлагает рассчитать R,T следующим образом:

Но во втором методе [ http://isit.u-clermont1.fr/~ab/Classes/DIKU-3DCV2/Handouts/Lecture16.pdf%5D автор предоставляет другую формулу для T, которая +U, -U, как показано ниже:

Я реализую это на C# .Net с использованием библиотек openCv. Кто-нибудь знает, какая формула перевода является правильной?

1 ответ

Первое решение показывает матричное представление перекрестного произведения с вектором t (поэтому первое решение = [t]x), в то время как второе решение показывает только вектор перевода t ( https://en.wikipedia.org/wiki/Essential_matrix),

Определение [t] x:

(из http://gandalf-library.sourceforge.net/tutorial/report/img148.png)

Другие вопросы по тегам