Exemplo n.º 1
0
 def test_chamfer_is_better_after_fit(self):
     d = load_test_files()
     dist_orig = metrics.chamfer_distance(d[0], d[1], scale=0.1)
     vg_fit = fit.icp(d[1], d[0], scale=0.1)
     dist_fit = metrics.chamfer_distance(d[0], vg_fit, scale=0.1)
     self.assertLess(dist_fit, dist_orig,
                     "Distance was not lower after fitting with icp")
Exemplo n.º 2
0
 def test_voxelgrid_to_pointcloud_on_large_data(self):
     d = load_test_files()
     for i, vg_orig in enumerate(d):
         pt_cloud = voxelgrid_to_pointcloud(vg_orig)
         vg_new = pointcloud_to_voxelgrid(pt_cloud,
                                          add_leading_dim=True,
                                          add_trailing_dim=True)
         self.assertTrue((vg_orig == vg_new).all(),
                         "Failed on point cloud {}".format(i))
Exemplo n.º 3
0
    def test_highest_match_using_fit_and_iou(self):
        d = load_test_files()
        base = d[0]

        def m(vg1, vg2):
            vg_fit = fit.icp(vg2, vg1, scale=0.1, max_iter=10, downsample=2)
            return metrics.iou(vg1, vg_fit)

        ind, elem = metrics.highest_match(base, d, m)
        self.assertEqual(0, ind)
Exemplo n.º 4
0
    def test_highest_match_using_fit_and_chamfer_distance(self):
        d = load_test_files()
        base = d[2]

        def m(vg1, vg2):
            vg_fit = fit.icp(vg2, vg1, scale=0.1, max_iter=10, downsample=2)
            return -metrics.chamfer_distance(vg1, vg_fit, scale=0.1, downsample=2)

        ind, elem = metrics.highest_match(base, d, m)
        self.assertEqual(2, ind)
Exemplo n.º 5
0
 def test_highest_match(self):
     """
     Note that this test assumes that metric(a,b) is maximized when a==b
     """
     d = load_test_files()
     for i in range(3):
         test_vg = d[i]
         best_ind, best_elem = metrics.highest_match(test_vg, d)
         self.assertEqual(i, best_ind, "Wrong index returned")
         self.assertTrue((best_elem == d[i]).all(), "Returned element is not the best element")
Exemplo n.º 6
0
 def test_voxelgrid_to_pointcloud_with_scaling(self):
     vg_orig = load_test_files()[0]
     for scale in [0.01, 1.0, 10., 10000.]:
         pt_cloud = voxelgrid_to_pointcloud(vg_orig, scale=scale)
         vg_new = pointcloud_to_voxelgrid(pt_cloud,
                                          scale=scale,
                                          add_leading_dim=True,
                                          add_trailing_dim=True,
                                          shape=(64, 64, 64))
         self.assertTrue((vg_orig == vg_new).all(),
                         "Failed on scaling {}".format(scale))
Exemplo n.º 7
0
    def test_get_aabb_returns_correct_shape_and_no_repeats(self):
        vg_orig = load_test_files()[0]
        bounds = bounding_box.get_aabb(vg_orig)
        self.assertEqual((8, 3), bounds.shape)

        pts = []
        for pt in bounds:
            self.assertFalse(tuple(pt) in pts)
            pts.append(tuple(pt))

        for vals in bounds.transpose():
            self.assertEqual(2, len(set(vals)))
 def test_transform_voxelgrid_is_invertable(self):
     """
     Note, this is not necessarily true for rotation or fractional translation, as converting to a voxelgrid
     effectively truncates to an int so there is a loss of precision
     @return:
     """
     T = make_transform(thetas=[0.0, 0, np.pi / 2], translation=[1, 2, 3])
     T_inv = np.linalg.inv(T)
     scale = 0.5
     self.assertTrue((np.dot(T, T_inv) == np.eye(4)).all())
     vg_orig = load_test_files()[0]
     vg_rot = transform_voxelgrid(vg_orig, T, scale=scale)
     self.assertFalse((vg_orig == vg_rot).all())
     vg_new = transform_voxelgrid(vg_rot, T_inv, scale=scale)
     self.assertTrue((vg_orig == vg_new).all())
Exemplo n.º 9
0
 def test_chamfer_distance_voxelgrid_on_real(self):
     d = load_test_files()
     self.assertEqual(0.0, metrics.chamfer_distance(d[0], d[0], scale=0.1))
     self.assertGreater(metrics.chamfer_distance(d[0], d[1], scale=0.1),
                        0.0)
Exemplo n.º 10
0
 def test_iou_on_shapes(self):
     d = load_test_files()
     self.assertEqual(metrics.iou(d[0], d[0]), 1.0)
     self.assertLess(metrics.iou(d[0], d[1]), 1.0)
     self.assertEqual(metrics.iou(d[0], d[1]), metrics.iou(d[1], d[0]))
Exemplo n.º 11
0
 def test_transform_voxelgrid_using_identity(self):
     vg_orig = load_test_files()[0]
     T = np.eye(4)
     vg_new = transform_voxelgrid(vg_orig, T)
     self.assertTrue((vg_new == vg_orig).all())