| """Re-render all existing superpoint results with improved circular splatting.""" |
| import os |
| import sys |
| import numpy as np |
| import open3d as o3d |
|
|
| SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) |
| sys.path.insert(0, SCRIPT_DIR) |
|
|
| from run_pycut_s3dis import render_perspective_cutaway, OUT_DIR |
|
|
| S3DIS_ROOT = "/mnt/data/AODUOLI/_work_biptv3/pointcept_framework/data/s3dis_official" |
| SCANNET_PLY_DIR = os.path.join(SCRIPT_DIR, "paper_assets_grouped_by_dataset", "scannet", "ply") |
|
|
|
|
| def rerender_s3dis(): |
| """Re-render S3DIS rooms using saved superpoint labels.""" |
| rooms = [ |
| ("Area_1", "office_1"), |
| ("Area_1", "conferenceRoom_1"), |
| ] |
| for area, room in rooms: |
| room_dir = os.path.join(S3DIS_ROOT, area, room) |
| coord = np.load(os.path.join(room_dir, "coord.npy")).astype(np.float32) |
|
|
| label_path = os.path.join(OUT_DIR, f"{area}_{room}_superpoint.npy") |
| if not os.path.exists(label_path): |
| print(f" SKIP {area}/{room}: no saved labels") |
| continue |
| labels = np.load(label_path) |
| n_sp = int(labels.max()) + 1 |
| print(f"\n{'='*60}") |
| print(f"Re-rendering {area}/{room} ({coord.shape[0]} pts, {n_sp} sp)") |
| print(f"{'='*60}") |
|
|
| prefix = f"{area}_{room}_pycut" |
| for azim, tag in [(225, "a"), (135, "b"), (315, "c"), (45, "d")]: |
| render_perspective_cutaway( |
| coord, labels, |
| os.path.join(OUT_DIR, f"{prefix}_paper_{tag}.png"), |
| azim_deg=azim, |
| ) |
|
|
|
|
| def rerender_scannet(): |
| """Re-render ScanNet scenes using saved superpoint labels.""" |
| scenes = [ |
| ("scannet_scene0050_00", "scannet_scene0050_00_ours.ply", |
| "scannet_scene0050_00_spfinal.npy"), |
| ("scannet_scene0217_00", "scannet_scene0217_00_ours.ply", |
| "scannet_scene0217_00_spfinal.npy"), |
| ("scannet_scene0568_01", "scannet_scene0568_01_ours.ply", |
| "scannet_scene0568_01_spfinal.npy"), |
| ] |
|
|
| for scene_name, ply_file, sp_file in scenes: |
| ply_path = os.path.join(SCANNET_PLY_DIR, ply_file) |
| sp_path = os.path.join(OUT_DIR, sp_file) |
| if not os.path.exists(sp_path): |
| print(f" SKIP {scene_name}: no saved labels at {sp_path}") |
| continue |
|
|
| pcd = o3d.io.read_point_cloud(ply_path) |
| xyz = np.asarray(pcd.points, dtype=np.float32) |
| labels = np.load(sp_path) |
| n_sp = int(labels.max()) + 1 |
| print(f"\n{'='*60}") |
| print(f"Re-rendering {scene_name} ({xyz.shape[0]} pts, {n_sp} sp)") |
| print(f"{'='*60}") |
|
|
| for azim, tag in [(225, "a"), (135, "b")]: |
| render_perspective_cutaway( |
| xyz, labels, |
| os.path.join(OUT_DIR, f"{scene_name}_v3_{tag}.png"), |
| azim_deg=azim, |
| ) |
|
|
|
|
| if __name__ == "__main__": |
| rerender_s3dis() |
| rerender_scannet() |
| print("\nDone!") |
|
|