Use task calibrations for large ODM runs
Large ODM runs can keep poor initial camera parameters for the entire reconstruction.
OpenSfM switches to stochastic bundle adjustment at 4,000 reconstructed shots, and
that solver keeps camera intrinsics fixed.
We saw this in an 11,782-image test project. The camera model started and finished with:
- focal:
0.6667, derived from EXIF
- radial and tangential distortion: all zero
Smaller fast-orthophoto tasks from the same project stay below the threshold and
self-calibrate normally. Independent task runs produced focal values of 0.7340 and
0.7463, with similar distortion coefficients. These values also closely match the
current upstream OpenSfM calibration for this camera.
Proposed change
Add an optional ScaleODM stage for full-project runs with at least 4,000 input images:
- Collect
cameras.json, stats.json, and shots.geojson from every completed
fast-orthophoto task.
- Group camera models by their exact ODM camera key.
- Compare camera model by their pixel-to-ray mapping and select the medoid:
the complete task model that best represents the group.
- Write the selected models to a
cameras.json file and pass it to the full
run with --cameras.
Do not pass --use-fixed-camera-params. Large stochastic runs already hold the
supplied model fixed. If fewer than 4,000 shots reconstruct, normal bundle adjustment
should remain free to refine it.
If a camera key has too few valid candidates or the candidates disagree too much,
omit that key and let ODM use its normal initialization.
Use task calibrations for large ODM runs
Large ODM runs can keep poor initial camera parameters for the entire reconstruction.
OpenSfM switches to stochastic bundle adjustment at 4,000 reconstructed shots, and
that solver keeps camera intrinsics fixed.
We saw this in an 11,782-image test project. The camera model started and finished with:
0.6667, derived from EXIFSmaller fast-orthophoto tasks from the same project stay below the threshold and
self-calibrate normally. Independent task runs produced focal values of
0.7340and0.7463, with similar distortion coefficients. These values also closely match thecurrent upstream OpenSfM calibration for this camera.
Proposed change
Add an optional ScaleODM stage for full-project runs with at least 4,000 input images:
cameras.json,stats.json, andshots.geojsonfrom every completedfast-orthophoto task.
the complete task model that best represents the group.
cameras.jsonfile and pass it to the fullrun with
--cameras.Do not pass
--use-fixed-camera-params. Large stochastic runs already hold thesupplied model fixed. If fewer than 4,000 shots reconstruct, normal bundle adjustment
should remain free to refine it.
If a camera key has too few valid candidates or the candidates disagree too much,
omit that key and let ODM use its normal initialization.