kornia_pnp/
lib.rs

1#![deny(missing_docs)]
2#![doc = env!("CARGO_PKG_DESCRIPTION")]
3
4/// EPnP solver implementation
5pub mod epnp;
6
7/// Common data types shared across PnP solvers.
8pub mod pnp;
9
10/// RANSAC for robust PnP pose estimation.
11pub mod ransac;
12
13pub use epnp::{EPnP, EPnPParams};
14use kornia_imgproc::calibration::distortion::PolynomialDistortion;
15pub use pnp::{PnPError, PnPResult, PnPSolver};
16pub use ransac::{solve_pnp_ransac, PnPRansacError, PnPRansacResult, RansacParams};
17
18mod ops;
19
20/// Enumeration of the Perspective-n-Point algorithms available in this crate.
21#[derive(Debug, Clone)]
22pub enum PnPMethod {
23    /// Efficient PnP solver with a user-supplied parameter object.
24    EPnP(EPnPParams),
25    /// Efficient PnP solver with the crate's default parameters.
26    EPnPDefault,
27    // Placeholder for future solvers such as P3P, DLS, etc.
28}
29
30/// Dispatch function that routes to the chosen PnP solver.
31pub fn solve_pnp(
32    world: &[[f32; 3]],
33    image: &[[f32; 2]],
34    k: &[[f32; 3]; 3],
35    distortion: Option<&PolynomialDistortion>,
36    method: PnPMethod,
37) -> Result<PnPResult, PnPError> {
38    match method {
39        PnPMethod::EPnP(params) => EPnP::solve(world, image, k, distortion, &params),
40        PnPMethod::EPnPDefault => EPnP::solve(world, image, k, distortion, &EPnPParams::default()),
41    }
42}