def tensor_pts(self, x0, x1, x2):
'''Calculates tensor from point correspondences.'''
N = len(x0[0])
M = zeros((N*4,27))
for i in range(N):
for j in range(3):
block = zeros((4,9))
block[[0,1,0,1,2,3,2,3,0,2,1,3,0,1,2,3],
[0,1,2,2,3,4,5,5,6,6,7,7,8,8,8,8]] = x0[j,i]
block[:2,6:] *= -x1[0,i]
block[2:,6:] *= -x1[1,i]
block[:2,2] *= -x2[:2,i]
block[2:,5] *= -x2[:2,i]
block[:2,8] *= -x2[:2,i]
block[2:,8] *= -x2[:2,i]
M[i*4:i*4+4, j*9:j*9+9] = block.copy()
V = cv2.SVDecomp(M)[2]
self.T = V[-1,:27].reshape((3,3,3))
return self.T, 1.0
评论列表
文章目录