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