limap.sfm package
Triangulation of lines and groups – globally over all images at once, or incrementally as images are registered – together with the structure-aware incremental mapper and the pipeline driving it.
Global triangulation
Triangulates every structure from all its observations at once, for a reconstruction whose poses are already known.
- class limap.sfm.GlobalLineTriangulationOptions
- __init__(*args, **kwargs)
Overloaded function.
__init__(self: limap._limap._sfm.GlobalLineTriangulationOptions) -> None
__init__(self: limap._limap._sfm.GlobalLineTriangulationOptions, kwargs: dict) -> None
__init__(self: limap._limap._sfm.GlobalLineTriangulationOptions, **kwargs) -> None
- check(self: limap._limap._sfm.GlobalLineTriangulationOptions) bool
- mergedict(self: object, kwargs: dict) None
- summary(self: limap._limap._sfm.GlobalLineTriangulationOptions, write_type: bool = False) str
- todict(self: limap._limap._sfm.GlobalLineTriangulationOptions, recursive: bool = True) dict
- property enable_remerge
True)
- Type:
(bool, default
- property filtering2d_th_angular_2d
8.0)
- Type:
(float, default
- property filtering2d_th_overlap
0.5)
- Type:
(float, default
- property filtering2d_th_overlap_num_supports
- Type:
(int, default
- property filtering2d_th_perp_2d
5.0)
- Type:
(float, default
- property filtering2d_th_sv_angular_3d
75.0)
- Type:
(float, default
- property filtering2d_th_sv_num_supports
- Type:
(int, default
- property fullscore_th
1.0)
- Type:
(float, default
- property iou_threshold
0.1)
- Type:
(float, default
- property linker2d_options
LineLinker2dOptions(score_th=0.5, th_angle=5.0, th_overlap=0.05, th_smartangle=1.0, th_smartoverlap=0.2, th_perp=2.0, th_innerseg=2.0, use_angle=True, use_overlap=True, use_smartangle=True, use_perp=True, use_innerseg=False))
- Type:
(LineLinker2dOptions, default
- property linker3d_options
LineLinker3dOptions(score_th=0.5, th_angle=10.0, th_overlap=0.001, th_smartangle=1.0, th_smartoverlap=0.1, th_perp=1.0, th_innerseg=1.0, use_angle=True, use_overlap=True, use_smartangle=True, use_perp=False, use_innerseg=True))
- Type:
(LineLinker3dOptions, default
- property min_length_2d
20.0)
- Type:
(float, default
- property min_visible_views
- Type:
(int, default
- property num_outliers_aggregator
- Type:
(int, default
- property num_threads
-1)
- Type:
(int, default
- property scale_inv_th
0.01)
- Type:
(float, default
- property sensitivity_threshold
70.0)
- Type:
(float, default
- property use_point_assisted_triangulation
True)
- Type:
(bool, default
- property use_vp_assisted_triangulation
True)
- Type:
(bool, default
- property var2d
2.0)
- Type:
(float, default
- property wireframe2d_th
2.0)
- Type:
(float, default
- class limap.sfm.GlobalLineTriangulationController
- __init__(self: limap._limap._sfm.GlobalLineTriangulationController, options: limap._limap._sfm.GlobalLineTriangulationOptions, reconstruction: limap._limap._scene.HolisticReconstruction, correspondence_graph: pycolmap._core.CorrespondenceGraph, exhaustive_match_neighbors: collections.abc.Mapping[SupportsInt | SupportsIndex, collections.abc.Sequence[SupportsInt | SupportsIndex]] = {}) None
- run(self: limap._limap._sfm.GlobalLineTriangulationController) None
- limap.sfm.global_line_triangulation(options: limap._limap._sfm.GlobalLineTriangulationOptions, reconstruction: limap._limap._scene.HolisticReconstruction, correspondence_graph: pycolmap._core.CorrespondenceGraph, exhaustive_match_neighbors: collections.abc.Mapping[SupportsInt | SupportsIndex, collections.abc.Sequence[SupportsInt | SupportsIndex]] = {}) None
- limap.sfm.global_line_triangulation_pipeline(structure_db_cache: limap._limap._scene.StructureDatabaseCache, reconstruction: limap._limap._scene.HolisticReconstruction, options: limap._limap._sfm.GlobalLineTriangulationOptions, ba_options: limap._limap._estimators._bundle_adjustment.PointLineBundleAdjustmentOptions | None = None, exhaustive_match_neighbors: collections.abc.Mapping[SupportsInt | SupportsIndex, collections.abc.Sequence[SupportsInt | SupportsIndex]] = {}) None
- class limap.sfm.GlobalGroupTriangulationOptions
- __init__(*args, **kwargs)
Overloaded function.
__init__(self: limap._limap._sfm.GlobalGroupTriangulationOptions) -> None
__init__(self: limap._limap._sfm.GlobalGroupTriangulationOptions, kwargs: dict) -> None
__init__(self: limap._limap._sfm.GlobalGroupTriangulationOptions, **kwargs) -> None
- get_effective_group_types(self: limap._limap._sfm.GlobalGroupTriangulationOptions) list[limap._limap._geometry.GroupType]
- get_init_ransac_thresh(self: limap._limap._sfm.GlobalGroupTriangulationOptions, arg0: limap._limap._geometry.GroupType) float
- get_verification_thresh(self: limap._limap._sfm.GlobalGroupTriangulationOptions, arg0: limap._limap._geometry.GroupType) float
- mergedict(self: object, kwargs: dict) None
- summary(self: limap._limap._sfm.GlobalGroupTriangulationOptions, write_type: bool = False) str
- todict(self: limap._limap._sfm.GlobalGroupTriangulationOptions, recursive: bool = True) dict
- property enable_verification
True)
- Type:
Enable group verification after parameter initialization (bool, default
- property group_types
[])
- Type:
(list, default
- property init_ransac_thresh
{})
- Type:
(dict, default
- property min_cluster_size
- Type:
(int, default
- property min_num_supports_for_association
- Type:
(int, default
- Type:
(int, default
- property pixel_uncertainty_threshold
30.0)
- Type:
Pixel uncertainty (std dev) threshold for line classification (0 = disable). Lines above threshold are classified as unreliable and refined separately in 2-step BA. (float, default
- property verification_default_reproj_threshold
3.0)
- Type:
Default reprojection threshold in pixels (when not set per-type) (float, default
- property verification_default_vp_threshold
10.0)
- Type:
Default VP verification threshold in degrees (when not set per-type) (float, default
- property verification_filter_outliers
True)
- Type:
Whether to filter outlier associations from validated groups (bool, default
- property verification_min_inlier_ratio
0.5)
- Type:
Minimum inlier ratio to validate group (float, default
- property verification_min_num_inliers
- Type:
Minimum inlier count to validate group (int, default
- property verification_obs_inlier_ratio
0.8)
- Type:
For multi-view
- Type:
ratio of views that must pass (float, default
- property verification_threshold
pixels (dict, default: {})
- Type:
Inlier threshold per group type (-1 or missing = use default). VP
- Type:
degrees, Plane/Sphere/etc
- class limap.sfm.GlobalGroupTriangulationController
- __init__(self: limap._limap._sfm.GlobalGroupTriangulationController, options: limap._limap._sfm.GlobalGroupTriangulationOptions, reconstruction: limap._limap._scene.HolisticReconstruction, correspondence_graph: pycolmap._core.CorrespondenceGraph) None
- run(self: limap._limap._sfm.GlobalGroupTriangulationController) None
- limap.sfm.global_group_triangulation(options: limap._limap._sfm.GlobalGroupTriangulationOptions, reconstruction: limap._limap._scene.HolisticReconstruction, correspondence_graph: pycolmap._core.CorrespondenceGraph) None
- limap.sfm.global_triangulate_structure(structure_db_cache: limap._limap._scene.StructureDatabaseCache, reconstruction: limap._limap._scene.HolisticReconstruction, line_options: limap._limap._sfm.GlobalLineTriangulationOptions, group_options: limap._limap._sfm.GlobalGroupTriangulationOptions, ba_options: limap._limap._estimators._bundle_adjustment.StructureBundleAdjustmentOptions | None = None, filter_options: limap::GroupVerificationOptions | None = None, exhaustive_match_neighbors: collections.abc.Mapping[typing.SupportsInt | typing.SupportsIndex, collections.abc.Sequence[typing.SupportsInt | typing.SupportsIndex]]={}) None
- class limap.sfm.GlobalStructureTriangulationOptions(line_triangulation: limap._limap._sfm.GlobalLineTriangulationOptions = <factory>, group_triangulation: limap._limap._sfm.GlobalGroupTriangulationOptions = <factory>, ba_options: limap._limap._estimators._bundle_adjustment.StructureBundleAdjustmentOptions | None = <factory>, filter_options: limap._limap._sfm.GroupVerificationOptions | None = <factory>)
- __init__(line_triangulation: GlobalLineTriangulationOptions = <factory>, group_triangulation: GlobalGroupTriangulationOptions = <factory>, ba_options: StructureBundleAdjustmentOptions | None = <factory>, filter_options: GroupVerificationOptions | None = <factory>) None
- ba_options: StructureBundleAdjustmentOptions | None
- filter_options: GroupVerificationOptions | None
- group_triangulation: GlobalGroupTriangulationOptions
- line_triangulation: GlobalLineTriangulationOptions
- limap.sfm.global_structure_triangulation(recon: Reconstruction, structure_db_path: Path, options: GlobalStructureTriangulationOptions, exhaustive_match_neighbors: dict[int, list[int]] | None = None) HolisticReconstruction
Incremental triangulation
The triangulators used inside incremental SfM: structures are extended and re-triangulated as each new image is registered.
- class limap.sfm.IncrementalLineTriangulatorOptions
- __init__(*args, **kwargs)
Overloaded function.
__init__(self: limap._limap._sfm.IncrementalLineTriangulatorOptions) -> None
__init__(self: limap._limap._sfm.IncrementalLineTriangulatorOptions, kwargs: dict) -> None
__init__(self: limap._limap._sfm.IncrementalLineTriangulatorOptions, **kwargs) -> None
- check(self: limap._limap._sfm.IncrementalLineTriangulatorOptions) bool
- mergedict(self: object, kwargs: dict) None
- summary(self: limap._limap._sfm.IncrementalLineTriangulatorOptions, write_type: bool = False) str
- todict(self: limap._limap._sfm.IncrementalLineTriangulatorOptions, recursive: bool = True) dict
- property complete_max_reproj_error
4.0)
- Type:
(float, default
- property complete_max_transitivity
- Type:
(int, default
- property continue_max_angle_error
2.0)
- Type:
(float, default
- property create_max_angle_error
2.0)
- Type:
(float, default
- property exhaustive_match_neighbors
{})
- Type:
(dict, default
- property fullscore_th
1.0)
- Type:
(float, default
- property ignore_two_view_tracks
True)
- Type:
(bool, default
- property iou_threshold
0.1)
- Type:
(float, default
- property linker2d_options
LineLinker2dOptions(score_th=0.5, th_angle=5.0, th_overlap=0.05, th_smartangle=1.0, th_smartoverlap=0.2, th_perp=2.0, th_innerseg=2.0, use_angle=True, use_overlap=True, use_smartangle=True, use_perp=True, use_innerseg=False))
- Type:
(LineLinker2dOptions, default
- property linker3d_options
LineLinker3dOptions(score_th=0.5, th_angle=10.0, th_overlap=0.001, th_smartangle=1.0, th_smartoverlap=0.1, th_perp=1.0, th_innerseg=1.0, use_angle=True, use_overlap=True, use_smartangle=True, use_perp=False, use_innerseg=True))
- Type:
(LineLinker3dOptions, default
- property max_transitivity
- Type:
(int, default
- property merge_max_angle_error_2d
5.0)
- Type:
(float, default
- property merge_max_reproj_error
4.0)
- Type:
(float, default
- property min_angle
1.5)
- Type:
(float, default
- property min_length_2d
20.0)
- Type:
(float, default
- property num_threads
-1)
- Type:
(int, default
- property re_max_angle_error
5.0)
- Type:
(float, default
- property re_max_trials
- Type:
(int, default
- property re_min_ratio
0.2)
- Type:
(float, default
- property scale_inv_th
0.01)
- Type:
(float, default
- property sensitivity_threshold
70.0)
- Type:
(float, default
- property use_point_assisted_triangulation
True)
- Type:
(bool, default
- property use_vp_assisted_triangulation
True)
- Type:
(bool, default
- property var2d
2.0)
- Type:
(float, default
- class limap.sfm.IncrementalLineTriangulator
- __init__(self: limap._limap._sfm.IncrementalLineTriangulator, structure_correspondence_graph: limap._limap._scene.StructureCorrespondenceGraph, reconstruction: limap._limap._scene.HolisticReconstruction, obs_manager: limap::StructureObservationManager = None) None
- add_modified_line3d(self: limap._limap._sfm.IncrementalLineTriangulator, line3d_id: SupportsInt | SupportsIndex) None
- clear_modified_lines3d(self: limap._limap._sfm.IncrementalLineTriangulator) None
- complete_all_tracks(self: limap._limap._sfm.IncrementalLineTriangulator, options: limap._limap._sfm.IncrementalLineTriangulatorOptions) int
- complete_image(self: limap._limap._sfm.IncrementalLineTriangulator, options: limap._limap._sfm.IncrementalLineTriangulatorOptions, image_id: SupportsInt | SupportsIndex) int
- complete_tracks(self: limap._limap._sfm.IncrementalLineTriangulator, options: limap._limap._sfm.IncrementalLineTriangulatorOptions, line3d_ids: boost::unordered::unordered_flat_set<unsigned long, std: :hash<unsigned long>, std: :equal_to<unsigned long>, std: :allocator<unsigned long> >) int
- get_modified_lines3d(self: limap._limap._sfm.IncrementalLineTriangulator) boost::unordered::unordered_flat_set<unsigned long, std::hash<unsigned long>, std::equal_to<unsigned long>, std::allocator<unsigned long> >
- merge_all_tracks(self: limap._limap._sfm.IncrementalLineTriangulator, options: limap._limap._sfm.IncrementalLineTriangulatorOptions) int
- merge_tracks(self: limap._limap._sfm.IncrementalLineTriangulator, options: limap._limap._sfm.IncrementalLineTriangulatorOptions, line3d_ids: boost::unordered::unordered_flat_set<unsigned long, std: :hash<unsigned long>, std: :equal_to<unsigned long>, std: :allocator<unsigned long> >) int
- retriangulate(self: limap._limap._sfm.IncrementalLineTriangulator, options: limap._limap._sfm.IncrementalLineTriangulatorOptions) int
- triangulate_image(self: limap._limap._sfm.IncrementalLineTriangulator, options: limap._limap._sfm.IncrementalLineTriangulatorOptions, image_id: SupportsInt | SupportsIndex) int
- limap.sfm.incremental_line_triangulation_pipeline(structure_db_cache: limap._limap._scene.StructureDatabaseCache, reconstruction: limap._limap._scene.HolisticReconstruction, options: limap._limap._sfm.IncrementalLineTriangulatorOptions, ba_options: limap._limap._estimators._bundle_adjustment.PointLineBundleAdjustmentOptions | None = None) None
- class limap.sfm.IncrementalGroupTriangulatorOptions
- __init__(*args, **kwargs)
Overloaded function.
__init__(self: limap._limap._sfm.IncrementalGroupTriangulatorOptions) -> None
__init__(self: limap._limap._sfm.IncrementalGroupTriangulatorOptions, kwargs: dict) -> None
__init__(self: limap._limap._sfm.IncrementalGroupTriangulatorOptions, **kwargs) -> None
- check(self: limap._limap._sfm.IncrementalGroupTriangulatorOptions) bool
- mergedict(self: object, kwargs: dict) None
- summary(self: limap._limap._sfm.IncrementalGroupTriangulatorOptions, write_type: bool = False) str
- todict(self: limap._limap._sfm.IncrementalGroupTriangulatorOptions, recursive: bool = True) dict
- property association_filter_min_num_features
- Type:
(int, default
- property association_filter_reproj_threshold
3.0)
- Type:
(float, default
- property complete_max_angle_error_vp
5.0)
- Type:
(float, default
- property complete_max_reproj_error
2.0)
- Type:
(float, default
- property complete_max_transitivity
- Type:
(int, default
- property continue_max_angle_error_vp
5.0)
- Type:
(float, default
- property continue_max_reproj_error
2.0)
- Type:
(float, default
- property default_reproj_threshold
3.0)
- Type:
(float, default
- property default_vp_threshold
10.0)
- Type:
(float, default
- property ignore_two_view_tracks
True)
- Type:
(bool, default
- property init_ransac_thresh
{})
- Type:
(dict, default
- property max_transitivity
- Type:
(int, default
- property merge_max_angle_error_vp
5.0)
- Type:
(float, default
- property merge_max_error_ratio
2.0)
- Type:
(float, default
- property merge_max_plane_normal_angle
15.0)
- Type:
(float, default
- property merge_max_reproj_error
2.0)
- Type:
(float, default
- property min_active_to_keep_params
- Type:
(int, default
- property min_num_observations
- Type:
(int, default
- property min_num_supports_for_association
- Type:
(int, default
- property surface_dist_mad_factor
3.0)
- Type:
(float, default
- property verification_filter_outliers
True)
- Type:
(bool, default
- property verification_min_inlier_ratio
0.5)
- Type:
(float, default
- property verification_min_num_inliers
- Type:
(int, default
- property verification_obs_inlier_ratio
0.8)
- Type:
(float, default
- property verification_threshold
{})
- Type:
(dict, default
- class limap.sfm.IncrementalGroupTriangulator
- __init__(self: limap._limap._sfm.IncrementalGroupTriangulator, structure_correspondence_graph: limap._limap._scene.StructureCorrespondenceGraph, reconstruction: limap._limap._scene.HolisticReconstruction, obs_manager: limap::StructureObservationManager = None) None
- add_modified_group3d(self: limap._limap._sfm.IncrementalGroupTriangulator, group3d_id: SupportsInt | SupportsIndex) None
- clear_modified_groups3d(self: limap._limap._sfm.IncrementalGroupTriangulator) None
- complete_all_tracks(self: limap._limap._sfm.IncrementalGroupTriangulator, options: limap._limap._sfm.IncrementalGroupTriangulatorOptions) int
- complete_image(self: limap._limap._sfm.IncrementalGroupTriangulator, options: limap._limap._sfm.IncrementalGroupTriangulatorOptions, image_id: SupportsInt | SupportsIndex) int
- complete_tracks(self: limap._limap._sfm.IncrementalGroupTriangulator, options: limap._limap._sfm.IncrementalGroupTriangulatorOptions, group3d_ids: boost::unordered::unordered_flat_set<unsigned long, std: :hash<unsigned long>, std: :equal_to<unsigned long>, std: :allocator<unsigned long> >) int
- get_modified_groups3d(self: limap._limap._sfm.IncrementalGroupTriangulator) boost::unordered::unordered_flat_set<unsigned long, std::hash<unsigned long>, std::equal_to<unsigned long>, std::allocator<unsigned long> >
- merge_all_tracks(self: limap._limap._sfm.IncrementalGroupTriangulator, options: limap._limap._sfm.IncrementalGroupTriangulatorOptions) int
- merge_tracks(self: limap._limap._sfm.IncrementalGroupTriangulator, options: limap._limap._sfm.IncrementalGroupTriangulatorOptions, group3d_ids: boost::unordered::unordered_flat_set<unsigned long, std: :hash<unsigned long>, std: :equal_to<unsigned long>, std: :allocator<unsigned long> >) int
- triangulate_image(self: limap._limap._sfm.IncrementalGroupTriangulator, options: limap._limap._sfm.IncrementalGroupTriangulatorOptions, image_id: SupportsInt | SupportsIndex) int
- class limap.sfm.IncrementalStructureTriangulatorOptions
- __init__(*args, **kwargs)
Overloaded function.
__init__(self: limap._limap._sfm.IncrementalStructureTriangulatorOptions) -> None
__init__(self: limap._limap._sfm.IncrementalStructureTriangulatorOptions, kwargs: dict) -> None
__init__(self: limap._limap._sfm.IncrementalStructureTriangulatorOptions, **kwargs) -> None
- check(self: limap._limap._sfm.IncrementalStructureTriangulatorOptions) bool
- mergedict(self: object, kwargs: dict) None
- summary(self: limap._limap._sfm.IncrementalStructureTriangulatorOptions, write_type: bool = False) str
- todict(self: limap._limap._sfm.IncrementalStructureTriangulatorOptions, recursive: bool = True) dict
- property complete_tracks
True)
- Type:
(bool, default
- property group_options
IncrementalGroupTriangulatorOptions(max_transitivity=1, min_num_observations=2, min_num_supports_for_association=2, init_ransac_thresh={}, verification_threshold={}, default_vp_threshold=10.0, default_reproj_threshold=3.0, verification_min_num_inliers=3, verification_min_inlier_ratio=0.5, verification_obs_inlier_ratio=0.8, verification_filter_outliers=True, continue_max_reproj_error=2.0, continue_max_angle_error_vp=5.0, complete_max_reproj_error=2.0, complete_max_angle_error_vp=5.0, complete_max_transitivity=5, merge_max_reproj_error=2.0, merge_max_angle_error_vp=5.0, merge_max_error_ratio=2.0, merge_max_plane_normal_angle=15.0, association_filter_min_num_features=10, association_filter_reproj_threshold=3.0, min_active_to_keep_params=10, surface_dist_mad_factor=3.0, ignore_two_view_tracks=True))
- Type:
(IncrementalGroupTriangulatorOptions, default
- property line_options
IncrementalLineTriangulatorOptions(max_transitivity=1, exhaustive_match_neighbors={}, use_point_assisted_triangulation=True, use_vp_assisted_triangulation=True, min_length_2d=20.0, iou_threshold=0.1, sensitivity_threshold=70.0, var2d=2.0, fullscore_th=1.0, scale_inv_th=0.01, linker2d_options=LineLinker2dOptions(score_th=0.5, th_angle=5.0, th_overlap=0.05, th_smartangle=1.0, th_smartoverlap=0.2, th_perp=2.0, th_innerseg=2.0, use_angle=True, use_overlap=True, use_smartangle=True, use_perp=True, use_innerseg=False), linker3d_options=LineLinker3dOptions(score_th=0.5, th_angle=10.0, th_overlap=0.001, th_smartangle=1.0, th_smartoverlap=0.1, th_perp=1.0, th_innerseg=1.0, use_angle=True, use_overlap=True, use_smartangle=True, use_perp=False, use_innerseg=True), create_max_angle_error=2.0, continue_max_angle_error=2.0, merge_max_reproj_error=4.0, merge_max_angle_error_2d=5.0, complete_max_reproj_error=4.0, complete_max_transitivity=5, re_max_angle_error=5.0, re_min_ratio=0.2, re_max_trials=1, min_angle=1.5, ignore_two_view_tracks=True, num_threads=-1))
- Type:
(IncrementalLineTriangulatorOptions, default
- property merge_tracks
True)
- Type:
(bool, default
- property point_options
IncrementalTriangulatorOptions(max_transitivity=1, create_max_angle_error=2.0, continue_max_angle_error=2.0, merge_max_reproj_error=4.0, complete_max_reproj_error=4.0, complete_max_transitivity=5, re_max_angle_error=5.0, re_min_ratio=0.2, re_max_trials=1, min_angle=1.5, ignore_two_view_tracks=True, min_focal_length_ratio=0.1, max_focal_length_ratio=10.0, max_extra_param=1.0, random_seed=-1))
- Type:
(IncrementalTriangulatorOptions, default
- property triangulate_groups
True)
- Type:
(bool, default
- property triangulate_lines
True)
- Type:
(bool, default
- property triangulate_points
True)
- Type:
(bool, default
- class limap.sfm.IncrementalStructureTriangulator
- __init__(self: limap._limap._sfm.IncrementalStructureTriangulator, point_corr_graph: pycolmap._core.CorrespondenceGraph, structure_corr_graph: limap._limap._scene.StructureCorrespondenceGraph, reconstruction: limap._limap._scene.HolisticReconstruction) None
- clear_modified(self: limap._limap._sfm.IncrementalStructureTriangulator) None
- complete_all_tracks(self: limap._limap._sfm.IncrementalStructureTriangulator, options: limap._limap._sfm.IncrementalStructureTriangulatorOptions) int
- complete_image(self: limap._limap._sfm.IncrementalStructureTriangulator, options: limap._limap._sfm.IncrementalStructureTriangulatorOptions, image_id: SupportsInt | SupportsIndex) int
- get_modified_groups3d(self: limap._limap._sfm.IncrementalStructureTriangulator) boost::unordered::unordered_flat_set<unsigned long, std::hash<unsigned long>, std::equal_to<unsigned long>, std::allocator<unsigned long> >
- get_modified_lines3d(self: limap._limap._sfm.IncrementalStructureTriangulator) boost::unordered::unordered_flat_set<unsigned long, std::hash<unsigned long>, std::equal_to<unsigned long>, std::allocator<unsigned long> >
- get_modified_points3d(self: limap._limap._sfm.IncrementalStructureTriangulator) boost::unordered::unordered_flat_set<unsigned long, std::hash<unsigned long>, std::equal_to<unsigned long>, std::allocator<unsigned long> >
- group_triangulator(self: limap._limap._sfm.IncrementalStructureTriangulator) limap._limap._sfm.IncrementalGroupTriangulator
- line_triangulator(self: limap._limap._sfm.IncrementalStructureTriangulator) limap._limap._sfm.IncrementalLineTriangulator
- merge_all_tracks(self: limap._limap._sfm.IncrementalStructureTriangulator, options: limap._limap._sfm.IncrementalStructureTriangulatorOptions) int
- point_triangulator(self: limap._limap._sfm.IncrementalStructureTriangulator) pycolmap._core.IncrementalTriangulator
- triangulate_image(self: limap._limap._sfm.IncrementalStructureTriangulator, options: limap._limap._sfm.IncrementalStructureTriangulatorOptions, image_id: SupportsInt | SupportsIndex) int
- limap.sfm.incremental_triangulate_structure(point_corr_graph: pycolmap._core.CorrespondenceGraph, structure_db_cache: limap._limap._scene.StructureDatabaseCache, reconstruction: limap._limap._scene.HolisticReconstruction, options: limap._limap._sfm.IncrementalStructureTriangulatorOptions, ba_options: limap._limap._estimators._bundle_adjustment.StructureBundleAdjustmentOptions | None = None, filter_options: limap._limap._sfm.GroupVerificationOptions | None = None) None
Incremental mapper and pipeline
The mapper registers images with hybrid point and line correspondences and keeps the structures up to date; the pipeline drives it from initialization to the final bundle adjustment.
- class limap.sfm.StructureIncrementalMapperOptions
- __init__(*args, **kwargs)
Overloaded function.
__init__(self: limap._limap._sfm.StructureIncrementalMapperOptions) -> None
__init__(self: limap._limap._sfm.StructureIncrementalMapperOptions, kwargs: dict) -> None
__init__(self: limap._limap._sfm.StructureIncrementalMapperOptions, **kwargs) -> None
- check(self: limap._limap._sfm.StructureIncrementalMapperOptions) bool
- mergedict(self: object, kwargs: dict) None
- summary(self: limap._limap._sfm.StructureIncrementalMapperOptions, write_type: bool = False) str
- todict(self: limap._limap._sfm.StructureIncrementalMapperOptions, recursive: bool = True) dict
- property filter_max_line_angular_error
8.0)
- Type:
Max angular error (degrees) for line filtering (float, default
- property filter_max_line_perp_error
5.0)
- Type:
Max perpendicular error (pixels) for line filtering (float, default
- property group_verification
GroupVerificationOptions(inlier_threshold=-1.0, default_vp_threshold=10.0, default_reproj_threshold=3.0, min_num_inliers=3, min_inlier_ratio=0.5, obs_inlier_ratio=0.8, filter_outliers=True))
- Type:
Post-BA group verification options (GroupVerificationOptions, default
- property line_visibility_weight
1.0)
- Type:
Weight for line visibility in next-image ranking (float, default
- property min_active_line_observations
- Type:
Min active observations for reliable classification (int, default
- property min_active_ratio_for_deletion
0.2)
- Type:
Min active ratio before hard-deleting a line track (float, default
- property pixel_uncertainty_threshold
30.0)
- Type:
Covariance-based pixel uncertainty (std dev) threshold for reliability classification (0 to disable) (float, default
- property registration
PointLineAbsolutePoseOptions(max_error_point=12.0, max_error_line=12.0, weight_point=1.0, weight_line=1.0, max_iterations=10000, min_iterations=100, success_prob=0.9999, random_seed=True, seed=0, estimate_focal_length=False))
- Type:
Point-line absolute pose estimation options (PointLineAbsolutePoseOptions, default
- property structure_ba
StructureBundleAdjustmentOptions(refine_wireframe=True, weight_wireframe=0.1, loss_function_type_wireframe=LossFunctionType.CAUCHY, loss_function_scale_wireframe=1.0, force_reconstruct_wireframe3d=True, wireframe_voting=<limap._limap._scene.WireframeVotingOptions object at 0x7e10ca32e8b0>, refine_groups=True, weight_vp=5000.0, weight_plane=0.5, vp_residual_type=’sin’, loss_function_type_angle=LossFunctionType.CAUCHY, loss_function_scale_angle=0.2, loss_function_type_reprojection=LossFunctionType.CAUCHY, loss_function_scale_reprojection=1.5, min_active_group_associations=10, min_reliable_group_associations_step2=20, angular_constraint_threshold_deg=5.0, angular_constraint_min_covisible_images=3, loss_function_type_angular_constraint=LossFunctionType.CAUCHY, loss_function_scale_angular_constraint=0.1, enforce_vp_angular_constraints=True, weight_vp_angular_constraint=100000.0, enforce_plane_angular_constraints=True, weight_plane_angular_constraint=100000.0, refine_points=True, refine_lines=True, weight_point=1.0, weight_line=1.0, line_weight_normalization_length=60.0, loss_function_type_line=LossFunctionType.CAUCHY, loss_function_scale_line=1.0, use_parameter_block_ordering=True, refine_focal_length=True, refine_principal_point=False, refine_extra_params=True, refine_rig_from_world=True, refine_sensor_from_rig=True, constant_rig_from_world_rotation=False, refine_points3D=True, min_track_length=0, print_summary=True, backend=BundleAdjustmentBackend.CERES, ceres=CeresBundleAdjustmentOptions(loss_function_type=LossFunctionType.TRIVIAL, loss_function_scale=1.0, use_gpu=False, gpu_index=’-1’, solver_options=SolverOptions(minimizer_type=MinimizerType.TRUST_REGION, line_search_direction_type=LineSearchDirectionType.LBFGS, line_search_type=LineSearchType.WOLFE, nonlinear_conjugate_gradient_type=NonlinearConjugateGradientType.FLETCHER_REEVES, max_lbfgs_rank=20, use_approximate_eigenvalue_bfgs_scaling=False, line_search_interpolation_type=LineSearchInterpolationType.CUBIC, min_line_search_step_size=1e-09, line_search_sufficient_function_decrease=0.0001, max_line_search_step_contraction=0.001, min_line_search_step_contraction=0.6, max_num_line_search_step_size_iterations=20, max_num_line_search_direction_restarts=5, line_search_sufficient_curvature_decrease=0.9, max_line_search_step_expansion=10.0, trust_region_strategy_type=TrustRegionStrategyType.LEVENBERG_MARQUARDT, dogleg_type=DoglegType.TRADITIONAL_DOGLEG, use_nonmonotonic_steps=False, max_consecutive_nonmonotonic_steps=10, max_num_iterations=100, max_solver_time_in_seconds=1000000000.0, num_threads=-1, initial_trust_region_radius=10000.0, max_trust_region_radius=1e+16, min_trust_region_radius=1e-32, min_relative_decrease=0.001, min_lm_diagonal=1e-06, max_lm_diagonal=1e+32, max_num_consecutive_invalid_steps=10, function_tolerance=0.0, gradient_tolerance=0.0001, parameter_tolerance=0.0, linear_solver_type=LinearSolverType.SPARSE_SCHUR, preconditioner_type=PreconditionerType.JACOBI, visibility_clustering_type=VisibilityClusteringType.CANONICAL_VIEWS, dense_linear_algebra_library_type=DenseLinearAlgebraLibraryType.EIGEN, sparse_linear_algebra_library_type=SparseLinearAlgebraLibraryType.SUITE_SPARSE, use_explicit_schur_complement=False, dynamic_sparsity=False, use_inner_iterations=False, inner_iteration_tolerance=0.001, min_linear_solver_iterations=0, max_linear_solver_iterations=200, eta=0.1, jacobi_scaling=True, logging_type=LoggingType.SILENT, minimizer_progress_to_stdout=False, trust_region_problem_dump_directory=’/tmp’, trust_region_problem_dump_format_type=DumpFormatType.TEXTFILE, check_gradients=False, gradient_check_relative_precision=1e-08, gradient_check_numeric_derivative_relative_step_size=1e-06, update_state_every_iteration=False), min_num_images_gpu_solver=50, min_num_residuals_for_cpu_multi_threading=50000, max_num_images_direct_dense_cpu_solver=50, max_num_images_direct_sparse_cpu_solver=1000, max_num_images_direct_dense_gpu_solver=200, max_num_images_direct_sparse_gpu_solver=4000, auto_select_solver_type=False), caspar=CasparBundleAdjustmentOptions(solver_iter_max=200, pcg_iter_max=20, diag_init=1.0, diag_min=1e-12, diag_scaling_up=2.0, diag_scaling_down=0.333333, diag_exit_value=1000.0, score_exit_value=0.0, pcg_rel_error_exit=0.0001, pcg_rel_score_exit=-1.0, pcg_rel_decrease_min=-1.0, solver_rel_decrease_min=1.0, gpu_index=’-1’)))
- Type:
Structure bundle adjustment options (StructureBundleAdjustmentOptions, default
- property triangulation
IncrementalStructureTriangulatorOptions(triangulate_points=True, triangulate_lines=True, triangulate_groups=True, complete_tracks=True, merge_tracks=True, point_options=IncrementalTriangulatorOptions(max_transitivity=1, create_max_angle_error=2.0, continue_max_angle_error=2.0, merge_max_reproj_error=4.0, complete_max_reproj_error=4.0, complete_max_transitivity=5, re_max_angle_error=5.0, re_min_ratio=0.2, re_max_trials=1, min_angle=1.5, ignore_two_view_tracks=True, min_focal_length_ratio=0.1, max_focal_length_ratio=10.0, max_extra_param=1.0, random_seed=-1), line_options=IncrementalLineTriangulatorOptions(max_transitivity=1, exhaustive_match_neighbors={}, use_point_assisted_triangulation=True, use_vp_assisted_triangulation=True, min_length_2d=20.0, iou_threshold=0.1, sensitivity_threshold=70.0, var2d=2.0, fullscore_th=1.0, scale_inv_th=0.01, linker2d_options=LineLinker2dOptions(score_th=0.5, th_angle=5.0, th_overlap=0.05, th_smartangle=1.0, th_smartoverlap=0.2, th_perp=2.0, th_innerseg=2.0, use_angle=True, use_overlap=True, use_smartangle=True, use_perp=True, use_innerseg=False), linker3d_options=LineLinker3dOptions(score_th=0.5, th_angle=10.0, th_overlap=0.001, th_smartangle=1.0, th_smartoverlap=0.1, th_perp=1.0, th_innerseg=1.0, use_angle=True, use_overlap=True, use_smartangle=True, use_perp=False, use_innerseg=True), create_max_angle_error=2.0, continue_max_angle_error=2.0, merge_max_reproj_error=4.0, merge_max_angle_error_2d=5.0, complete_max_reproj_error=4.0, complete_max_transitivity=5, re_max_angle_error=5.0, re_min_ratio=0.2, re_max_trials=1, min_angle=1.5, ignore_two_view_tracks=True, num_threads=-1), group_options=IncrementalGroupTriangulatorOptions(max_transitivity=1, min_num_observations=2, min_num_supports_for_association=2, init_ransac_thresh={}, verification_threshold={}, default_vp_threshold=10.0, default_reproj_threshold=3.0, verification_min_num_inliers=3, verification_min_inlier_ratio=0.5, verification_obs_inlier_ratio=0.8, verification_filter_outliers=True, continue_max_reproj_error=2.0, continue_max_angle_error_vp=5.0, complete_max_reproj_error=2.0, complete_max_angle_error_vp=5.0, complete_max_transitivity=5, merge_max_reproj_error=2.0, merge_max_angle_error_vp=5.0, merge_max_error_ratio=2.0, merge_max_plane_normal_angle=15.0, association_filter_min_num_features=10, association_filter_reproj_threshold=3.0, min_active_to_keep_params=10, surface_dist_mad_factor=3.0, ignore_two_view_tracks=True)))
- Type:
Structure triangulation options (IncrementalStructureTriangulatorOptions, default
- property use_lines_for_registration
True)
- Type:
Whether to use lines for hybrid PnPL registration (bool, default
- property use_two_step_ba
True)
- Type:
Enable 2-step BA (reliable then unreliable lines) (bool, default
- class limap.sfm.StructureIncrementalMapper
- __init__(self: limap._limap._sfm.StructureIncrementalMapper, database_cache: pycolmap._core.DatabaseCache, structure_db_cache: limap._limap._scene.StructureDatabaseCache) None
- adjust_global_bundle(self: limap._limap._sfm.StructureIncrementalMapper, mapper_options: pycolmap._core.IncrementalMapperOptions, options: limap._limap._sfm.StructureIncrementalMapperOptions) bool
- adjust_local_bundle(self: limap._limap._sfm.StructureIncrementalMapper, mapper_options: pycolmap._core.IncrementalMapperOptions, options: limap._limap._sfm.StructureIncrementalMapperOptions, image_id: SupportsInt | SupportsIndex) limap._limap._sfm.StructureLocalBundleAdjustmentReport
- begin_reconstruction(self: limap._limap._sfm.StructureIncrementalMapper, reconstruction: limap._limap._scene.HolisticReconstruction) None
- colmap_mapper(self: limap._limap._sfm.StructureIncrementalMapper) pycolmap._core.IncrementalMapper
- complete_and_merge_tracks(self: limap._limap._sfm.StructureIncrementalMapper, options: limap._limap._sfm.StructureIncrementalMapperOptions) int
- end_reconstruction(self: limap._limap._sfm.StructureIncrementalMapper, discard: bool) None
- estimate_initial_two_view_geometry(self: limap._limap._sfm.StructureIncrementalMapper, options: pycolmap._core.IncrementalMapperOptions, image_id1: SupportsInt | SupportsIndex, image_id2: SupportsInt | SupportsIndex) pycolmap._core.Rigid3d | None
- filter_frames(self: limap._limap._sfm.StructureIncrementalMapper, options: pycolmap._core.IncrementalMapperOptions) int
- filter_points(self: limap._limap._sfm.StructureIncrementalMapper, options: pycolmap._core.IncrementalMapperOptions) int
- find_initial_image_pair(self: limap._limap._sfm.StructureIncrementalMapper, options: pycolmap._core.IncrementalMapperOptions) tuple[int, int, pycolmap._core.Rigid3d] | None
- find_next_images(self: limap._limap._sfm.StructureIncrementalMapper, options: pycolmap._core.IncrementalMapperOptions, structure_options: limap._limap._sfm.StructureIncrementalMapperOptions, structure_less: bool = False) list[int]
- iterative_global_refinement(self: limap._limap._sfm.StructureIncrementalMapper, max_num_refinements: SupportsInt | SupportsIndex, max_refinement_change: SupportsFloat | SupportsIndex, mapper_options: pycolmap._core.IncrementalMapperOptions, options: limap._limap._sfm.StructureIncrementalMapperOptions, normalize_reconstruction: bool = True) None
- iterative_local_refinement(self: limap._limap._sfm.StructureIncrementalMapper, max_num_refinements: SupportsInt | SupportsIndex, max_refinement_change: SupportsFloat | SupportsIndex, mapper_options: pycolmap._core.IncrementalMapperOptions, options: limap._limap._sfm.StructureIncrementalMapperOptions, image_id: SupportsInt | SupportsIndex) None
- register_initial_image_pair(self: limap._limap._sfm.StructureIncrementalMapper, options: pycolmap._core.IncrementalMapperOptions, image_id1: SupportsInt | SupportsIndex, image_id2: SupportsInt | SupportsIndex, cam2_from_cam1: pycolmap._core.Rigid3d) None
- register_next_image(self: limap._limap._sfm.StructureIncrementalMapper, mapper_options: pycolmap._core.IncrementalMapperOptions, options: limap._limap._sfm.StructureIncrementalMapperOptions, image_id: SupportsInt | SupportsIndex) bool
- register_next_structure_less_image(self: limap._limap._sfm.StructureIncrementalMapper, mapper_options: pycolmap._core.IncrementalMapperOptions, image_id: SupportsInt | SupportsIndex) bool
- reset_initialization_stats(self: limap._limap._sfm.StructureIncrementalMapper) None
- retriangulate(self: limap._limap._sfm.StructureIncrementalMapper, options: limap._limap._sfm.StructureIncrementalMapperOptions) int
- soft_filter_lines(self: limap._limap._sfm.StructureIncrementalMapper, options: limap._limap._sfm.StructureIncrementalMapperOptions) int
Soft filter: tag observations as inactive instead of deleting
- structure_triangulator(self: limap._limap._sfm.StructureIncrementalMapper) limap._limap._sfm.IncrementalStructureTriangulator
- triangulate_image(self: limap._limap._sfm.StructureIncrementalMapper, options: limap._limap._sfm.StructureIncrementalMapperOptions, image_id: SupportsInt | SupportsIndex) int
- property num_total_reg_images
- property reconstruction
- class limap.sfm.StructureIncrementalPipelineOptions
- __init__(*args, **kwargs)
Overloaded function.
__init__(self: limap._limap._sfm.StructureIncrementalPipelineOptions) -> None
__init__(self: limap._limap._sfm.StructureIncrementalPipelineOptions, kwargs: dict) -> None
__init__(self: limap._limap._sfm.StructureIncrementalPipelineOptions, **kwargs) -> None
- check(self: limap._limap._sfm.StructureIncrementalPipelineOptions) bool
- global_structure_ba(self: limap._limap._sfm.StructureIncrementalPipelineOptions) limap._limap._estimators._bundle_adjustment.StructureBundleAdjustmentOptions
- is_initial_pair_provided(self: limap._limap._sfm.StructureIncrementalPipelineOptions) bool
- local_structure_ba(self: limap._limap._sfm.StructureIncrementalPipelineOptions) limap._limap._estimators._bundle_adjustment.StructureBundleAdjustmentOptions
- mapper(self: limap._limap._sfm.StructureIncrementalPipelineOptions) pycolmap._core.IncrementalMapperOptions
- mergedict(self: object, kwargs: dict) None
- summary(self: limap._limap._sfm.StructureIncrementalPipelineOptions, write_type: bool = False) str
- todict(self: limap._limap._sfm.StructureIncrementalPipelineOptions, recursive: bool = True) dict
- property colmap_options
IncrementalPipelineOptions(min_num_matches=15, ignore_watermarks=False, multiple_models=True, max_num_models=50, max_model_overlap=20, min_model_size=10, init_image_id1=-1, init_image_id2=-1, init_num_trials=200, structure_less_registration_fallback=True, structure_less_registration_only=False, extract_colors=True, num_threads=-1, random_seed=-1, min_focal_length_ratio=0.1, max_focal_length_ratio=10.0, max_extra_param=1.0, ba_refine_focal_length=True, ba_refine_principal_point=False, ba_refine_extra_params=True, ba_refine_sensor_from_rig=True, ba_min_num_residuals_for_cpu_multi_threading=50000, ba_local_function_tolerance=0.0, ba_local_max_num_iterations=-1, ba_global_frames_ratio=1.1, ba_global_points_ratio=1.1, ba_global_frames_freq=500, ba_global_points_freq=250000, ba_global_function_tolerance=0.0, ba_global_max_num_iterations=-1, ba_local_max_refinements=2, ba_local_max_refinement_change=0.001, ba_global_max_refinements=5, ba_global_max_refinement_change=0.0005, ba_use_gpu=False, ba_gpu_index=’-1’, ba_local_backend=BundleAdjustmentBackend.CERES, ba_global_backend=BundleAdjustmentBackend.CERES, use_prior_position=False, use_robust_loss_on_prior_position=False, prior_position_loss_scale=7.815, snapshot_path=., snapshot_frames_freq=0, image_path=., image_names=[], load_all_images=False, fix_existing_frames=False, constant_rigs=set(), constant_cameras=set(), max_runtime_seconds=-1, mapper=IncrementalMapperOptions(init_min_num_inliers=100, init_max_error=4.0, init_max_forward_motion=0.95, init_min_tri_angle=16.0, init_max_reg_trials=2, abs_pose_max_error=12.0, abs_pose_min_num_inliers=30, abs_pose_min_inlier_ratio=0.25, abs_pose_refine_focal_length=True, abs_pose_refine_extra_params=True, ba_local_num_images=6, ba_local_min_tri_angle=6.0, ba_global_ignore_redundant_points3D=False, ba_global_prune_points_min_coverage_gain=0.05, min_focal_length_ratio=0.1, max_focal_length_ratio=10.0, max_extra_param=1.0, filter_max_reproj_error=4.0, filter_min_tri_angle=1.5, max_reg_trials=3, fix_existing_frames=False, constant_rigs=set(), constant_cameras=set(), num_threads=-1, random_seed=-1, image_selection_method=ImageSelectionMethod.MIN_UNCERTAINTY), triangulation=IncrementalTriangulatorOptions(max_transitivity=1, create_max_angle_error=2.0, continue_max_angle_error=2.0, merge_max_reproj_error=4.0, complete_max_reproj_error=4.0, complete_max_transitivity=5, re_max_angle_error=5.0, re_min_ratio=0.2, re_max_trials=1, min_angle=1.5, ignore_two_view_tracks=True, min_focal_length_ratio=0.1, max_focal_length_ratio=10.0, max_extra_param=1.0, random_seed=-1)))
- Type:
COLMAP pipeline options (IncrementalPipelineOptions, default
- property structure_options
StructureIncrementalMapperOptions(line_visibility_weight=1.0, use_lines_for_registration=True, registration=PointLineAbsolutePoseOptions(max_error_point=12.0, max_error_line=12.0, weight_point=1.0, weight_line=1.0, max_iterations=10000, min_iterations=100, success_prob=0.9999, random_seed=True, seed=0, estimate_focal_length=False), triangulation=IncrementalStructureTriangulatorOptions(triangulate_points=True, triangulate_lines=True, triangulate_groups=True, complete_tracks=True, merge_tracks=True, point_options=IncrementalTriangulatorOptions(max_transitivity=1, create_max_angle_error=2.0, continue_max_angle_error=2.0, merge_max_reproj_error=4.0, complete_max_reproj_error=4.0, complete_max_transitivity=5, re_max_angle_error=5.0, re_min_ratio=0.2, re_max_trials=1, min_angle=1.5, ignore_two_view_tracks=True, min_focal_length_ratio=0.1, max_focal_length_ratio=10.0, max_extra_param=1.0, random_seed=-1), line_options=IncrementalLineTriangulatorOptions(max_transitivity=1, exhaustive_match_neighbors={}, use_point_assisted_triangulation=True, use_vp_assisted_triangulation=True, min_length_2d=20.0, iou_threshold=0.1, sensitivity_threshold=70.0, var2d=2.0, fullscore_th=1.0, scale_inv_th=0.01, linker2d_options=LineLinker2dOptions(score_th=0.5, th_angle=5.0, th_overlap=0.05, th_smartangle=1.0, th_smartoverlap=0.2, th_perp=2.0, th_innerseg=2.0, use_angle=True, use_overlap=True, use_smartangle=True, use_perp=True, use_innerseg=False), linker3d_options=LineLinker3dOptions(score_th=0.5, th_angle=10.0, th_overlap=0.001, th_smartangle=1.0, th_smartoverlap=0.1, th_perp=1.0, th_innerseg=1.0, use_angle=True, use_overlap=True, use_smartangle=True, use_perp=False, use_innerseg=True), create_max_angle_error=2.0, continue_max_angle_error=2.0, merge_max_reproj_error=4.0, merge_max_angle_error_2d=5.0, complete_max_reproj_error=4.0, complete_max_transitivity=5, re_max_angle_error=5.0, re_min_ratio=0.2, re_max_trials=1, min_angle=1.5, ignore_two_view_tracks=True, num_threads=-1), group_options=IncrementalGroupTriangulatorOptions(max_transitivity=1, min_num_observations=2, min_num_supports_for_association=2, init_ransac_thresh={}, verification_threshold={}, default_vp_threshold=10.0, default_reproj_threshold=3.0, verification_min_num_inliers=3, verification_min_inlier_ratio=0.5, verification_obs_inlier_ratio=0.8, verification_filter_outliers=True, continue_max_reproj_error=2.0, continue_max_angle_error_vp=5.0, complete_max_reproj_error=2.0, complete_max_angle_error_vp=5.0, complete_max_transitivity=5, merge_max_reproj_error=2.0, merge_max_angle_error_vp=5.0, merge_max_error_ratio=2.0, merge_max_plane_normal_angle=15.0, association_filter_min_num_features=10, association_filter_reproj_threshold=3.0, min_active_to_keep_params=10, surface_dist_mad_factor=3.0, ignore_two_view_tracks=True)), structure_ba=StructureBundleAdjustmentOptions(refine_wireframe=True, weight_wireframe=0.1, loss_function_type_wireframe=LossFunctionType.CAUCHY, loss_function_scale_wireframe=1.0, force_reconstruct_wireframe3d=True, wireframe_voting=<limap._limap._scene.WireframeVotingOptions object at 0x7e10ca32e8b0>, refine_groups=True, weight_vp=5000.0, weight_plane=0.5, vp_residual_type=’sin’, loss_function_type_angle=LossFunctionType.CAUCHY, loss_function_scale_angle=0.2, loss_function_type_reprojection=LossFunctionType.CAUCHY, loss_function_scale_reprojection=1.5, min_active_group_associations=10, min_reliable_group_associations_step2=20, angular_constraint_threshold_deg=5.0, angular_constraint_min_covisible_images=3, loss_function_type_angular_constraint=LossFunctionType.CAUCHY, loss_function_scale_angular_constraint=0.1, enforce_vp_angular_constraints=True, weight_vp_angular_constraint=100000.0, enforce_plane_angular_constraints=True, weight_plane_angular_constraint=100000.0, refine_points=True, refine_lines=True, weight_point=1.0, weight_line=1.0, line_weight_normalization_length=60.0, loss_function_type_line=LossFunctionType.CAUCHY, loss_function_scale_line=1.0, use_parameter_block_ordering=True, refine_focal_length=True, refine_principal_point=False, refine_extra_params=True, refine_rig_from_world=True, refine_sensor_from_rig=True, constant_rig_from_world_rotation=False, refine_points3D=True, min_track_length=0, print_summary=True, backend=BundleAdjustmentBackend.CERES, ceres=CeresBundleAdjustmentOptions(loss_function_type=LossFunctionType.TRIVIAL, loss_function_scale=1.0, use_gpu=False, gpu_index=’-1’, solver_options=SolverOptions(minimizer_type=MinimizerType.TRUST_REGION, line_search_direction_type=LineSearchDirectionType.LBFGS, line_search_type=LineSearchType.WOLFE, nonlinear_conjugate_gradient_type=NonlinearConjugateGradientType.FLETCHER_REEVES, max_lbfgs_rank=20, use_approximate_eigenvalue_bfgs_scaling=False, line_search_interpolation_type=LineSearchInterpolationType.CUBIC, min_line_search_step_size=1e-09, line_search_sufficient_function_decrease=0.0001, max_line_search_step_contraction=0.001, min_line_search_step_contraction=0.6, max_num_line_search_step_size_iterations=20, max_num_line_search_direction_restarts=5, line_search_sufficient_curvature_decrease=0.9, max_line_search_step_expansion=10.0, trust_region_strategy_type=TrustRegionStrategyType.LEVENBERG_MARQUARDT, dogleg_type=DoglegType.TRADITIONAL_DOGLEG, use_nonmonotonic_steps=False, max_consecutive_nonmonotonic_steps=10, max_num_iterations=100, max_solver_time_in_seconds=1000000000.0, num_threads=-1, initial_trust_region_radius=10000.0, max_trust_region_radius=1e+16, min_trust_region_radius=1e-32, min_relative_decrease=0.001, min_lm_diagonal=1e-06, max_lm_diagonal=1e+32, max_num_consecutive_invalid_steps=10, function_tolerance=0.0, gradient_tolerance=0.0001, parameter_tolerance=0.0, linear_solver_type=LinearSolverType.SPARSE_SCHUR, preconditioner_type=PreconditionerType.JACOBI, visibility_clustering_type=VisibilityClusteringType.CANONICAL_VIEWS, dense_linear_algebra_library_type=DenseLinearAlgebraLibraryType.EIGEN, sparse_linear_algebra_library_type=SparseLinearAlgebraLibraryType.SUITE_SPARSE, use_explicit_schur_complement=False, dynamic_sparsity=False, use_inner_iterations=False, inner_iteration_tolerance=0.001, min_linear_solver_iterations=0, max_linear_solver_iterations=200, eta=0.1, jacobi_scaling=True, logging_type=LoggingType.SILENT, minimizer_progress_to_stdout=False, trust_region_problem_dump_directory=’/tmp’, trust_region_problem_dump_format_type=DumpFormatType.TEXTFILE, check_gradients=False, gradient_check_relative_precision=1e-08, gradient_check_numeric_derivative_relative_step_size=1e-06, update_state_every_iteration=False), min_num_images_gpu_solver=50, min_num_residuals_for_cpu_multi_threading=50000, max_num_images_direct_dense_cpu_solver=50, max_num_images_direct_sparse_cpu_solver=1000, max_num_images_direct_dense_gpu_solver=200, max_num_images_direct_sparse_gpu_solver=4000, auto_select_solver_type=False), caspar=CasparBundleAdjustmentOptions(solver_iter_max=200, pcg_iter_max=20, diag_init=1.0, diag_min=1e-12, diag_scaling_up=2.0, diag_scaling_down=0.333333, diag_exit_value=1000.0, score_exit_value=0.0, pcg_rel_error_exit=0.0001, pcg_rel_score_exit=-1.0, pcg_rel_decrease_min=-1.0, solver_rel_decrease_min=1.0, gpu_index=’-1’)), filter_max_line_angular_error=8.0, filter_max_line_perp_error=5.0, group_verification=GroupVerificationOptions(inlier_threshold=-1.0, default_vp_threshold=10.0, default_reproj_threshold=3.0, min_num_inliers=3, min_inlier_ratio=0.5, obs_inlier_ratio=0.8, filter_outliers=True), use_two_step_ba=True, min_active_line_observations=4, min_active_ratio_for_deletion=0.2, pixel_uncertainty_threshold=30.0))
- Type:
Structure mapper options (StructureIncrementalMapperOptions, default
- class limap.sfm.StructureIncrementalPipeline
- __init__(self: limap._limap._sfm.StructureIncrementalPipeline, options: limap._limap._sfm.StructureIncrementalPipelineOptions, database_cache: pycolmap._core.DatabaseCache, structure_db_cache: limap._limap._scene.StructureDatabaseCache, reconstruction_manager: limap._limap._scene.HolisticReconstructionManager) None
- check_run_global_refinement(self: limap._limap._sfm.StructureIncrementalPipeline, reconstruction: limap._limap._scene.HolisticReconstruction, ba_prev_num_reg_frames: SupportsInt | SupportsIndex, ba_prev_num_points: SupportsInt | SupportsIndex) bool
- initialize_reconstruction(self: limap._limap._sfm.StructureIncrementalPipeline, mapper: limap._limap._sfm.StructureIncrementalMapper, mapper_options: pycolmap._core.IncrementalMapperOptions, reconstruction: limap._limap._scene.HolisticReconstruction) limap._limap._sfm.StructureIncrementalPipelineStatus
- reconstruct(self: limap._limap._sfm.StructureIncrementalPipeline, mapper: limap._limap._sfm.StructureIncrementalMapper, mapper_options: pycolmap._core.IncrementalMapperOptions, continue_reconstruction: bool, initial_image_pair_callback: collections.abc.Callable[[], None] = None, next_image_callback: collections.abc.Callable[[], None] = None) limap._limap._sfm.StructureIncrementalPipelineStatus
- reconstruct_sub_model(self: limap._limap._sfm.StructureIncrementalPipeline, mapper: limap._limap._sfm.StructureIncrementalMapper, mapper_options: pycolmap._core.IncrementalMapperOptions, reconstruction: limap._limap._scene.HolisticReconstruction, initial_image_pair_callback: collections.abc.Callable[[], None] = None, next_image_callback: collections.abc.Callable[[], None] = None) limap._limap._sfm.StructureIncrementalPipelineStatus
- run(self: limap._limap._sfm.StructureIncrementalPipeline, initial_image_pair_callback: collections.abc.Callable[[], None] = None, next_image_callback: collections.abc.Callable[[], None] = None) None
- property options
- property reconstruction_manager
- class limap.sfm.StructureIncrementalPipelineStatus
Members:
SUCCESS
INTERRUPTED
CONTINUE
STOP
NO_INITIAL_PAIR
BAD_INITIAL_PAIR
- __init__(self: limap._limap._sfm.StructureIncrementalPipelineStatus, value: SupportsInt | SupportsIndex) None
- BAD_INITIAL_PAIR = <StructureIncrementalPipelineStatus.BAD_INITIAL_PAIR: 5>
- CONTINUE = <StructureIncrementalPipelineStatus.CONTINUE: 2>
- INTERRUPTED = <StructureIncrementalPipelineStatus.INTERRUPTED: 1>
- NO_INITIAL_PAIR = <StructureIncrementalPipelineStatus.NO_INITIAL_PAIR: 4>
- STOP = <StructureIncrementalPipelineStatus.STOP: 3>
- SUCCESS = <StructureIncrementalPipelineStatus.SUCCESS: 0>
- StructureIncrementalPipelineStatus.name -> str
- property value
- class limap.sfm.StructureLocalBundleAdjustmentReport
- __init__(*args, **kwargs)
Overloaded function.
__init__(self: limap._limap._sfm.StructureLocalBundleAdjustmentReport) -> None
__init__(self: limap._limap._sfm.StructureLocalBundleAdjustmentReport, kwargs: dict) -> None
__init__(self: limap._limap._sfm.StructureLocalBundleAdjustmentReport, **kwargs) -> None
- mergedict(self: object, kwargs: dict) None
- summary(self: limap._limap._sfm.StructureLocalBundleAdjustmentReport, write_type: bool = False) str
- todict(self: limap._limap._sfm.StructureLocalBundleAdjustmentReport, recursive: bool = True) dict
- property num_adjusted_observations
- Type:
(int, default
- property num_completed_group_observations
- Type:
(int, default
- property num_completed_line_observations
- Type:
(int, default
- property num_completed_observations
- Type:
(int, default
- property num_filtered_observations
- Type:
(int, default
- property num_merged_group_observations
- Type:
(int, default
- property num_merged_line_observations
- Type:
(int, default
- property num_merged_observations
- Type:
(int, default
- class limap.sfm.StructureObservationManager
- __init__(self: limap._limap._sfm.StructureObservationManager, structure_reconstruction: limap._limap._scene.StructureReconstruction) None
- add_group3d(self: limap._limap._sfm.StructureObservationManager, group3d: limap._limap._scene.Group3d) int
Add a new 3D group with its track. Returns the new group3D_id.
- add_group_observation(self: limap._limap._sfm.StructureObservationManager, group3D_id: SupportsInt | SupportsIndex, track_element: pycolmap._core.TrackElement) None
Add a group observation to an existing 3D group.
- add_line3d(self: limap._limap._sfm.StructureObservationManager, line3d: limap._limap._geometry.Line3d) int
Add a new 3D line with its track. Returns the new line3D_id.
- add_line_observation(self: limap._limap._sfm.StructureObservationManager, line3D_id: SupportsInt | SupportsIndex, track_element: pycolmap._core.TrackElement) None
Add a line observation to an existing 3D line.
- classify_line_tracks(self: limap._limap._sfm.StructureObservationManager, min_active_observations: SupportsInt | SupportsIndex) tuple[boost::unordered::unordered_flat_set<unsigned long, std::hash<unsigned long>, std::equal_to<unsigned long>, std::allocator<unsigned long> >, boost::unordered::unordered_flat_set<unsigned long, std::hash<unsigned long>, std::equal_to<unsigned long>, std::allocator<unsigned long> >]
Classify line tracks into (reliable, unreliable) sets.
- delete_group3d(self: limap._limap._sfm.StructureObservationManager, group3D_id: SupportsInt | SupportsIndex) None
Delete a 3D group and clear all its 2D->3D assignments.
- delete_group_observation(self: limap._limap._sfm.StructureObservationManager, image_id: SupportsInt | SupportsIndex, group2D_idx: SupportsInt | SupportsIndex) None
Delete a group observation from its associated 3D group.
- delete_line3d(self: limap._limap._sfm.StructureObservationManager, line3D_id: SupportsInt | SupportsIndex) None
Delete a 3D line and clear all its 2D->3D assignments.
- delete_line_observation(self: limap._limap._sfm.StructureObservationManager, image_id: SupportsInt | SupportsIndex, line2D_idx: SupportsInt | SupportsIndex) None
Delete a line observation from its associated 3D line.
- delete_supportless_line_tracks(self: limap._limap._sfm.StructureObservationManager, min_active_ratio: SupportsFloat | SupportsIndex) int
Hard-delete tracks with active ratio below threshold. Returns number of deleted tracks.
- deregister_frame(self: limap._limap._sfm.StructureObservationManager, frame_id: SupportsInt | SupportsIndex) None
Remove all structure observations (lines + groups) for a frame.
- filter_all_lines3d(self: limap._limap._sfm.StructureObservationManager, max_angular_error: SupportsFloat | SupportsIndex, max_perp_error: SupportsFloat | SupportsIndex) int
Filter line observations by reprojection error. Returns the number of filtered observations.
- filter_lines3d_by_min_visible_views(self: limap._limap._sfm.StructureObservationManager, min_visible_views: SupportsInt | SupportsIndex) None
- filter_lines3d_by_overlap(self: limap._limap._sfm.StructureObservationManager, th_overlap: SupportsFloat | SupportsIndex, min_support_ns: SupportsInt | SupportsIndex) None
- filter_lines3d_by_reprojection(self: limap._limap._sfm.StructureObservationManager, th_angular_2d: SupportsFloat | SupportsIndex, th_perp_2d: SupportsFloat | SupportsIndex, num_outliers: SupportsInt | SupportsIndex = 2) None
- filter_lines3d_by_sensitivity(self: limap._limap._sfm.StructureObservationManager, th_sensitivity_3d: SupportsFloat | SupportsIndex, min_support_ns: SupportsInt | SupportsIndex) None
- is_reliable_track(self: limap._limap._sfm.StructureObservationManager, line3D_id: SupportsInt | SupportsIndex, min_active: SupportsInt | SupportsIndex = 1) bool
Check if a line track is reliable (enough active observations).
- merge_groups3d(self: limap._limap._sfm.StructureObservationManager, group3D_id1: SupportsInt | SupportsIndex, group3D_id2: SupportsInt | SupportsIndex) int
Merge two 3D groups into one. Returns the ID of the merged group.
- merge_lines3d(self: limap._limap._sfm.StructureObservationManager, line3D_id1: SupportsInt | SupportsIndex, line3D_id2: SupportsInt | SupportsIndex) int
Merge two 3D lines into one. Returns the ID of the merged line.
- update_active_supports(self: limap._limap._sfm.StructureObservationManager, max_angular_error: SupportsFloat | SupportsIndex, max_perp_error: SupportsFloat | SupportsIndex) int
Re-evaluate all observations. Can reactivate observations. Returns number of changed observations.
- update_line_observation_activity(self: limap._limap._sfm.StructureObservationManager, max_angular_error: SupportsFloat | SupportsIndex, max_perp_error: SupportsFloat | SupportsIndex) int
Soft filter: mark bad observations as inactive. Returns number of newly inactivated observations.
Filtering, verification and merging
Cleanup applied during and after mapping: dropping structures that lost their support, verifying group associations, and merging duplicated 3D lines.
- class limap.sfm.GroupVerificationOptions
- __init__(*args, **kwargs)
Overloaded function.
__init__(self: limap._limap._sfm.GroupVerificationOptions) -> None
__init__(self: limap._limap._sfm.GroupVerificationOptions, kwargs: dict) -> None
__init__(self: limap._limap._sfm.GroupVerificationOptions, **kwargs) -> None
- mergedict(self: object, kwargs: dict) None
- summary(self: limap._limap._sfm.GroupVerificationOptions, write_type: bool = False) str
- todict(self: limap._limap._sfm.GroupVerificationOptions, recursive: bool = True) dict
- property default_reproj_threshold
3.0)
- Type:
Default reprojection threshold in pixels (float, default
- property default_vp_threshold
10.0)
- Type:
Default VP threshold in degrees (angular error) (float, default
- property filter_outliers
True)
- Type:
Whether to filter outlier associations (bool, default
- property inlier_threshold
-1.0)
- Type:
Threshold for inlier determination (-1 = use default) (float, default
- property min_inlier_ratio
0.5)
- Type:
Minimum inlier ratio to validate (float, default
- property min_num_inliers
- Type:
Minimum inlier count to validate (int, default
- property obs_inlier_ratio
0.8)
- Type:
For multi-view
- Type:
ratio of observations that must pass (float, default
- class limap.sfm.FilterGroupsStats
- __init__(*args, **kwargs)
Overloaded function.
__init__(self: limap._limap._sfm.FilterGroupsStats) -> None
__init__(self: limap._limap._sfm.FilterGroupsStats, kwargs: dict) -> None
__init__(self: limap._limap._sfm.FilterGroupsStats, **kwargs) -> None
- mergedict(self: object, kwargs: dict) None
- summary(self: limap._limap._sfm.FilterGroupsStats, write_type: bool = False) str
- todict(self: limap._limap._sfm.FilterGroupsStats, recursive: bool = True) dict
- property num_associations_marked
- Type:
Number of associations marked inactive (int, default
- property num_associations_purged
- Type:
Number of inactive associations permanently removed (int, default
- property num_groups_failed
- Type:
Number of groups that failed verification (int, default
- property num_groups_passed
- Type:
Number of groups that passed verification (int, default
- property num_groups_processed
- Type:
Total groups processed (int, default
- limap.sfm.filter_group_associations(recon: limap._limap._scene.HolisticReconstruction, options: limap._limap._sfm.GroupVerificationOptions = GroupVerificationOptions(inlier_threshold=-1.0, default_vp_threshold=10.0, default_reproj_threshold=3.0, min_num_inliers=3, min_inlier_ratio=0.5, obs_inlier_ratio=0.8, filter_outliers=True), min_active_for_purge: SupportsInt | SupportsIndex = 10) limap._limap._sfm.FilterGroupsStats
Soft-filter all Group3D associations by error. Marks bad associations inactive, purges for groups with enough active. Never deletes groups. Returns FilterGroupsStats.
- limap.sfm.verify_vp_matches(recon: pycolmap._core.Reconstruction, structure_db: limap._limap._scene.StructureDatabase, threshold_degrees: SupportsFloat | SupportsIndex = 10.0) int
Verify all VP matches in the database and update in place. Returns number of removed matches.
- limap.sfm.verify_plane_matches(recon: pycolmap._core.Reconstruction, structure_db: limap._limap._scene.StructureDatabase, threshold_degrees: SupportsFloat | SupportsIndex = 30.0) int
Verify all plane matches in the database and update in place. Compares camera-frame normals (from Group2d params) transformed to world frame. Returns number of removed matches.
- limap.sfm.delete_supportless_groups(recon: limap._limap._scene.HolisticReconstruction) int
Delete groups with zero active associations or track length < 2. Returns number of groups deleted.
- class limap.sfm.LineMergingOptions
- __init__(*args, **kwargs)
Overloaded function.
__init__(self: limap._limap._sfm.LineMergingOptions) -> None
__init__(self: limap._limap._sfm.LineMergingOptions, kwargs: dict) -> None
__init__(self: limap._limap._sfm.LineMergingOptions, **kwargs) -> None
- check(self: limap._limap._sfm.LineMergingOptions) bool
- mergedict(self: object, kwargs: dict) None
- summary(self: limap._limap._sfm.LineMergingOptions, write_type: bool = False) str
- todict(self: limap._limap._sfm.LineMergingOptions, recursive: bool = True) dict
- property enable_remerge
True)
- Type:
(bool, default
- property filtering2d_th_angular_2d
8.0)
- Type:
(float, default
- property filtering2d_th_perp_2d
5.0)
- Type:
(float, default
- property linker2d_options
LineLinker2dOptions(score_th=0.5, th_angle=5.0, th_overlap=0.05, th_smartangle=1.0, th_smartoverlap=0.2, th_perp=2.0, th_innerseg=2.0, use_angle=True, use_overlap=True, use_smartangle=True, use_perp=True, use_innerseg=False))
- Type:
(LineLinker2dOptions, default
- property linker3d_options
LineLinker3dOptions(score_th=0.5, th_angle=8.0, th_overlap=0.01, th_smartangle=1.0, th_smartoverlap=0.1, th_perp=0.75, th_innerseg=0.75, use_angle=True, use_overlap=True, use_smartangle=True, use_perp=False, use_innerseg=True))
- Type:
(LineLinker3dOptions, default
- property linker3d_remerge_options
LineLinker3dOptions(score_th=0.5, th_angle=5.0, th_overlap=0.001, th_smartangle=1.0, th_smartoverlap=0.1, th_perp=0.5, th_innerseg=0.5, use_angle=True, use_overlap=True, use_smartangle=True, use_perp=False, use_innerseg=True))
- Type:
(LineLinker3dOptions, default
- property min_visible_views
- Type:
(int, default
- property num_outliers_aggregator
- Type:
(int, default
- property num_threads
-1)
- Type:
(int, default
- limap.sfm.merge_fitted_lines_3d(recon: limap._limap._scene.HolisticReconstruction, neighbors: collections.abc.Mapping[SupportsInt | SupportsIndex, collections.abc.Sequence[SupportsInt | SupportsIndex]], options: limap._limap._sfm.LineMergingOptions) None
Merge pre-fitted Line3d based on 2D+3D similarity. Modifies recon in-place.