Quickstart¶
Please see Installation first.
Mast3r reconstruction¶
Reconstruct:
import starster
device = "cuda"
# List of paths to images
files = (
"/path/to/img1.jpg",
...
)
# Load images with specified resolution (default 224)
imgs = starster.load_images(files, size=224)
# Load model from file
model = starster.Mast3rModel.from_pretrained("/path/to/model.pth").to(device)
# Reconstruct scene
scene = starster.Scene()
scene.add_images(model, images)
Use results:
# Dense point clouds from each camera (in global XYZ space)
for i in range(len(scene.dense_pts)):
pts, colors = scene.dense_pts[i], scene.dense_cols[i]
# Point cloud: pts shape is (N, 3); XYZ of each point.
print(f"Points from camera {i}: {pts.shape}")
# Point colors: shape is (N, 3); RGB of each point.
print(f"Colors from camera {i}: {colors.shape}")
# Dense points from all cameras concatenated together
pts, colors = scene.dense_pts_flat, scene.dense_cols_flat
print("Total points from all cameras:", pts.shape)
3D Gaussian Splatting refinement¶
# Extend from Mast3r scene. See above
scene = ...
# Initialize gaussians
scene.init_3dgs()
width, height = 224, 224
# Render views from original camera poses
# img (color image render) has shape (N, H, W, 3).
img, alpha, info = scene.render_3dgs_original(width, height)
# Render from new camera poses
img, alpha, info = scene.render_3dgs(world_to_cam, intrinsics, width, height)
# Run 3DGS optimization for 1000 iters
scene.run_3dgs_optim(1000, enable_pruning=True, verbose=True)
# Run without pruning and densification
scene.run_3dgs_optim(5000, enable_pruning=False, verbose=True)
# Render again with refined splats
img, alpha, info = scene.render_3dgs_original(width, height)