File size: 1,864 Bytes
24d4ff7 4a48212 24d4ff7 4a48212 24d4ff7 4a48212 24d4ff7 4a48212 24d4ff7 4a48212 24d4ff7 4a48212 24d4ff7 4a48212 24d4ff7 4a48212 24d4ff7 4a48212 24d4ff7 4ccb60a 24d4ff7 4a48212 | 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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | import argparse
import logging
from pathlib import Path
import h5py
import numpy as np
import yaml
from dataset_generation.gridnet_hd_batch_generation import load_las_points
from dataset_generation.gridnet_hd_manifest import load_or_build_manifest
from utils.visibility_criteria import compute_normals_open3d
def compute_normals_for_tile(tile_info, output_dir, overwrite=False):
output_dir = Path(output_dir) / tile_info["split"]
output_dir.mkdir(parents=True, exist_ok=True)
output_path = output_dir / f"{tile_info['tile']}.h5"
if output_path.exists() and not overwrite:
logging.info("Skipping normals for %s", tile_info["tile"])
return output_path
points, _, _, pts_for_normals = load_las_points(tile_info["lidar_path"])
normals = compute_normals_open3d(pts_for_normals)
coords = np.vstack((points["X"], points["Y"], points["Z"])).T.astype(np.float32)
with h5py.File(output_path, "w") as handle:
group = handle.create_group("points")
group.create_dataset("coordinates", data=coords, dtype="float32")
group.create_dataset("normals", data=normals.astype(np.float32), dtype="float32")
logging.info("Wrote normals to %s", output_path)
return output_path
def compute_normal_main():
logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")
parser = argparse.ArgumentParser()
parser.add_argument("--config", type=Path, default="configs/config_gridnet_hd_dataset_generation.yaml")
args = parser.parse_args()
cfg = yaml.safe_load(args.config.read_text())
manifest = load_or_build_manifest(cfg)
overwrite = cfg.get("runtime", {}).get("overwrite_existing", False)
normals_dir = cfg["data"]["normals_dir"]
for tile_info in manifest:
compute_normals_for_tile(tile_info, normals_dir, overwrite=overwrite)
|