pub(crate) mod calibrate;
pub(crate) mod fit;
pub(crate) mod polynomial;
pub(crate) mod radial;
pub use calibrate::{calibrate_camera, CalibrateConfig, CalibrateResult, DistortionModelType};
pub use polynomial::{num_coeffs, PolynomialDistortion};
pub use radial::RadialDistortion;
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, Default)]
pub enum Distortion {
#[default]
None,
Radial(RadialDistortion),
Polynomial(PolynomialDistortion),
}
impl Distortion {
pub fn undistort(&self, x: f64, y: f64) -> (f64, f64) {
match self {
Distortion::None => (x, y),
Distortion::Radial(r) => r.undistort(x, y),
Distortion::Polynomial(p) => p.undistort(x, y),
}
}
pub fn distort(&self, x: f64, y: f64) -> (f64, f64) {
match self {
Distortion::None => (x, y),
Distortion::Radial(r) => r.distort(x, y),
Distortion::Polynomial(p) => p.distort(x, y),
}
}
pub fn is_none(&self) -> bool {
matches!(self, Distortion::None)
}
}