File size: 1,124 Bytes
9e15541
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# code for saving voxel grid
import numpy as np

# TODO: adapt to semantic voxel grid


def unpack(compressed):
    """given a bit encoded voxel grid, make a normal voxel grid out of it."""
    uncompressed = np.zeros(compressed.shape[0] * 8, dtype=np.uint8)
    uncompressed[::8] = compressed[:] >> 7 & 1
    uncompressed[1::8] = compressed[:] >> 6 & 1
    uncompressed[2::8] = compressed[:] >> 5 & 1
    uncompressed[3::8] = compressed[:] >> 4 & 1
    uncompressed[4::8] = compressed[:] >> 3 & 1
    uncompressed[5::8] = compressed[:] >> 2 & 1
    uncompressed[6::8] = compressed[:] >> 1 & 1
    uncompressed[7::8] = compressed[:] & 1

    return uncompressed


def pack(uncompressed: np.ndarray) -> np.ndarray:
    """convert a boolean array into a bitwise array."""
    uncompressed_r = uncompressed.reshape(-1, 8)
    compressed = uncompressed_r.dot(
        1 << np.arange(uncompressed_r.shape[-1] - 1, -1, -1)
    )
    return compressed


def save_semantic_kitti(voxel_grid, path, format):
    """Save a voxel grid to a bin file."""
    pack(np.flip(voxel_grid, (0, 1, 2)).reshape(-1)).astype(np.uint8).tofile(path)