ADRAS-J COLMAP Example Reconstruction
Dataset Characteristics
The ADRAS-J dataset consisted of frames extracted from a video captured along a single polar-like arc around the spacecraft. This is a challenging Structure-from-Motion problem because:
- The spacecraft is approximately symmetric.
- Many viewpoints have similar visual appearances.
- The background-removed images contain little external scene structure.
- Nearby video frames may provide a limited triangulation baseline.
- Repeated spacecraft features can produce plausible but incorrect matches.
The final workflow used enhanced SIFT extraction, wide sequential matching, constrained camera intrinsics, and incremental mapping. This produced a cleaner camera trajectory than the earlier global-mapping workflow.
Feature Extraction
/data/smccurry/smurf/data/tools/colmap-cudss feature_extractor \
--database_path /data/smccurry/smurf/data/AdrasJ/processed_incremental_retry/database.db \
--image_path /data/smccurry/smurf/data/AdrasJ/noBG_unprocessed_rgb \
--ImageReader.single_camera 1 \
--ImageReader.camera_model SIMPLE_RADIAL \
--FeatureExtraction.use_gpu 1 \
--FeatureExtraction.gpu_index 0 \
--SiftExtraction.max_num_features 32768 \
--SiftExtraction.estimate_affine_shape 1 \
--SiftExtraction.domain_size_pooling 1
Important Settings
--ImageReader.single_camera 1
Uses one shared camera model for every image. This is appropriate because all frames came from the same video and should share the same intrinsics.
--ImageReader.camera_model SIMPLE_RADIAL
Uses a relatively simple camera model with one focal length and limited radial distortion. This reduces the risk that bundle adjustment will compensate for incorrect camera poses by changing overly flexible distortion parameters.
--SiftExtraction.max_num_features 32768
Keeps substantially more SIFT features per image than the default. The spacecraft is difficult to localize and the background provides little additional structure, so retaining more features increases the chance that useful correspondences survive.
--SiftExtraction.estimate_affine_shape 1
Makes SIFT features more tolerant of affine and viewpoint distortion. This helps with the strong foreshortening changes produced by the polar-like camera arc.
--SiftExtraction.domain_size_pooling 1
Enables DSP-SIFT, improving descriptor robustness when feature scale and support regions change between viewpoints.
The GPU flags enable feature extraction on GPU 0 and primarily affect processing speed.
Sequential Image Matching
/data/smccurry/smurf/data/tools/colmap-cudss sequential_matcher \
--database_path /data/smccurry/smurf/data/AdrasJ/processed_incremental_retry/database.db \
--FeatureMatching.use_gpu 1 \
--FeatureMatching.gpu_index 0 \
--FeatureMatching.guided_matching 1 \
--SequentialMatching.overlap 40 \
--SequentialMatching.quadratic_overlap 1 \
--SequentialMatching.loop_detection 0
Important Settings
--FeatureMatching.guided_matching 1
Performs a second matching pass using the initially estimated geometry as guidance. This can recover valid correspondences that descriptor matching alone misses.
--SequentialMatching.overlap 40
Matches each frame against a wide temporal neighborhood. Immediate neighboring frames may be visually ambiguous or provide weak geometry, so the larger window gives COLMAP more opportunities to find stable connections.
--SequentialMatching.quadratic_overlap 1
Adds image-pair proposals at progressively larger offsets in the sequence. This helps connect frames beyond their immediate neighbors without performing exhaustive all-to-all matching.
--SequentialMatching.loop_detection 0
Disables loop detection because the sequence is one open arc rather than a complete orbit. For a symmetric spacecraft, loop detection could introduce incorrect long-range matches between visually similar but physically different viewpoints.
The GPU flags enable matching on GPU 0.
Incremental Mapping
/data/smccurry/smurf/data/tools/colmap-cudss mapper \
--database_path /data/smccurry/smurf/data/AdrasJ/processed_incremental_retry/database.db \
--image_path /data/smccurry/smurf/data/AdrasJ/noBG_unprocessed_rgb \
--output_path /data/smccurry/smurf/data/AdrasJ/processed_incremental_retry/sparse \
--Mapper.ba_use_gpu 1 \
--Mapper.ba_gpu_index 0 \
--Mapper.multiple_models 0 \
--Mapper.init_min_num_inliers 40 \
--Mapper.abs_pose_min_num_inliers 25 \
--Mapper.abs_pose_min_inlier_ratio 0.15 \
--Mapper.abs_pose_max_error 8 \
--Mapper.filter_max_reproj_error 4 \
--Mapper.filter_min_tri_angle 1.0 \
--Mapper.tri_min_angle 1.0 \
--Mapper.tri_ignore_two_view_tracks 1 \
--Mapper.ba_refine_focal_length 1 \
--Mapper.ba_refine_principal_point 0 \
--Mapper.ba_refine_extra_params 0
Important Settings
--Mapper.multiple_models 0
Forces COLMAP to produce one connected reconstruction rather than splitting the sequence into multiple independent models.
--Mapper.init_min_num_inliers 40
Requires a reasonably strong initial image pair. Because the reconstruction grows from this pair, a reliable initialization helps prevent an incorrect camera trajectory from forming early.
--Mapper.abs_pose_min_num_inliers 25
Requires at least 25 inliers to register a new frame. This is permissive enough for difficult images while still requiring meaningful geometric support.
--Mapper.abs_pose_min_inlier_ratio 0.15
Allows a relatively low inlier ratio. The symmetric spacecraft can produce many ambiguous candidate matches, so a correct registration may still contain a low proportion of inliers.
--Mapper.abs_pose_max_error 8
Uses a looser reprojection-error threshold during initial camera registration, allowing difficult frames to enter the reconstruction.
--Mapper.filter_max_reproj_error 4
Uses stricter filtering after registration and triangulation. Together, these settings allow difficult frames to register and then remove their poorer observations.
--Mapper.tri_min_angle 1.0
--Mapper.filter_min_tri_angle 1.0
Allow points to be created and retained with relatively small triangulation angles. This is useful because parts of the single camera arc contain limited baseline.
--Mapper.tri_ignore_two_view_tracks 1
Ignores feature tracks observed in only two images. These tracks are weakly constrained and may destabilize reconstruction in a symmetric scene.
--Mapper.ba_refine_focal_length 1
Allows bundle adjustment to refine the shared focal length. Some adjustment is useful because the exact calibration was not known.
--Mapper.ba_refine_principal_point 0
Keeps the principal point fixed. The principal point is difficult to estimate reliably from this type of narrow, symmetric sequence and may otherwise drift.
--Mapper.ba_refine_extra_params 0
Prevents bundle adjustment from refining additional distortion parameters. This was likely one of the most important stabilizing settings because it prevented lens distortion from absorbing errors in camera pose or scene geometry.
The bundle-adjustment GPU flags enable supported optimization operations on GPU 0.
Camera Path and Heatmaps
Below is the original video taken by Astroscale's ADRAS-J debris inspection spacecraft. Observe the smooth arc of the camera over the debris object:
Below is an older reconstruction of the camera poses created using a very basic, non-customized set of COLMAP parameters. One can observe the disconnected segments of the arc and the hallucination of a separate arc forming as well. Comparing this to the following image, which shows the estimated camera poses from the above procedure, it is clear that taking proper care with COLMAP commands can produce tangible differences in the recovered camera locations, which will improve training.


Why This Workflow Worked Better
The final workflow improved the reconstruction for four main reasons:
- Incremental mapping grew from a strong local reconstruction. Once a reliable initial pair and sparse structure were established, later frames could be registered against an existing 3D model. This was more stable than solving the entire ambiguous camera graph globally.
- The camera model was deliberately constrained. Using one shared
SIMPLE_RADIALcamera, fixing the principal point, and disabling extra distortion refinement prevented bundle adjustment from changing the intrinsics to compensate for incorrect geometry. - The wider sequential overlap bridged weak neighboring frames. An overlap of 40 and quadratic overlap provided stronger local connections when immediate neighbors were visually ambiguous or had poor baseline.
- Guided matching recovered difficult correspondences. This was especially useful for the background-removed imagery, where standard descriptor matching could be sparse or noisy.
Together, these settings were better suited to an ordered, symmetric, single-arc video sequence than the previous global-mapping workflow.