Spaces:
Running
Running
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' | |
]) |