Правильный способ извлечь перевод из 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)