Learn2Splat / optgs /model /colmap_utils /extract_sparse_view_extrinsics.py
SteEsp's picture
Add Docker-based Learn2Splat demo (viser GUI)
78d2329 verified
import numpy as np
from pathlib import Path
from .read_write_model import (
read_images_binary,
write_images_binary,
write_points3D_binary,
Image as ColmapImage
)
def extract_sparse_images_bin(input_model_dir, output_model_dir, selected_image_ids, keep_features=False):
input_model_dir = Path(input_model_dir)
output_model_dir = Path(output_model_dir)
output_model_dir.mkdir(parents=True, exist_ok=True)
# Load full images.bin
images = read_images_binary(input_model_dir / "images.bin")
# Select and blank the images
sparse_images = {}
for image_id in selected_image_ids:
image = images[image_id]
if keep_features:
xys = image.xys
point3D_ids = image.point3D_ids
else:
xys = np.empty((0, 2))
point3D_ids = np.empty((0,), dtype=int)
blank_image = ColmapImage(
id=image.id,
qvec=image.qvec,
tvec=image.tvec,
camera_id=image.camera_id,
name=image.name,
xys=xys,
point3D_ids=point3D_ids
)
sparse_images[image_id] = blank_image
# Save sparse images.bin
write_images_binary(sparse_images, output_model_dir / "images.bin")
# Save empty points3D.bin
write_points3D_binary({}, output_model_dir / "points3D.bin")
# Example usage
if __name__ == "__main__":
selected_ids = [1, 4, 10, 20] # Replace with your sparse frame IDs
extract_sparse_images_bin(
input_model_dir="dense_model",
output_model_dir="sparse_model",
selected_image_ids=selected_ids
)