Exemple #1
0
 def untransform(self, points):
     points = ensure_homogeneous(points, d=3)
     if len(self.shuffle_indices) > 0:
         inv_shuffle_indices = list(range(len(self.shuffle_indices)))
         for i, j in enumerate(self.shuffle_indices):
             inv_shuffle_indices[j] = i
         points = points[..., inv_shuffle_indices, :]
     return points @ cast_array(np.linalg.inv(self.matrix).T, points)
Exemple #2
0
 def test_normalise_points(self, points, camera, z_ref, skeleton):
     denorm_pose = ensure_homogeneous(points.copy(), d=3)
     denorm_pose[:, :2] -= denorm_pose[skeleton.root_joint_id, :2]
     norm_pose = normalise_points(denorm_pose, z_ref, camera, 2048, 2048)
     assert_allclose(norm_pose[skeleton.root_joint_id],
                     np.asarray([0.0, 0.0, 0.0, 1.0]))
     actual = norm_pose[1]
     expected = torch.as_tensor([0.0215, -0.1514, -0.0127, 1.0000])
     assert_allclose(actual, expected, rtol=0, atol=1e-4)
Exemple #3
0
    def test_infer_z_depth(self, points, camera, z_ref, skeleton):
        denorm_pose = ensure_homogeneous(points.copy(), d=3)
        denorm_pose[:, :2] -= denorm_pose[skeleton.root_joint_id, :2]
        norm_pose = normalise_points(denorm_pose, z_ref, camera, 2048, 2048)

        right_wrist = skeleton.joint_index('right_wrist')
        right_elbow = skeleton.joint_index('right_elbow')
        target_forearm_length = np.linalg.norm(denorm_pose[right_wrist] -
                                               denorm_pose[right_elbow])

        def eval_scale(skel):
            forearm_length = np.linalg.norm(skel[right_wrist] -
                                            skel[right_elbow])
            return forearm_length / target_forearm_length

        inferred = infer_z_depth(norm_pose, eval_scale, camera, 2048, 2048)
        assert inferred == pytest.approx(z_ref, rel=0, abs=1e-2)
Exemple #4
0
 def project_cartesian(self, coords):
     coords = ensure_homogeneous(coords, d=3)
     return to_cartesian(self.project(coords))
Exemple #5
0
 def test_denormalise_points(self, points, camera, z_ref, skeleton):
     denorm_pose = ensure_homogeneous(points.copy(), d=3)
     denorm_pose[:, :2] -= denorm_pose[skeleton.root_joint_id, :2]
     norm_pose = normalise_points(denorm_pose, z_ref, camera, 2048, 2048)
     recons_pose = denormalise_points(norm_pose, z_ref, camera, 2048, 2048)
     assert_allclose(recons_pose, denorm_pose, rtol=0, atol=1e-4)
Exemple #6
0
 def transform(self, points):
     points = ensure_homogeneous(points, d=3)
     if len(self.shuffle_indices) > 0:
         points = points[..., self.shuffle_indices, :]
     return points @ cast_array(self.matrix.T, points)