def test_voxelgrid_to_pointcloud_with_scaling_and_translation(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)
         pt_cloud += scale / 4
         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))
Пример #2
0
    def test_combine_sparse_voxelgrids(self):
        vg_1 = np.zeros([3, 3, 3])
        vg_2 = np.zeros([3, 3, 3])
        vg_1[(1, 2), (0, 2), (1, 0)] = 1.0
        vg_2[(1, 2), (0, 2), (1, 2)] = 1.0
        origin = [10, 2, -10]
        scaling = 3.40
        sparse_coords_with_1 = [(2, 2, 0), (2, 2, 2)]
        sparse_coords_with_2 = [(1, 0, 1)]

        sparse_vg_1 = pointcloud_to_sparse_voxelgrid(
            voxelgrid_to_pointcloud(vg_1))
        sparse_vg_2 = pointcloud_to_sparse_voxelgrid(
            voxelgrid_to_pointcloud(vg_2))

        sparse_vg = combine_sparse_voxelgrids(sparse_vg_1, sparse_vg_2)

        for coord in sparse_coords_with_1:
            self.assertTrue(coord in sparse_vg)
            self.assertEqual(sparse_vg[coord], 1)

        for coord in sparse_coords_with_2:
            self.assertTrue(coord in sparse_vg)
            self.assertEqual(sparse_vg[coord], 2)
Пример #3
0
def get_bounding_box_for_elem(voxelgrid,
                              th_x,
                              th_y,
                              th_z,
                              scale=0.01,
                              degrees=False):
    # if tf.is_tensor(elem["angle"]):
    #     elem = {k: v.numpy() for k, v in elem.items()}
    # th = np.pi * int(elem["angle"]) / 180

    pts = conversions.voxelgrid_to_pointcloud(voxelgrid, scale=scale)
    pts = np.dot(
        rotxyz(-th_x, -th_y, -th_z, degrees)[0:3, 0:3],
        pts.transpose()).transpose()
    bounds = get_aabb_from_pts(pts)
    bounds = np.dot(
        rotzyx(th_x, th_y, th_z, degrees)[0:3, 0:3],
        bounds.transpose()).transpose()
    # vg_oriented = conversions.transform_voxelgrid(elem["gt_occ"], T(-th), scale=0.01)
    return bounds
Пример #4
0
    def test_pointcloud_to_sparse_voxelgrid_on_simple(self):
        vg_orig = np.zeros([3, 3, 3])
        vg_orig[(1, 2), (0, 2), (1, 0)] = 1.0
        sparse_coords = [(1, 0, 1), (2, 2, 0)]
        origin = [132, -10, -5]
        for scale in [0.02, 1.0, 10., 10000.]:
            pt_cloud = voxelgrid_to_pointcloud(vg_orig,
                                               scale=scale,
                                               origin=origin)
            sparse_vg = pointcloud_to_sparse_voxelgrid(pt_cloud,
                                                       scale=scale,
                                                       shape=[3, 3, 3],
                                                       origin=origin)
            for coord in sparse_coords:
                self.assertTrue(coord in sparse_vg)
                self.assertEqual(sparse_vg[coord], 1)

            pt_cloud_2 = sparse_voxelgrid_to_pointcloud(sparse_vg,
                                                        scale=scale,
                                                        origin=origin)

            self.assertTrue((pt_cloud == pt_cloud_2).all())