Spaces:
Running
on
Zero
Running
on
Zero
# 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) | |