| 289 | |
| 290 | |
| 291 | def voxel_down_sample(pcd: torch.Tensor, pcd_t: torch.Tensor = None, voxel_size=0.005): |
| 292 | import open3d as o3d |
| 293 | o3d_pcd = o3d.geometry.PointCloud() |
| 294 | o3d_pcd.points = o3d.utility.Vector3dVector(pcd.view(-1, 3).detach().cpu().numpy()) |
| 295 | o3d_pcd = o3d_pcd.voxel_down_sample(voxel_size) |
| 296 | return torch.as_tensor(np.array(o3d_pcd.points)).to(pcd.device, pcd.dtype, non_blocking=True).view(pcd.shape[0], -1, 3) |
| 297 | |
| 298 | |
| 299 | def remove_outlier(pcd: torch.Tensor, pcd_t: torch.Tensor = None, K: int = 20, std_ratio=2.0, return_inds=False): # !: BATCH |