vidimatch / third_party /d2net /megadepth_utils /undistort_reconstructions.py
Vincentqyw
fix: roma
8b973ee
raw
history blame
2.09 kB
import argparse
import imagesize
import os
import subprocess
parser = argparse.ArgumentParser(description="MegaDepth Undistortion")
parser.add_argument(
"--colmap_path", type=str, required=True, help="path to colmap executable"
)
parser.add_argument("--base_path", type=str, required=True, help="path to MegaDepth")
args = parser.parse_args()
sfm_path = os.path.join(args.base_path, "MegaDepth_v1_SfM")
base_depth_path = os.path.join(args.base_path, "phoenix/S6/zl548/MegaDepth_v1")
output_path = os.path.join(args.base_path, "Undistorted_SfM")
os.mkdir(output_path)
for scene_name in os.listdir(base_depth_path):
current_output_path = os.path.join(output_path, scene_name)
os.mkdir(current_output_path)
image_path = os.path.join(base_depth_path, scene_name, "dense0", "imgs")
if not os.path.exists(image_path):
continue
# Find the maximum image size in scene.
max_image_size = 0
for image_name in os.listdir(image_path):
max_image_size = max(
max_image_size, max(imagesize.get(os.path.join(image_path, image_name)))
)
# Undistort the images and update the reconstruction.
subprocess.call(
[
os.path.join(args.colmap_path, "colmap"),
"image_undistorter",
"--image_path",
os.path.join(sfm_path, scene_name, "images"),
"--input_path",
os.path.join(sfm_path, scene_name, "sparse", "manhattan", "0"),
"--output_path",
current_output_path,
"--max_image_size",
str(max_image_size),
]
)
# Transform the reconstruction to raw text format.
sparse_txt_path = os.path.join(current_output_path, "sparse-txt")
os.mkdir(sparse_txt_path)
subprocess.call(
[
os.path.join(args.colmap_path, "colmap"),
"model_converter",
"--input_path",
os.path.join(current_output_path, "sparse"),
"--output_path",
sparse_txt_path,
"--output_type",
"TXT",
]
)