| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783 |
- """
- This library provides a collection of minimal solvers for camera pose estimation.
- """
- from __future__ import annotations
- import collections.abc
- import numpy
- import numpy.typing
- import typing
- __all__: list[str] = [
- "BundleOptions",
- "Camera",
- "CameraPose",
- "Image",
- "ImagePair",
- "PairwiseMatches",
- "RansacOptions",
- "essential_matrix_5pt",
- "essential_matrix_8pt",
- "estimate_1D_radial_absolute_pose",
- "estimate_absolute_pose",
- "estimate_absolute_pose_pnpl",
- "estimate_fundamental",
- "estimate_generalized_absolute_pose",
- "estimate_generalized_relative_pose",
- "estimate_homography",
- "estimate_hybrid_pose",
- "estimate_relative_pose",
- "estimate_shared_focal_relative_pose",
- "focals_from_fundamental",
- "focals_from_fundamental_iterative",
- "gen_relpose_6pt",
- "gen_relpose_upright_4pt",
- "gp3p",
- "gp4ps",
- "gp4ps_camposeco",
- "gp4ps_kukelova",
- "motion_from_homography",
- "p1p2ll",
- "p2p1ll",
- "p2p2pl",
- "p3ll",
- "p3p",
- "p4pf",
- "p5lp_radial",
- "p6lp",
- "refine_absolute_pose",
- "refine_absolute_pose_pnpl",
- "refine_fundamental",
- "refine_generalized_absolute_pose",
- "refine_generalized_relative_pose",
- "refine_homography",
- "refine_relative_pose",
- "relpose_5pt",
- "relpose_8pt",
- "relpose_upright_3pt",
- "relpose_upright_planar_2pt",
- "relpose_upright_planar_3pt",
- "shared_focal_relpose_6pt",
- "ugp2p",
- "ugp3ps",
- "ugp4pl",
- "up1p2pl",
- "up2p",
- "up4pl",
- ]
- class Camera:
- @typing.overload
- def __init__(self) -> None: ...
- @typing.overload
- def __init__(
- self,
- arg0: str,
- arg1: collections.abc.Sequence[typing.SupportsFloat],
- arg2: typing.SupportsInt,
- arg3: typing.SupportsInt,
- ) -> None: ...
- def __repr__(self) -> str: ...
- def focal(self) -> float:
- """
- Returns the camera focal length.
- """
- def focal_x(self) -> float:
- """
- Returns the camera focal_x.
- """
- def focal_y(self) -> float:
- """
- Returns the camera focal_y.
- """
- def initialize_from_txt(self, arg0: str) -> int:
- """
- Initialize camera from a cameras.txt line
- """
- def model_name(self) -> str:
- """
- Returns the camera model name.
- """
- def principal_point(
- self,
- ) -> typing.Annotated[numpy.typing.NDArray[numpy.float64], "[2, 1]"]:
- """
- Returns the camera principal point.
- """
- def project(
- self, arg0: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"]
- ) -> typing.Annotated[numpy.typing.NDArray[numpy.float64], "[m, 2]"]: ...
- def project_with_jac(
- self, arg0: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"]
- ) -> tuple[
- typing.Annotated[numpy.typing.NDArray[numpy.float64], "[m, 2]"],
- list[typing.Annotated[numpy.typing.NDArray[numpy.float64], "[2, 2]"]],
- ]: ...
- def unproject(
- self, arg0: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"]
- ) -> typing.Annotated[numpy.typing.NDArray[numpy.float64], "[m, 2]"]: ...
- @property
- def height(self) -> int: ...
- @height.setter
- def height(self, arg0: typing.SupportsInt) -> None: ...
- @property
- def model_id(self) -> int: ...
- @model_id.setter
- def model_id(self, arg0: typing.SupportsInt) -> None: ...
- @property
- def params(self) -> list[float]: ...
- @params.setter
- def params(self, arg0: collections.abc.Sequence[typing.SupportsFloat]) -> None: ...
- @property
- def width(self) -> int: ...
- @width.setter
- def width(self, arg0: typing.SupportsInt) -> None: ...
- class CameraPose:
- def __init__(self) -> None: ...
- def __repr__(self) -> str: ...
- def center(self) -> typing.Annotated[numpy.typing.NDArray[numpy.float64], "[3, 1]"]:
- """
- Returns the camera center (c=-R^T*t).
- """
- @property
- def R(self) -> typing.Annotated[numpy.typing.NDArray[numpy.float64], "[3, 3]"]: ...
- @R.setter
- def R(
- self, arg1: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[3, 3]"]
- ) -> None: ...
- @property
- def Rt(self) -> typing.Annotated[numpy.typing.NDArray[numpy.float64], "[3, 4]"]: ...
- @Rt.setter
- def Rt(
- self, arg1: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[3, 4]"]
- ) -> None: ...
- @property
- def q(self) -> typing.Annotated[numpy.typing.NDArray[numpy.float64], "[4, 1]"]: ...
- @q.setter
- def q(
- self, arg0: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[4, 1]"]
- ) -> None: ...
- @property
- def t(self) -> typing.Annotated[numpy.typing.NDArray[numpy.float64], "[3, 1]"]: ...
- @t.setter
- def t(
- self, arg0: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[3, 1]"]
- ) -> None: ...
- class Image:
- camera: Camera
- pose: CameraPose
- def __init__(self) -> None: ...
- def __repr__(self) -> str: ...
- class ImagePair:
- camera1: Camera
- camera2: Camera
- pose: CameraPose
- def __init__(self) -> None: ...
- def __repr__(self) -> str: ...
- class PairwiseMatches:
- def __init__(self) -> None: ...
- def __repr__(self) -> str: ...
- @property
- def cam_id1(self) -> int: ...
- @cam_id1.setter
- def cam_id1(self, arg0: typing.SupportsInt) -> None: ...
- @property
- def cam_id2(self) -> int: ...
- @cam_id2.setter
- def cam_id2(self, arg0: typing.SupportsInt) -> None: ...
- @property
- def x1(self) -> typing.Annotated[numpy.typing.NDArray[numpy.float64], "[m, 2]"]: ...
- @x1.setter
- def x1(
- self, arg0: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"]
- ) -> None: ...
- @property
- def x2(self) -> typing.Annotated[numpy.typing.NDArray[numpy.float64], "[m, 2]"]: ...
- @x2.setter
- def x2(
- self, arg0: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"]
- ) -> None: ...
- def BundleOptions(opt: dict = {}) -> dict:
- """
- Options for non-linear refinement.
- """
- def RansacOptions(opt: dict = {}) -> dict:
- """
- Options for RANSAC.
- """
- def essential_matrix_5pt(
- x1: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- x2: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- ) -> list[typing.Annotated[numpy.typing.NDArray[numpy.float64], "[3, 3]"]]: ...
- def essential_matrix_8pt(
- x1: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- x2: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- ) -> typing.Annotated[numpy.typing.NDArray[numpy.float64], "[3, 3]"]: ...
- def estimate_1D_radial_absolute_pose(
- points2D: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- points3D: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- ransac_opt: dict = {},
- bundle_opt: dict = {},
- initial_pose: CameraPose | None = None,
- ) -> tuple[CameraPose, dict]:
- """
- Absolute pose estimation for the 1D radial camera model with non-linear refinement.
- """
- @typing.overload
- def estimate_absolute_pose(
- points2D: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- points3D: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- camera: Camera,
- ransac_opt: dict = {},
- bundle_opt: dict = {},
- initial_pose: CameraPose | None = None,
- ) -> tuple[CameraPose, dict]:
- """
- Absolute pose estimation with non-linear refinement.
- """
- @typing.overload
- def estimate_absolute_pose(
- points2D: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- points3D: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- camera_dict: dict,
- ransac_opt: dict = {},
- bundle_opt: dict = {},
- initial_pose: CameraPose | None = None,
- ) -> tuple[CameraPose, dict]:
- """
- Absolute pose estimation with non-linear refinement.
- """
- @typing.overload
- def estimate_absolute_pose_pnpl(
- points2D: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- points3D: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- lines2D_1: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- lines2D_2: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- lines3D_1: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- lines3D_2: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- camera: Camera,
- ransac_opt: dict = {},
- bundle_opt: dict = {},
- initial_pose: CameraPose | None = None,
- ) -> tuple[CameraPose, dict]:
- """
- Absolute pose estimation with non-linear refinement from points and lines.
- """
- @typing.overload
- def estimate_absolute_pose_pnpl(
- points2D: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- points3D: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- lines2D_1: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- lines2D_2: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- lines3D_1: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- lines3D_2: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- camera_dict: dict,
- ransac_opt: dict = {},
- bundle_opt: dict = {},
- initial_pose: CameraPose | None = None,
- ) -> tuple[CameraPose, dict]:
- """
- Absolute pose estimation with non-linear refinement from points and lines.
- """
- def estimate_fundamental(
- points2D_1: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- points2D_2: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- ransac_opt: dict = {},
- bundle_opt: dict = {},
- initial_F: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[3, 3]"]
- | None = None,
- ) -> tuple[typing.Annotated[numpy.typing.NDArray[numpy.float64], "[3, 3]"], dict]:
- """
- Fundamental matrix estimation with non-linear refinement. Note: if you have known intrinsics you should use estimate_relative_pose instead!
- """
- @typing.overload
- def estimate_generalized_absolute_pose(
- points2D: collections.abc.Sequence[
- typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"]
- ],
- points3D: collections.abc.Sequence[
- typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"]
- ],
- camera_ext: collections.abc.Sequence[CameraPose],
- cameras: collections.abc.Sequence[Camera],
- ransac_opt: dict = {},
- bundle_opt: dict = {},
- initial_pose: CameraPose | None = None,
- ) -> tuple[CameraPose, dict]:
- """
- Generalized absolute pose estimation with non-linear refinement.
- """
- @typing.overload
- def estimate_generalized_absolute_pose(
- points2D: collections.abc.Sequence[
- typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"]
- ],
- points3D: collections.abc.Sequence[
- typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"]
- ],
- camera_ext: collections.abc.Sequence[CameraPose],
- camera_dicts: collections.abc.Sequence[dict],
- ransac_opt: dict = {},
- bundle_opt: dict = {},
- initial_pose: CameraPose | None = None,
- ) -> tuple[CameraPose, dict]:
- """
- Generalized absolute pose estimation with non-linear refinement.
- """
- @typing.overload
- def estimate_generalized_relative_pose(
- matches: collections.abc.Sequence[PairwiseMatches],
- camera1_ext: collections.abc.Sequence[CameraPose],
- cameras1: collections.abc.Sequence[Camera],
- camera2_ext: collections.abc.Sequence[CameraPose],
- cameras2: collections.abc.Sequence[Camera],
- ransac_opt: dict = {},
- bundle_opt: dict = {},
- initial_pose: CameraPose | None = None,
- ) -> tuple[CameraPose, dict]:
- """
- Generalized relative pose estimation with non-linear refinement.
- """
- @typing.overload
- def estimate_generalized_relative_pose(
- matches: collections.abc.Sequence[PairwiseMatches],
- camera1_ext: collections.abc.Sequence[CameraPose],
- camera1_dict: collections.abc.Sequence[dict],
- camera2_ext: collections.abc.Sequence[CameraPose],
- camera2_dict: collections.abc.Sequence[dict],
- ransac_opt: dict = {},
- bundle_opt: dict = {},
- initial_pose: CameraPose | None = None,
- ) -> tuple[CameraPose, dict]:
- """
- Generalized relative pose estimation with non-linear refinement.
- """
- def estimate_homography(
- points2D_1: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- points2D_2: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- ransac_opt: dict = {},
- bundle_opt: dict = {},
- initial_H: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[3, 3]"]
- | None = None,
- ) -> tuple[typing.Annotated[numpy.typing.NDArray[numpy.float64], "[3, 3]"], dict]:
- """
- Homography matrix estimation with non-linear refinement.
- """
- @typing.overload
- def estimate_hybrid_pose(
- points2D: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- points3D: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- matches_2D_2D: collections.abc.Sequence[PairwiseMatches],
- camera: Camera,
- map_ext: collections.abc.Sequence[CameraPose],
- map_cameras: collections.abc.Sequence[Camera],
- ransac_opt: dict = {},
- bundle_opt: dict = {},
- initial_pose: CameraPose | None = None,
- ) -> tuple[CameraPose, dict]:
- """
- Hybrid camera pose estimation (both 2D-3D and 2D-2D correspondences to the map) with non-linear refinement.
- """
- @typing.overload
- def estimate_hybrid_pose(
- points2D: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- points3D: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- matches_2D_2D: collections.abc.Sequence[PairwiseMatches],
- camera_dict: dict,
- map_ext: collections.abc.Sequence[CameraPose],
- map_camera_dicts: collections.abc.Sequence[dict],
- ransac_opt: dict = {},
- bundle_opt: dict = {},
- initial_pose: CameraPose | None = None,
- ) -> tuple[CameraPose, dict]:
- """
- Hybrid camera pose estimation (both 2D-3D and 2D-2D correspondences to the map) with non-linear refinement.
- """
- @typing.overload
- def estimate_relative_pose(
- points2D_1: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- points2D_2: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- camera1: Camera,
- camera2: Camera,
- ransac_opt: dict = {},
- bundle_opt: dict = {},
- initial_pose: CameraPose | None = None,
- ) -> tuple[CameraPose, dict]:
- """
- Relative pose estimation with non-linear refinement.
- """
- @typing.overload
- def estimate_relative_pose(
- points2D_1: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- points2D_2: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- camera1_dict: dict,
- camera2_dict: dict,
- ransac_opt: dict = {},
- bundle_opt: dict = {},
- initial_pose: CameraPose | None = None,
- ) -> tuple[CameraPose, dict]:
- """
- Relative pose estimation with non-linear refinement.
- """
- def estimate_shared_focal_relative_pose(
- points2D_1: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- points2D_2: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- pp: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[2, 1]"] = ...,
- ransac_opt: dict = {},
- bundle_opt: dict = {},
- initial_image_pair: ImagePair | None = None,
- ) -> tuple[ImagePair, dict]:
- """
- Relative pose estimation with unknown equal focal lengths with non-linear refinement.
- """
- def focals_from_fundamental(
- F: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[3, 3]"],
- pp1: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[2, 1]"],
- pp2: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[2, 1]"],
- ) -> tuple[Camera, Camera]: ...
- @typing.overload
- def focals_from_fundamental_iterative(
- F: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[3, 3]"],
- camera1: Camera,
- camera2: Camera,
- max_iters: typing.SupportsInt = 50,
- weights: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[4, 1]"] = ...,
- ) -> tuple[Camera, Camera, int]: ...
- @typing.overload
- def focals_from_fundamental_iterative(
- F: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[3, 3]"],
- camera1_dict: dict,
- camera2_dict: dict,
- max_iters: typing.SupportsInt = 50,
- weights: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[4, 1]"] = ...,
- ) -> tuple[Camera, Camera, int]: ...
- def gen_relpose_6pt(
- p1: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- x1: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- p2: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- x2: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- ) -> list[CameraPose]: ...
- def gen_relpose_upright_4pt(
- p1: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- x1: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- p2: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- x2: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- ) -> list[CameraPose]: ...
- def gp3p(
- p: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- x: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- X: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- ) -> list[CameraPose]: ...
- def gp4ps(
- p: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- x: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- X: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- filter_solutions: bool,
- ) -> tuple[list[CameraPose], list[float]]: ...
- def gp4ps_camposeco(
- p: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- x: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- X: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- ) -> tuple[list[CameraPose], list[float]]: ...
- def gp4ps_kukelova(
- p: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- x: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- X: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- filter_solutions: bool,
- ) -> tuple[list[CameraPose], list[float]]: ...
- def motion_from_homography(
- H: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[3, 3]"],
- ) -> tuple[
- list[CameraPose], typing.Annotated[numpy.typing.NDArray[numpy.float64], "[m, 3]"]
- ]: ...
- def p1p2ll(
- xp: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- Xp: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- l: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- X: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- V: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- ) -> list[CameraPose]: ...
- def p2p1ll(
- xp: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- Xp: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- l: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- X: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- V: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- ) -> list[CameraPose]: ...
- def p2p2pl(
- xp: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- Xp: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- x: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- X: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- V: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- ) -> list[CameraPose]: ...
- def p3ll(
- l: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- X: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- V: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- ) -> list[CameraPose]: ...
- def p3p(
- x: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- X: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- ) -> list[CameraPose]: ...
- def p4pf(
- x: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- X: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- filter_solutions: bool,
- ) -> tuple[list[CameraPose], list[float]]: ...
- def p5lp_radial(
- l: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- X: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- ) -> list[CameraPose]: ...
- def p6lp(
- l: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- X: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- ) -> list[CameraPose]: ...
- @typing.overload
- def refine_absolute_pose(
- points2D: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- points3D: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- initial_pose: CameraPose,
- camera: Camera,
- bundle_options: dict = {},
- ) -> tuple[CameraPose, dict]:
- """
- Absolute pose non-linear refinement.
- """
- @typing.overload
- def refine_absolute_pose(
- points2D: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- points3D: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- initial_pose: CameraPose,
- camera_dict: dict,
- bundle_options: dict = {},
- ) -> tuple[CameraPose, dict]:
- """
- Absolute pose non-linear refinement.
- """
- @typing.overload
- def refine_absolute_pose_pnpl(
- points2D: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- points3D: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- lines2D_1: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- lines2D_2: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- lines3D_1: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- lines3D_2: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- initial_pose: CameraPose,
- camera: Camera,
- bundle_opt: dict = {},
- line_bundle_opt: dict = {},
- ) -> tuple[CameraPose, dict]:
- """
- Absolute pose non-linear refinement from points and lines.
- """
- @typing.overload
- def refine_absolute_pose_pnpl(
- points2D: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- points3D: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- lines2D_1: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- lines2D_2: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- lines3D_1: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- lines3D_2: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- initial_pose: CameraPose,
- camera_dict: dict,
- bundle_opt: dict = {},
- line_bundle_opt: dict = {},
- ) -> tuple[CameraPose, dict]:
- """
- Absolute pose non-linear refinement from points and lines.
- """
- def refine_fundamental(
- points2D_1: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- points2D_2: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- initial_F: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[3, 3]"],
- bundle_options: dict = {},
- ) -> tuple[typing.Annotated[numpy.typing.NDArray[numpy.float64], "[3, 3]"], dict]:
- """
- Fundamental matrix non-linear refinement.
- """
- @typing.overload
- def refine_generalized_absolute_pose(
- points2D: collections.abc.Sequence[
- typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"]
- ],
- points3D: collections.abc.Sequence[
- typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"]
- ],
- initial_pose: CameraPose,
- camera_ext: collections.abc.Sequence[CameraPose],
- cameras: collections.abc.Sequence[Camera],
- bundle_opt: dict = {},
- ) -> tuple[CameraPose, dict]:
- """
- Generalized absolute pose non-linear refinement.
- """
- @typing.overload
- def refine_generalized_absolute_pose(
- points2D: collections.abc.Sequence[
- typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"]
- ],
- points3D: collections.abc.Sequence[
- typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"]
- ],
- initial_pose: CameraPose,
- camera_ext: collections.abc.Sequence[CameraPose],
- camera_dicts: collections.abc.Sequence[dict],
- bundle_opt: dict = {},
- ) -> tuple[CameraPose, dict]:
- """
- Generalized absolute pose non-linear refinement.
- """
- @typing.overload
- def refine_generalized_relative_pose(
- matches: collections.abc.Sequence[PairwiseMatches],
- initial_pose: CameraPose,
- camera1_ext: collections.abc.Sequence[CameraPose],
- cameras1: collections.abc.Sequence[Camera],
- camera2_ext: collections.abc.Sequence[CameraPose],
- cameras2: collections.abc.Sequence[Camera],
- bundle_opt: dict = {},
- ) -> tuple[CameraPose, dict]:
- """
- Generalized relative pose non-linear refinement.
- """
- @typing.overload
- def refine_generalized_relative_pose(
- matches: collections.abc.Sequence[PairwiseMatches],
- initial_pose: CameraPose,
- camera1_ext: collections.abc.Sequence[CameraPose],
- camera1_dict: collections.abc.Sequence[dict],
- camera2_ext: collections.abc.Sequence[CameraPose],
- camera2_dict: collections.abc.Sequence[dict],
- bundle_opt: dict = {},
- ) -> tuple[CameraPose, dict]:
- """
- Generalized relative pose non-linear refinement.
- """
- def refine_homography(
- points2D_1: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- points2D_2: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- initial_H: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[3, 3]"],
- bundle_options: dict = {},
- ) -> tuple[typing.Annotated[numpy.typing.NDArray[numpy.float64], "[3, 3]"], dict]:
- """
- Homography non-linear refinement.
- """
- @typing.overload
- def refine_relative_pose(
- points2D_1: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- points2D_2: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- initial_pose: CameraPose,
- camera1: Camera,
- camera2: Camera,
- bundle_options: dict = {},
- ) -> tuple[CameraPose, dict]:
- """
- Relative pose non-linear refinement.
- """
- @typing.overload
- def refine_relative_pose(
- points2D_1: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- points2D_2: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 2]"],
- initial_pose: CameraPose,
- camera1_dict: dict,
- camera2_dict: dict,
- bundle_options: dict = {},
- ) -> tuple[CameraPose, dict]:
- """
- Relative pose non-linear refinement.
- """
- def relpose_5pt(
- x1: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- x2: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- ) -> list[CameraPose]: ...
- def relpose_8pt(
- x1: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- x2: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- ) -> list[CameraPose]: ...
- def relpose_upright_3pt(
- x1: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- x2: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- ) -> list[CameraPose]: ...
- def relpose_upright_planar_2pt(
- x1: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- x2: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- ) -> list[CameraPose]: ...
- def relpose_upright_planar_3pt(
- x1: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- x2: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- ) -> list[CameraPose]: ...
- def shared_focal_relpose_6pt(
- x1: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- x2: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- ) -> list[ImagePair]: ...
- def ugp2p(
- p: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- x: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- X: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- ) -> list[CameraPose]: ...
- def ugp3ps(
- p: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- x: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- X: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- filter_solutions: bool,
- ) -> tuple[list[CameraPose], list[float]]: ...
- def ugp4pl(
- p: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- x: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- X: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- V: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- ) -> list[CameraPose]: ...
- def up1p2pl(
- xp: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- Xp: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- x: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- X: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- V: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- ) -> list[CameraPose]: ...
- def up2p(
- x: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- X: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- ) -> list[CameraPose]: ...
- def up4pl(
- x: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- X: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- V: typing.Annotated[numpy.typing.ArrayLike, numpy.float64, "[m, 3]"],
- ) -> list[CameraPose]: ...
- __version__: str = "2.0.5"
|