#StackBounty: #computer-vision trouble recovering rotation and translation from essential matrix

Bounty: 50

I am having trouble recovering rotation and translation from an essential matrix. I am constructing this matrix using the following equation:
begin{equation}
E = R left[tright]_x
end{equation}

which is the equation listed on Wikipedia. With my calculated Essential matrix I am able to show the following relation holds:
begin{equation}
left( hat x right) E x = 0
end{equation}

for the forty or so points I am randomly generating and projecting into coordinate frames. I decompose $E$ using SVD then compute the 2 possible translations and the two possible rotations. These solutions differ significantly from the components I’m starting with.

I have pasted a simplified version of the problem I am struggling with below. Is there anything wrong with how I am recovering the these components?

import numpy as np


t = np.array([-0.08519122, -0.34015967, -0.93650086])

R = np.array([[ 0.5499506 , 0.28125727, -0.78641508],
    [-0.6855271 , 0.68986729, -0.23267083],
    [ 0.47708168, 0.66706632, 0.57220241]])

def cross(t):
    return np.array([
    [0, -t[2], t[1]],
    [t[2], 0, -t[0]],
    [-t[1], t[0], 0]])


E = R.dot(cross(t))


u, _, vh = np.linalg.svd(E, full_matrices=True)

W = np.array([
[ 0,-1, 0],
[ 1, 0, 0],
[ 0, 0, 1]])

Rs = [u.dot(W.dot(vh.T)), u.dot(W.T.dot(vh.T))]
Ts = [u[:,2], -u[:,2]]


Get this bounty!!!

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.