Beispiel #1
0
 def test_points_noweights(self, batch_size, num_points, device, dtype):
     B, N = batch_size, num_points
     points1 = torch.rand(B, N, 2, device=device, dtype=dtype)
     points2 = torch.rand(B, N, 2, device=device, dtype=dtype)
     weights = torch.ones(B, N, device=device, dtype=dtype)
     H_noweights = find_homography_dlt(points1, points2, None)
     H_withweights = find_homography_dlt(points1, points2, weights)
     assert H_noweights.shape == (B, 3, 3) and H_withweights.shape == (B, 3,
                                                                       3)
     assert_allclose(H_noweights, H_withweights, rtol=1e-3, atol=1e-4)
Beispiel #2
0
 def test_shape(self, batch_size, num_points, device, dtype):
     B, N = batch_size, num_points
     points1 = torch.rand(B, N, 2, device=device, dtype=dtype)
     points2 = torch.rand(B, N, 2, device=device, dtype=dtype)
     weights = torch.ones(B, N, device=device, dtype=dtype)
     H = find_homography_dlt(points1, points2, weights)
     assert H.shape == (B, 3, 3)
Beispiel #3
0
    def test_clean_points_and_gradcheck(self, batch_size, device):
        # generate input data
        H = (torch.eye(3, device=device)[None].repeat(batch_size, 1, 1) +
             0.3 * torch.rand(batch_size, 3, 3, device=device))
        H = H / H[:, 2:3, 2:3]

        points_src = torch.rand(batch_size, 10, 2).to(device)
        points_dst = kornia.transform_points(H, points_src)
        weights = torch.ones(batch_size, 10, device=device)

        # compute transform from source to target
        dst_homo_src = find_homography_dlt(points_src, points_dst, weights)

        assert_allclose(kornia.transform_points(dst_homo_src, points_src),
                        points_dst,
                        rtol=1e-3,
                        atol=1e-4)

        # compute gradient check
        points_src = utils.tensor_to_gradcheck_var(points_src)  # to var
        points_dst = utils.tensor_to_gradcheck_var(points_dst)  # to var
        weights = utils.tensor_to_gradcheck_var(weights)  # to var

        assert gradcheck(find_homography_dlt,
                         (points_src, points_dst, weights),
                         rtol=1e-1,
                         atol=1e-5,
                         raise_exception=True)
Beispiel #4
0
 def test_nocrash(self, device, dtype):
     points1 = torch.rand(1, 4, 2, device=device, dtype=dtype)
     points2 = torch.rand(1, 4, 2, device=device, dtype=dtype)
     weights = torch.ones(1, 4, device=device, dtype=dtype)
     points1[0, 0, 0] = float('nan')
     H = find_homography_dlt(points1, points2, weights)
     assert H.shape == (1, 3, 3)
Beispiel #5
0
    def test_clean_points(self, batch_size, device, dtype):
        # generate input data
        points_src = torch.rand(batch_size, 10, 2, device=device, dtype=dtype)
        H = kornia.eye_like(3, points_src)
        H = H * 0.3 * torch.rand_like(H)
        H = H / H[:, 2:3, 2:3]

        points_dst = kornia.transform_points(H, points_src)
        weights = torch.ones(batch_size, 10, device=device, dtype=dtype)

        # compute transform from source to target
        dst_homo_src = find_homography_dlt(points_src, points_dst, weights)

        assert_allclose(kornia.transform_points(dst_homo_src, points_src),
                        points_dst,
                        rtol=1e-3,
                        atol=1e-4)
Beispiel #6
0
 def test_smoke(self, device, dtype):
     points1 = torch.rand(1, 4, 2, device=device, dtype=dtype)
     points2 = torch.rand(1, 4, 2, device=device, dtype=dtype)
     weights = torch.ones(1, 4, device=device, dtype=dtype)
     H = find_homography_dlt(points1, points2, weights)
     assert H.shape == (1, 3, 3)