def decompose(P):
M = P[:3, :3]
T = P[:3, 3]
K, R = scipy.linalg.rq(M)
for i in range(2):
if K[i,i] < 0:
K[:, i] *= -1
R[i, :] *= -1
if K[2,2] > 0:
K[:, 2] *= -1
R[2, :] *= -1
if det(R) < 0:
R *= -1
T = linalg.inv(dot(K, -R)).dot(T.reshape((3, 1)))
K /= -K[2,2]
return K, R, T
评论列表
文章目录