def H_from_E(E, RandT=False):
'''Returns a 4x4x4 matrix of possible H translations.
Or returns the two rotations and translation vectors when keyword is True.
'''
S,U,V = cv2.SVDecomp(E)
#TIP: Recover E by dot(U,dot(diag(S.flatten()),V))
W = array([[0,-1,0],[1,0,0],[0,0,1]])
R1 = dot(dot(U,W),V)
R2 = dot(dot(U,W.T),V)
if cv2.determinant(R1) < 0:
R1,R2 = -R1,-R2
t1 = U[:,2]
t2 = -t1
if RandT:
return R1, R2, t1, t2
H = zeros((4,4,4))
H[:2,:3,:3] = R1
H[2:,:3,:3] = R2
H[[0,2],:3,3] = t1
H[[1,3],:3,3] = t2
H[:,3,3] = 1
return H
评论列表
文章目录