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)
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)
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)
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)
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)
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)