Calibration Library 1.0.0
A C++ library for camera calibration and vision-related geometric transformations
Loading...
Searching...
No Matches
calib Namespace Reference

Linear multi-camera extrinsics initialisation (DLT) More...

Namespaces

namespace  detail
 
namespace  pipeline
 

Classes

struct  AxXbResidual
 
struct  BrownConrady
 
struct  BundleBlocks
 
struct  BundleObservation
 Single observation used for hand-eye calibration. More...
 
struct  BundleOptions
 Options controlling the hand-eye calibration optimisation. More...
 
struct  BundleReprojResidual
 
struct  BundleResult
 Result returned by hand-eye calibration. More...
 
struct  CalibrationBounds
 
struct  CalibVPResidual
 
struct  CameraMatrixT
 
struct  CameraTraits
 Type traits template for camera model implementations. More...
 
struct  CameraTraits< PinholeCamera< DistortionT > >
 
struct  CameraTraits< ScheimpflugCamera< CameraT > >
 
struct  DistortionWithResiduals
 
struct  DualBrownConrady
 
struct  DualDistortionWithResiduals
 
struct  ExtrinsicBlocks
 
struct  ExtrinsicOptimizationResult
 
struct  ExtrinsicOptions
 
struct  ExtrinsicPoses
 
struct  ExtrinsicResidual
 
struct  HandeyeBlocks
 
struct  HandeyeResult
 
struct  HomographyBlocks
 
struct  HomographyEstimator
 
struct  HomographyResidual
 
struct  HomographyResult
 
struct  IntrinsicBlocks
 
struct  IntrinsicResidual
 
struct  IntrinsicsEstimateResult
 Result of linear intrinsic estimation. More...
 
struct  IntrinsicsEstimOptions
 Options for linear intrinsic estimation from planar views. More...
 
struct  IntrinsicsOptimizationResult
 
struct  IntrinsicsOptimOptions
 
struct  LinearSystem
 
struct  LineScanCalibrationResult
 
struct  LineScanPlaneFitOptions
 
struct  LineScanView
 
struct  MotionPair
 Motion pair structure for hand-eye calibration. More...
 
struct  Observation
 Observation structure for distortion parameter estimation. More...
 
struct  OptimizeHomographyResult
 
struct  OptimResult
 
struct  ParamBlock
 
class  PinholeCamera
 Pinhole camera model with intrinsics and distortion correction. More...
 
struct  PlanarObservation
 
struct  PlanarPoseBlocks
 
struct  PlanarPoseOptions
 
struct  PlanarPoseResult
 
struct  PlanarPoseVPResidual
 
struct  PlaneRansacResult
 
struct  PoseFromHResult
 Recover target->camera pose (R,t) from camera matrix K and planar homography H. More...
 
struct  ProblemParamBlocks
 
struct  RansacOptions
 
struct  RansacResult
 
struct  ScheimpflugAngles
 
struct  ScheimpflugCamera
 Camera model with a tilted sensor plane (Scheimpflug configuration). More...
 
class  StreamCapture
 
struct  ViewEstimateData
 

Concepts

concept  serializable_aggregate
 
concept  camera_model
 Concept defining the interface requirements for camera model implementations.
 
concept  distortion_model
 Concept defining the interface for lens distortion models.
 

Typedefs

using MulticamPlanarView = std::vector< PlanarView >
 
using PlanarView = std::vector< PlanarObservation >
 
using CameraMatrix = CameraMatrixT< double >
 
using BrownConradyd = BrownConrady< double >
 
using DualDistortion = DualBrownConrady< double >
 
template<distortion_model DistortionT>
using Camera = PinholeCamera< DistortionT >
 
using Model = HomographyEstimator::Model
 
using Datum = HomographyEstimator::Datum
 
using Vec2 = Eigen::Vector2d
 
using Mat3 = Eigen::Matrix3d
 
using HomographyParams = std::array< double, 8 >
 
using Pose6 = Eigen::Matrix< double, 6, 1 >
 

Enumerations

enum class  OptimizerType { DEFAULT , SPARSE_SCHUR , DENSE_SCHUR , DENSE_QR }
 

Functions

auto sanitize_intrinsics (const CameraMatrix &kmtx, const std::optional< CalibrationBounds > &bounds) -> std::pair< CameraMatrix, bool >
 
template<class Estimator >
auto ransac (const std::vector< typename Estimator::Datum > &data, const RansacOptions &opts={}) -> RansacResult< typename Estimator::Model >
 
Eigen::Matrix3d project_to_so3 (const Eigen::Matrix3d &rmtx)
 
Eigen::Matrix3d skew (const Eigen::Vector3d &vec)
 
Eigen::Vector3d log_so3 (const Eigen::Matrix3d &rot_in)
 
Eigen::Matrix3d exp_so3 (const Eigen::Vector3d &wvec)
 
Eigen::VectorXd solve_llsq (const Eigen::MatrixXd &amtx, const Eigen::VectorXd &bvec)
 
template<class Mat , class Vec >
Eigen::VectorXd ridge_llsq (const Mat &amtx, const Vec &bvec, double lambda=1e-10)
 
std::array< double, 6 > pose_to_array (const Eigen::Isometry3d &pose)
 
Eigen::Isometry3d average_isometries (const std::vector< Eigen::Isometry3d > &poses)
 
template<camera_model CameraT>
auto estimate_extrinsic_dlt (const std::vector< MulticamPlanarView > &views, const std::vector< CameraT > &cameras) -> ExtrinsicPoses
 
auto build_all_pairs (const std::vector< Eigen::Isometry3d > &base_se3_gripper, const std::vector< Eigen::Isometry3d > &cam_se3_target, double min_angle_deg=1.0, bool reject_axis_parallel=true, double axis_parallel_eps=1e-3) -> std::vector< MotionPair >
 Generate all valid motion pairs from pose sequences.
 
auto estimate_handeye_dlt (const std::vector< Eigen::Isometry3d > &base_se3_gripper, const std::vector< Eigen::Isometry3d > &camera_se3_target, double min_angle_deg=1.0) -> Eigen::Isometry3d
 Estimates the hand-eye transformation using the Tsai-Lenz algorithm with all pairs of input transformations and weighted averaging.
 
auto estimate_homography (const PlanarView &data, std::optional< RansacOptions > ransac_opts=std::nullopt) -> HomographyResult
 
auto estimate_intrinsics (const std::vector< PlanarView > &views, const IntrinsicsEstimOptions &opts={}) -> IntrinsicsEstimateResult
 Estimate camera intrinsics from planar views using a linear method.
 
auto estimate_intrinsics_linear (const std::vector< Observation< double > > &observations, std::optional< CalibrationBounds > bounds=std::nullopt, bool use_skew=false) -> std::optional< CameraMatrix >
 Linear estimate with normalized observations.
 
auto estimate_intrinsics_linear_iterative (const std::vector< Observation< double > > &observations, int num_radial, int max_iterations=k_default_max_iterations, bool use_skew=false) -> std::optional< PinholeCamera< BrownConradyd > >
 
void validate_observations (const std::vector< LineScanView > &views)
 
Eigen::Matrix3d build_plane_homography (const Eigen::Vector4d &plane)
 
template<camera_model CameraT>
std::vector< Eigen::Vector3d > points_from_view (LineScanView view, const CameraT &camera)
 
double plane_rms (const std::vector< Eigen::Vector3d > &pts, const Eigen::Vector4d &plane)
 
template<camera_model CameraT>
LineScanCalibrationResult calibrate_laser_plane (const std::vector< LineScanView > &views, const CameraT &camera, const LineScanPlaneFitOptions &opts={})
 
auto pose_from_homography_normalized (const Eigen::Matrix3d &hmtx) -> Eigen::Isometry3d
 
auto estimate_planar_pose (PlanarView view, const CameraMatrix &intrinsics) -> Eigen::Isometry3d
 
template<camera_model CameraT>
auto estimate_planar_pose (PlanarView view, const CameraT &camera) -> Eigen::Isometry3d
 
auto fit_plane_svd (const std::vector< Eigen::Vector3d > &pts) -> Eigen::Vector4d
 
auto fit_plane_ransac (const std::vector< Eigen::Vector3d > &pts, const RansacOptions &opts={}) -> PlaneRansacResult
 
auto pose_from_homography (const CameraMatrix &kmtx, const Eigen::Matrix3d &hmtx) -> PoseFromHResult
 Estimates the camera pose from a homography matrix.
 
auto homography_consistency_fro (const CameraMatrix &kmtx, const Eigen::Isometry3d &c_se3_t, const Eigen::Matrix3d &hmtx) -> double
 A quick consistency check.
 
auto zhang_intrinsics_from_hs (const std::vector< HomographyResult > &hs) -> std::optional< CameraMatrix >
 
template<camera_model CameraT>
auto optimize_bundle (const std::vector< BundleObservation > &observations, const std::vector< CameraT > &initial_cameras, const std::vector< Eigen::Isometry3d > &init_g_se3_c, const Eigen::Isometry3d &init_b_se3_t, const BundleOptions &opts={}) -> BundleResult< CameraT >
 Perform bundle-adjustment style optimisation of the hand-eye calibration problem.
 
template<camera_model CameraT>
auto optimize_extrinsics (const std::vector< MulticamPlanarView > &views, const std::vector< CameraT > &init_cameras, const std::vector< Eigen::Isometry3d > &init_c_se3_r, const std::vector< Eigen::Isometry3d > &init_r_se3_t, const ExtrinsicOptions &opts={}) -> ExtrinsicOptimizationResult< CameraT >
 
auto optimize_handeye (const std::vector< Eigen::Isometry3d > &base_se3_gripper, const std::vector< Eigen::Isometry3d > &camera_se3_target, const Eigen::Isometry3d &init_gripper_se3_ref, const OptimOptions &options={}) -> HandeyeResult
 Refines the hand-eye calibration transformation using an optimization process.
 
auto estimate_and_optimize_handeye (const std::vector< Eigen::Isometry3d > &base_se3_gripper, const std::vector< Eigen::Isometry3d > &camera_se3_target, double min_angle_deg=1.0, const OptimOptions &options={}) -> HandeyeResult
 Estimates and refines the hand-eye transformation.
 
auto optimize_homography (const PlanarView &data, const Eigen::Matrix3d &init_h, const OptimOptions &options={}) -> OptimizeHomographyResult
 
auto optimize_intrinsics_semidlt (const std::vector< PlanarView > &views, const CameraMatrix &initial_guess, const IntrinsicsOptimOptions &opts={}) -> IntrinsicsOptimizationResult< PinholeCamera< BrownConradyd > >
 
template<camera_model CameraT>
auto optimize_intrinsics (const std::vector< PlanarView > &views, const CameraT &init_camera, std::vector< Eigen::Isometry3d > init_c_se3_t, const IntrinsicsOptimOptions &opts={}) -> IntrinsicsOptimizationResult< CameraT >
 
 NLOHMANN_JSON_SERIALIZE_ENUM (OptimizerType, {{OptimizerType::DEFAULT, "default"}, {OptimizerType::SPARSE_SCHUR, "sparse_schur"}, {OptimizerType::DENSE_SCHUR, "dense_schur"}, {OptimizerType::DENSE_QR, "dense_qr"}}) struct OptimOptions final
 
auto optimize_planar_pose (const PlanarView &view, const CameraMatrix &intrinsics, const Eigen::Isometry3d &init_pose, const PlanarPoseOptions &opts={}) -> PlanarPoseResult
 
template<class T , std::enable_if_t< std::is_aggregate_v< T >, int > = 0>
void to_json (nlohmann::json &j, const T &value)
 
template<class T , std::enable_if_t< std::is_aggregate_v< T >, int > = 0>
void from_json (const nlohmann::json &j, T &value)
 
template<typename Scalar >
auto matrix (const CameraMatrixT< Scalar > &cam) -> Eigen::Matrix< Scalar, 3, 3 >
 
template<typename T , typename Scalar >
auto normalize (const CameraMatrixT< Scalar > &cam, const Eigen::Matrix< T, 2, 1 > &pixel) -> Eigen::Matrix< T, 2, 1 >
 
template<typename T , typename Scalar >
auto denormalize (const CameraMatrixT< Scalar > &cam, const Eigen::Matrix< T, 2, 1 > &norm_xy) -> Eigen::Matrix< T, 2, 1 >
 
template<typename T >
auto apply_distortion (const Eigen::Matrix< T, 2, 1 > &norm_xy, const Eigen::Matrix< T, Eigen::Dynamic, 1 > &coeffs) -> Eigen::Matrix< T, 2, 1 >
 Apply lens distortion to normalized coordinates.
 
template<typename T >
auto undistort (Eigen::Matrix< T, 2, 1 > norm_xy, const Eigen::Matrix< T, Eigen::Dynamic, 1 > &coeffs) -> Eigen::Matrix< T, 2, 1 >
 
template<typename Scalar >
auto invert_brown_conrady (const Eigen::Matrix< Scalar, Eigen::Dynamic, 1 > &forward) -> Eigen::Matrix< Scalar, Eigen::Dynamic, 1 >
 
template<typename T >
auto fit_distortion_full (const std::vector< Observation< T > > &observations, const CameraMatrixT< T > &intrinsics, int num_radial=2, std::span< const int > fixed_indices={}, std::span< const T > fixed_values={}) -> std::optional< DistortionWithResiduals< T > >
 
template<typename T >
auto fit_distortion (const std::vector< Observation< T > > &observations, const CameraMatrixT< T > &intrinsics, int num_radial=2, std::span< const int > fixed_indices={}, std::span< const T > fixed_values={}) -> std::optional< DistortionWithResiduals< T > >
 
auto fit_distortion_dual (const std::vector< Observation< double > > &observations, const CameraMatrix &intrinsics, int num_radial=2, std::span< const int > fixed_indices={}, std::span< const double > fixed_values={}) -> std::optional< DualDistortionWithResiduals >
 
void to_json (nlohmann::json &j, const DualDistortion &d)
 
void from_json (const nlohmann::json &j, DualDistortion &d)
 
void to_json (nlohmann::json &j, const BrownConradyd &d)
 
void from_json (const nlohmann::json &j, BrownConradyd &d)
 
template<distortion_model DistortionT>
void to_json (nlohmann::json &j, const PinholeCamera< DistortionT > &cam)
 
template<distortion_model DistortionT>
void from_json (const nlohmann::json &j, PinholeCamera< DistortionT > &cam)
 
void solve_problem (ceres::Problem &problem, const OptimOptions &opts, OptimResult *result)
 
auto compute_covariance (const ProblemParamBlocks &problem_param_blocks, ceres::Problem &problem, double sum_squared_residuals=0, size_t total_residuals=0) -> std::optional< Eigen::MatrixXd >
 
template<typename T >
static Eigen::Matrix< T, 3, 1 > array_to_translation (const T *const arr)
 
template<typename T >
static Eigen::Matrix< T, 3, 3 > quat_array_to_rotmat (const T *const arr)
 
template<typename T >
std::pair< Eigen::Matrix< T, 3, 3 >, Eigen::Matrix< T, 3, 1 > > invert_transform (const Eigen::Matrix< T, 3, 3 > &rotation, const Eigen::Matrix< T, 3, 1 > &translation)
 
template<typename T >
std::pair< Eigen::Matrix< T, 3, 3 >, Eigen::Matrix< T, 3, 1 > > product (const Eigen::Matrix< T, 3, 3 > &rotation1, const Eigen::Matrix< T, 3, 1 > &translation1, const Eigen::Matrix< T, 3, 3 > &rotation2, const Eigen::Matrix< T, 3, 1 > &translation2)
 
void populate_quat_tran (const Eigen::Isometry3d &pose, std::array< double, 4 > &quat, std::array< double, 3 > &translation)
 
Eigen::Quaterniond array_to_norm_quat (const std::array< double, 4 > &arr)
 
Eigen::Isometry3d restore_pose (const std::array< double, 4 > &quat, const std::array< double, 3 > &translation)
 
Eigen::Isometry3d array_to_pose (const double *pose)
 
template<typename T >
static void planar_observables_to_observables (const PlanarView &planar_obs, std::vector< Observation< T > > &obs, const Eigen::Transform< T, 3, Eigen::Isometry > &camera_se3_target)
 
template<typename T >
Observation< T > to_observation (const PlanarObservation &obs, const T *pose6)
 
static auto make_motion_pair (const Eigen::Isometry3d &base_se3_gripper_a, const Eigen::Isometry3d &cam_se3_target_a, const Eigen::Isometry3d &base_se3_gripper_b, const Eigen::Isometry3d &cam_se3_target_b) -> MotionPair
 
static auto is_good_pair (const MotionPair &motion_pair, double min_angle, bool reject_axis_parallel, double axis_parallel_eps) -> bool
 
static auto estimate_rotation_allpairs_weighted (const std::vector< MotionPair > &pairs) -> Eigen::Matrix3d
 
static auto estimate_translation_allpairs_weighted (const std::vector< MotionPair > &pairs, const Eigen::Matrix3d &rot_x) -> Eigen::Vector3d
 
static auto normalize_points_2d (const std::vector< Eigen::Vector2d > &pts, std::vector< Eigen::Vector2d > &out) -> Eigen::Matrix3d
 
static auto dlt_homography_normalized (const std::vector< Eigen::Vector2d > &src_xy, const std::vector< Eigen::Vector2d > &dst_uv) -> Eigen::Matrix3d
 
static auto normalize_and_estimate_homography (const std::vector< Eigen::Vector2d > &src, const std::vector< Eigen::Vector2d > &dst) -> Eigen::Matrix3d
 
static auto symmetric_transfer_error (const Eigen::Matrix3d &hmtx, const Eigen::Vector2d &xy, const Eigen::Vector2d &uv) -> double
 
static auto symmetric_rms_px (const Eigen::Matrix3d &hmtx, const PlanarView &view, std::span< const int > inliers) -> double
 
static auto compute_planar_homographies (const std::vector< PlanarView > &views, const std::optional< RansacOptions > &ransac_opts) -> std::vector< HomographyResult >
 
static auto process_planar_view (const CameraMatrix &kmtx, const HomographyResult &hres) -> ViewEstimateData
 
static auto build_u_system (const std::vector< Observation< double > > &obs, bool use_skew) -> LinearSystem
 
static auto build_v_system (const std::vector< Observation< double > > &obs) -> LinearSystem
 
static auto solve_linear_system (const LinearSystem &system) -> std::optional< Eigen::VectorXd >
 
static auto apply_bounds_and_fallback (const Eigen::VectorXd &xu, const Eigen::VectorXd &xv, const std::vector< Observation< double > > &obs, const CalibrationBounds &bounds, bool use_skew) -> CameraMatrix
 
static auto correct_observations_for_distortion (const std::vector< Observation< double > > &obs, const CameraMatrix &kmtx, const Eigen::VectorXd &distortion) -> std::vector< Observation< double > >
 
static auto compute_camera_matrix_difference (const CameraMatrix &k1, const CameraMatrix &k2) -> double
 
static auto estimate_distortion_for_camera (const std::vector< Observation< double > > &obs, const CameraMatrix &kmtx, int num_radial) -> std::optional< Eigen::VectorXd >
 
static auto zhang_bmtx (const Eigen::VectorXd &b) -> Eigen::Matrix3d
 Constructs B = K^{-T} K^{-1} from the 6-vector b.
 
static void check_conic_decomposition (const Eigen::Matrix3d &bmtx, const Eigen::Matrix3d &kmtx)
 
static auto kmtx_from_dual_conic (const Eigen::VectorXd &bv) -> std::optional< Eigen::Matrix3d >
 
static auto v_ij (const Eigen::Matrix3d &hmtx, int i, int j) -> Eigen::Matrix< double, 1, 6 >
 
static auto normalize_hmtx (const Eigen::Matrix3d &hmtx) -> Eigen::Matrix3d
 
static auto make_zhang_design_matrix (const std::vector< HomographyResult > &hs) -> std::optional< Eigen::MatrixXd >
 
template<camera_model CameraT>
static auto build_problem (const std::vector< BundleObservation > &observations, const BundleOptions &opts, BundleBlocks< CameraT > &blocks) -> ceres::Problem
 
template<camera_model CameraT>
void validate_input (const std::vector< BundleObservation > &observations, const std::vector< CameraT > &initial_cameras)
 
template<camera_model CameraT>
BundleResult< CameraT > optimize_bundle (const std::vector< BundleObservation > &observations, const std::vector< CameraT > &initial_cameras, const std::vector< Eigen::Isometry3d > &init_g_se3_c, const Eigen::Isometry3d &init_b_se3_t, const BundleOptions &opts)
 Perform bundle-adjustment style optimisation of the hand-eye calibration problem.
 
template BundleResult< PinholeCamera< BrownConradyd > > optimize_bundle (const std::vector< BundleObservation > &, const std::vector< PinholeCamera< BrownConradyd > > &, const std::vector< Eigen::Isometry3d > &, const Eigen::Isometry3d &, const BundleOptions &)
 
template BundleResult< ScheimpflugCamera< PinholeCamera< BrownConradyd > > > optimize_bundle (const std::vector< BundleObservation > &, const std::vector< ScheimpflugCamera< PinholeCamera< BrownConradyd > > > &, const std::vector< Eigen::Isometry3d > &, const Eigen::Isometry3d &, const BundleOptions &)
 
template<camera_model CameraT>
static void set_residual_blocks (ceres::Problem &problem, const std::vector< MulticamPlanarView > &views, const std::vector< CameraT > &cameras, const ExtrinsicOptions &options, ExtrinsicBlocks< CameraT > &blocks)
 
template<camera_model CameraT>
static void set_param_constraints (ceres::Problem &problem, const ExtrinsicOptions &options, ExtrinsicBlocks< CameraT > &blocks)
 
template<camera_model CameraT>
static auto build_problem (const std::vector< MulticamPlanarView > &views, const std::vector< CameraT > &cameras, const ExtrinsicOptions &options, ExtrinsicBlocks< CameraT > &blocks) -> ceres::Problem
 
template<camera_model CameraT>
static void validate_input (const std::vector< CameraT > &init_cameras, const std::vector< Eigen::Isometry3d > &init_c_se3_r, const std::vector< Eigen::Isometry3d > &init_r_se3_t, const std::vector< MulticamPlanarView > &views)
 
template<camera_model CameraT>
ExtrinsicOptimizationResult< CameraT > optimize_extrinsics (const std::vector< MulticamPlanarView > &views, const std::vector< CameraT > &init_cameras, const std::vector< Eigen::Isometry3d > &init_c_se3_r, const std::vector< Eigen::Isometry3d > &init_r_se3_t, const ExtrinsicOptions &opts)
 
template ExtrinsicOptimizationResult< PinholeCamera< BrownConradyd > > optimize_extrinsics (const std::vector< MulticamPlanarView > &, const std::vector< PinholeCamera< BrownConradyd > > &, const std::vector< Eigen::Isometry3d > &, const std::vector< Eigen::Isometry3d > &, const ExtrinsicOptions &)
 
template ExtrinsicOptimizationResult< ScheimpflugCamera< PinholeCamera< BrownConradyd > > > optimize_extrinsics (const std::vector< MulticamPlanarView > &, const std::vector< ScheimpflugCamera< PinholeCamera< BrownConradyd > > > &, const std::vector< Eigen::Isometry3d > &, const std::vector< Eigen::Isometry3d > &, const ExtrinsicOptions &)
 
static auto build_problem (const std::vector< MotionPair > &pairs, const OptimOptions &opts, HandeyeBlocks &blocks) -> ceres::Problem
 
static auto symmetric_rms_px (const Eigen::Matrix3d &hmtx, const std::vector< PlanarObservation > &data, std::span< const int > inliers) -> double
 
static void estimate_homography_dlt (const PlanarView &data, HomographyResult &result)
 
static void estimate_homography_ransac (const PlanarView &data, HomographyResult &result, const RansacOptions &ransac_opts)
 
static auto params_to_h (const HomographyParams &params) -> Mat3
 
static ceres::Problem build_problem (const PlanarView &data, const OptimOptions &options, HomographyBlocks &blocks)
 
template<camera_model CameraT>
static ceres::Problem build_problem (const std::vector< PlanarView > &views, const IntrinsicsOptimOptions &opts, IntrinsicBlocks< CameraT > &blocks)
 
static void validate_input (const std::vector< PlanarView > &views)
 
template auto optimize_intrinsics (const std::vector< PlanarView > &views, const PinholeCamera< BrownConradyd > &init_camera, std::vector< Eigen::Isometry3d > init_c_se3_t, const IntrinsicsOptimOptions &opts) -> IntrinsicsOptimizationResult< PinholeCamera< BrownConradyd > >
 
template auto optimize_intrinsics (const std::vector< PlanarView > &views, const ScheimpflugCamera< PinholeCamera< BrownConradyd > > &init_camera, std::vector< Eigen::Isometry3d > init_c_se3_t, const IntrinsicsOptimOptions &opts) -> IntrinsicsOptimizationResult< ScheimpflugCamera< PinholeCamera< BrownConradyd > > >
 
static size_t count_total_observations (const std::vector< PlanarView > &views)
 
static auto solve_full (const std::vector< PlanarView > &views, const IntrinsicBlocks &blocks, const IntrinsicsOptimOptions &opts) -> std::optional< DistortionWithResiduals< double > >
 
static ceres::Problem build_problem (const std::vector< PlanarView > &obs_views, IntrinsicBlocks &blocks, const IntrinsicsOptimOptions &opts)
 
static void compute_per_view_errors (const std::vector< PlanarView > &obs_views, const Eigen::VectorXd &residuals, IntrinsicsOptimizationResult< PinholeCamera< BrownConradyd > > &result)
 
static auto axisangle_to_pose (const Pose6 &pose6) -> Eigen::Isometry3d
 
template<typename T >
static std::pair< Eigen::Matrix< T, 3, 3 >, Eigen::Matrix< T, 3, 1 > > get_camera_se3_target (const Eigen::Matrix< T, 3, 3 > &b_rot_t, const Eigen::Matrix< T, 3, 1 > &b_tra_t, const Eigen::Matrix< T, 3, 3 > &g_rot_c, const Eigen::Matrix< T, 3, 1 > &g_tra_c, const Eigen::Matrix< T, 3, 3 > &b_rot_g, const Eigen::Matrix< T, 3, 1 > &b_tra_g)
 
template<typename T >
static std::pair< Eigen::Matrix< T, 3, 3 >, Eigen::Matrix< T, 3, 1 > > get_camera_se3_target (const Eigen::Matrix< T, 3, 3 > &c_rot_r, const Eigen::Matrix< T, 3, 1 > &c_tra_r, const Eigen::Matrix< T, 3, 3 > &r_rot_t, const Eigen::Matrix< T, 3, 1 > &r_tra_t)
 

Variables

constexpr int k_default_max_iterations = 5
 Improved linear initialization with distortion estimation.
 
static const std::map< OptimizerType, ceres::LinearSolverType > optim_to_ceres
 

Detailed Description

Linear multi-camera extrinsics initialisation (DLT)

Semi-linear residual for intrinsic camera parameters.

Residual for camera intrinsics optimization.

Ceres residuals for hand-eye optimization Three residuals are defined:

Residual for joint extrinsic-intrinsic optimization.

Residuals for bundle adjustment with ceres.

Utility functions for working with image observations.

Ceres solver utilities.

Ceres-based planar pose optimization interfaces.

Ceres-based intrinsic optimization interfaces.

Ceres-based homography optimization interfaces.

Ceres-based multi-camera extrinsics optimization interfaces.

Classical Zhang camera calibration method.

Planar target pose from homography.

Linear planar pose estimation interfaces (header-only helpers)

Linear intrinsic estimation interfaces.

Linear homography estimation interfaces (DLT/RANSAC)

  1. AX = XB (rotation + translation)
  2. Reprojection (per view)

Typedef Documentation

◆ BrownConradyd

using calib::BrownConradyd = typedef BrownConrady<double>

Definition at line 163 of file distortion.h.

◆ Camera

template<distortion_model DistortionT>
using calib::Camera = typedef PinholeCamera<DistortionT>

Definition at line 165 of file pinhole.h.

◆ CameraMatrix

using calib::CameraMatrix = typedef CameraMatrixT<double>

Definition at line 48 of file camera_matrix.h.

◆ Datum

Definition at line 96 of file homographyestimator.cpp.

◆ DualDistortion

using calib::DualDistortion = typedef DualBrownConrady<double>

Definition at line 221 of file distortion.h.

◆ HomographyParams

using calib::HomographyParams = typedef std::array<double, 8>

Definition at line 77 of file homography.cpp.

◆ Mat3

using calib::Mat3 = typedef Eigen::Matrix3d

Definition at line 76 of file homography.cpp.

◆ Model

Definition at line 95 of file homographyestimator.cpp.

◆ MulticamPlanarView

using calib::MulticamPlanarView = typedef std::vector<PlanarView>

Definition at line 20 of file extrinsics.h.

◆ PlanarView

using calib::PlanarView = typedef std::vector<PlanarObservation>

Definition at line 26 of file planarpose.h.

◆ Pose6

using calib::Pose6 = typedef Eigen::Matrix<double, 6, 1>

Definition at line 19 of file planarpose.cpp.

◆ Vec2

using calib::Vec2 = typedef Eigen::Vector2d

Definition at line 75 of file homography.cpp.

Enumeration Type Documentation

◆ OptimizerType

enum class calib::OptimizerType
strong
Enumerator
DEFAULT 
SPARSE_SCHUR 
DENSE_SCHUR 
DENSE_QR 

Definition at line 17 of file optimize.h.

Function Documentation

◆ apply_bounds_and_fallback()

static auto calib::apply_bounds_and_fallback ( const Eigen::VectorXd &  xu,
const Eigen::VectorXd &  xv,
const std::vector< Observation< double > > &  obs,
const CalibrationBounds bounds,
bool  use_skew 
) -> CameraMatrix
static

Definition at line 205 of file intrinsicsdlt.cpp.

◆ apply_distortion()

template<typename T >
auto calib::apply_distortion ( const Eigen::Matrix< T, 2, 1 > &  norm_xy,
const Eigen::Matrix< T, Eigen::Dynamic, 1 > &  coeffs 
) -> Eigen::Matrix<T, 2, 1>

Apply lens distortion to normalized coordinates.

Applies radial and tangential distortion to normalized 2D coordinates using the Brown-Conrady distortion model. The distortion coefficients are ordered as [k1, k2, ..., kn, p1, p2] where ki are radial distortion coefficients and p1, p2 are tangential distortion coefficients.

Template Parameters
TScalar type (float, double, etc.)
Parameters
norm_xyNormalized undistorted 2D coordinates
coeffsDistortion coefficients vector (minimum 2 elements)
Returns
Distorted normalized coordinates
Exceptions
std::runtime_errorif coeffs has fewer than 2 elements
Note
The input coordinates should be normalized by the camera intrinsics

Definition at line 93 of file distortion.h.

◆ array_to_norm_quat()

Eigen::Quaterniond calib::array_to_norm_quat ( const std::array< double, 4 > &  arr)
inline

Definition at line 50 of file observationutils.h.

◆ array_to_pose()

Eigen::Isometry3d calib::array_to_pose ( const double *  pose)
inline

Definition at line 68 of file observationutils.h.

◆ array_to_translation()

template<typename T >
static Eigen::Matrix< T, 3, 1 > calib::array_to_translation ( const T *const  arr)
static

Definition at line 16 of file observationutils.h.

◆ average_isometries()

Eigen::Isometry3d calib::average_isometries ( const std::vector< Eigen::Isometry3d > &  poses)
inline

Definition at line 75 of file se3_utils.h.

◆ axisangle_to_pose()

static auto calib::axisangle_to_pose ( const Pose6 pose6) -> Eigen::Isometry3d
static

Definition at line 73 of file planarpose.cpp.

◆ build_all_pairs()

auto calib::build_all_pairs ( const std::vector< Eigen::Isometry3d > &  base_se3_gripper,
const std::vector< Eigen::Isometry3d > &  cam_se3_target,
double  min_angle_deg = 1.0,
bool  reject_axis_parallel = true,
double  axis_parallel_eps = 1e-3 
) -> std::vector<MotionPair>

Generate all valid motion pairs from pose sequences.

Creates motion pairs from sequences of robot and camera poses, filtering out motions that are too small or have parallel axes to ensure numerical stability.

Parameters
base_se3_gripperRobot base to gripper transformations
cam_se3_targetCamera to target transformations
min_angle_degMinimum rotation angle to accept (degrees)
reject_axis_parallelWhether to reject parallel rotation axes
axis_parallel_epsThreshold for parallel axis detection
Returns
Vector of valid motion pairs

Definition at line 51 of file handeyedlt.cpp.

◆ build_plane_homography()

Eigen::Matrix3d calib::build_plane_homography ( const Eigen::Vector4d &  plane)
inline

Definition at line 49 of file linescan.h.

◆ build_problem() [1/6]

static ceres::Problem calib::build_problem ( const PlanarView data,
const OptimOptions &  options,
HomographyBlocks blocks 
)
static

Definition at line 131 of file homography.cpp.

◆ build_problem() [2/6]

template<camera_model CameraT>
static auto calib::build_problem ( const std::vector< BundleObservation > &  observations,
const BundleOptions opts,
BundleBlocks< CameraT > &  blocks 
) -> ceres::Problem
static

Definition at line 84 of file bundle.cpp.

◆ build_problem() [3/6]

static auto calib::build_problem ( const std::vector< MotionPair > &  pairs,
const OptimOptions &  opts,
HandeyeBlocks blocks 
) -> ceres::Problem
static

Definition at line 45 of file handeye.cpp.

◆ build_problem() [4/6]

template<camera_model CameraT>
static auto calib::build_problem ( const std::vector< MulticamPlanarView > &  views,
const std::vector< CameraT > &  cameras,
const ExtrinsicOptions options,
ExtrinsicBlocks< CameraT > &  blocks 
) -> ceres::Problem
static

Definition at line 153 of file extrinsics.cpp.

◆ build_problem() [5/6]

static ceres::Problem calib::build_problem ( const std::vector< PlanarView > &  obs_views,
IntrinsicBlocks blocks,
const IntrinsicsOptimOptions opts 
)
static

Definition at line 95 of file intrinsicssemidlt.cpp.

◆ build_problem() [6/6]

template<camera_model CameraT>
static ceres::Problem calib::build_problem ( const std::vector< PlanarView > &  views,
const IntrinsicsOptimOptions opts,
IntrinsicBlocks< CameraT > &  blocks 
)
static

Definition at line 64 of file intrinsics.cpp.

◆ build_u_system()

static auto calib::build_u_system ( const std::vector< Observation< double > > &  obs,
bool  use_skew 
) -> LinearSystem
static

Definition at line 152 of file intrinsicsdlt.cpp.

◆ build_v_system()

static auto calib::build_v_system ( const std::vector< Observation< double > > &  obs) -> LinearSystem
static

Definition at line 177 of file intrinsicsdlt.cpp.

◆ calibrate_laser_plane()

template<camera_model CameraT>
LineScanCalibrationResult calib::calibrate_laser_plane ( const std::vector< LineScanView > &  views,
const CameraT &  camera,
const LineScanPlaneFitOptions opts = {} 
)

Definition at line 102 of file linescan.h.

◆ check_conic_decomposition()

static void calib::check_conic_decomposition ( const Eigen::Matrix3d &  bmtx,
const Eigen::Matrix3d &  kmtx 
)
static

Definition at line 15 of file zhang.cpp.

◆ compute_camera_matrix_difference()

static auto calib::compute_camera_matrix_difference ( const CameraMatrix k1,
const CameraMatrix k2 
) -> double
static

Definition at line 268 of file intrinsicsdlt.cpp.

◆ compute_covariance()

auto calib::compute_covariance ( const ProblemParamBlocks problem_param_blocks,
ceres::Problem &  problem,
double  sum_squared_residuals = 0,
size_t  total_residuals = 0 
) -> std::optional<Eigen::MatrixXd>
inline

Definition at line 69 of file ceresutils.h.

◆ compute_per_view_errors()

static void calib::compute_per_view_errors ( const std::vector< PlanarView > &  obs_views,
const Eigen::VectorXd &  residuals,
IntrinsicsOptimizationResult< PinholeCamera< BrownConradyd > > &  result 
)
static

Definition at line 137 of file intrinsicssemidlt.cpp.

◆ compute_planar_homographies()

static auto calib::compute_planar_homographies ( const std::vector< PlanarView > &  views,
const std::optional< RansacOptions > &  ransac_opts 
) -> std::vector<HomographyResult>
static

Definition at line 32 of file intrinsicsdlt.cpp.

◆ correct_observations_for_distortion()

static auto calib::correct_observations_for_distortion ( const std::vector< Observation< double > > &  obs,
const CameraMatrix kmtx,
const Eigen::VectorXd &  distortion 
) -> std::vector<Observation<double>>
static

Definition at line 247 of file intrinsicsdlt.cpp.

◆ count_total_observations()

static size_t calib::count_total_observations ( const std::vector< PlanarView > &  views)
static

Definition at line 19 of file intrinsicssemidlt.cpp.

◆ denormalize()

template<typename T , typename Scalar >
auto calib::denormalize ( const CameraMatrixT< Scalar > &  cam,
const Eigen::Matrix< T, 2, 1 > &  norm_xy 
) -> Eigen::Matrix<T, 2, 1>

Definition at line 42 of file camera_matrix.h.

◆ dlt_homography_normalized()

static auto calib::dlt_homography_normalized ( const std::vector< Eigen::Vector2d > &  src_xy,
const std::vector< Eigen::Vector2d > &  dst_uv 
) -> Eigen::Matrix3d
static

Definition at line 45 of file homographyestimator.cpp.

◆ estimate_and_optimize_handeye()

auto calib::estimate_and_optimize_handeye ( const std::vector< Eigen::Isometry3d > &  base_se3_gripper,
const std::vector< Eigen::Isometry3d > &  camera_se3_target,
double  min_angle_deg = 1.0,
const OptimOptions &  options = {} 
) -> HandeyeResult

Estimates and refines the hand-eye transformation.

This function computes the hand-eye transformation matrix that relates the coordinate frame of a robotic gripper (end-effector) to the coordinate frame of a camera mounted on the gripper. The estimation is performed using the provided transformations, and an optional refinement step can be applied.

Parameters
base_se3_gripperA vector of transformations representing the pose of the gripper relative to the robot base for multiple measurements.
camera_se3_targetA vector of transformations representing the pose of the calibration target relative to the camera for the same measurements.
min_angle_degThe minimum angular threshold (in degrees) to filter out small rotations during the refinement process. Default is 1.0 degrees.
roOptions for the refinement process, encapsulated in a RefinementOptions structure. Default is an empty RefinementOptions object.
Returns
The estimated hand-eye transformation as an Eigen::Isometry3d object.

Definition at line 80 of file handeye.cpp.

◆ estimate_distortion_for_camera()

static auto calib::estimate_distortion_for_camera ( const std::vector< Observation< double > > &  obs,
const CameraMatrix kmtx,
int  num_radial 
) -> std::optional<Eigen::VectorXd>
static

Definition at line 274 of file intrinsicsdlt.cpp.

◆ estimate_extrinsic_dlt()

template<camera_model CameraT>
auto calib::estimate_extrinsic_dlt ( const std::vector< MulticamPlanarView > &  views,
const std::vector< CameraT > &  cameras 
) -> ExtrinsicPoses

Definition at line 28 of file extrinsics.h.

◆ estimate_handeye_dlt()

auto calib::estimate_handeye_dlt ( const std::vector< Eigen::Isometry3d > &  base_se3_gripper,
const std::vector< Eigen::Isometry3d > &  camera_se3_target,
double  min_angle_deg = 1.0 
) -> Eigen::Isometry3d

Estimates the hand-eye transformation using the Tsai-Lenz algorithm with all pairs of input transformations and weighted averaging.

This function computes the hand-eye transformation that relates the motion of a robotic gripper (end-effector) to the motion of a camera mounted on the gripper. It uses the Tsai-Lenz algorithm and considers all pairs of input transformations, applying a weighting scheme to improve the robustness of the estimation.

Parameters
base_se3_gripperA vector of transformations representing the motion of the gripper relative to the robot base. Each transformation is an Eigen::Isometry3d object.
camera_se3_targetA vector of transformations representing the motion of the calibration target relative to the camera. Each transformation is an Eigen::Isometry3d object.
min_angle_degThe minimum angular difference (in degrees) between two transformations to be considered for pairing. This parameter helps to filter out pairs with insufficient motion, which may lead to numerical instability. Default value is 1.0 degrees.
Returns
The estimated hand-eye transformation as an Eigen::Isometry3d object.
Note
The input vectors base_se3_gripper and camera_se3_target must have the same size, and each pair of corresponding transformations must represent the same motion in the respective coordinate frames.
Exceptions
std::invalid_argumentIf the input vectors have different sizes or if there are insufficient valid pairs for the estimation.

Definition at line 122 of file handeyedlt.cpp.

◆ estimate_homography()

auto calib::estimate_homography ( const PlanarView data,
std::optional< RansacOptions ransac_opts = std::nullopt 
) -> HomographyResult

Definition at line 62 of file homography.cpp.

◆ estimate_homography_dlt()

static void calib::estimate_homography_dlt ( const PlanarView data,
HomographyResult result 
)
static

Definition at line 30 of file homography.cpp.

◆ estimate_homography_ransac()

static void calib::estimate_homography_ransac ( const PlanarView data,
HomographyResult result,
const RansacOptions ransac_opts 
)
static

Definition at line 45 of file homography.cpp.

◆ estimate_intrinsics()

auto calib::estimate_intrinsics ( const std::vector< PlanarView > &  views,
const IntrinsicsEstimOptions opts = {} 
) -> IntrinsicsEstimateResult

Estimate camera intrinsics from planar views using a linear method.

Definition at line 101 of file intrinsicsdlt.cpp.

◆ estimate_intrinsics_linear()

std::optional< CameraMatrix > calib::estimate_intrinsics_linear ( const std::vector< Observation< double > > &  observations,
std::optional< CalibrationBounds bounds = std::nullopt,
bool  use_skew = false 
) -> std::optional<CameraMatrix>

Linear estimate with normalized observations.

Definition at line 289 of file intrinsicsdlt.cpp.

◆ estimate_intrinsics_linear_iterative()

auto calib::estimate_intrinsics_linear_iterative ( const std::vector< Observation< double > > &  observations,
int  num_radial,
int  max_iterations = k_default_max_iterations,
bool  use_skew = false 
) -> std::optional<PinholeCamera<BrownConradyd>>

Definition at line 319 of file intrinsicsdlt.cpp.

◆ estimate_planar_pose() [1/2]

auto calib::estimate_planar_pose ( PlanarView  view,
const CameraMatrix intrinsics 
) -> Eigen::Isometry3d

Definition at line 54 of file planarpose_linear.cpp.

◆ estimate_planar_pose() [2/2]

template<camera_model CameraT>
auto calib::estimate_planar_pose ( PlanarView  view,
const CameraT &  camera 
) -> Eigen::Isometry3d

Definition at line 39 of file planarpose.h.

◆ estimate_rotation_allpairs_weighted()

static auto calib::estimate_rotation_allpairs_weighted ( const std::vector< MotionPair > &  pairs) -> Eigen::Matrix3d
static

Definition at line 84 of file handeyedlt.cpp.

◆ estimate_translation_allpairs_weighted()

static auto calib::estimate_translation_allpairs_weighted ( const std::vector< MotionPair > &  pairs,
const Eigen::Matrix3d &  rot_x 
) -> Eigen::Vector3d
static

Definition at line 102 of file handeyedlt.cpp.

◆ exp_so3()

Eigen::Matrix3d calib::exp_so3 ( const Eigen::Vector3d &  wvec)
inline

Definition at line 42 of file se3_utils.h.

◆ fit_distortion()

template<typename T >
auto calib::fit_distortion ( const std::vector< Observation< T > > &  observations,
const CameraMatrixT< T > &  intrinsics,
int  num_radial = 2,
std::span< const int >  fixed_indices = {},
std::span< const T >  fixed_values = {} 
) -> std::optional<DistortionWithResiduals<T>>

Definition at line 366 of file distortion.h.

◆ fit_distortion_dual()

auto calib::fit_distortion_dual ( const std::vector< Observation< double > > &  observations,
const CameraMatrix intrinsics,
int  num_radial = 2,
std::span< const int >  fixed_indices = {},
std::span< const double >  fixed_values = {} 
) -> std::optional<DualDistortionWithResiduals>
inline

Definition at line 373 of file distortion.h.

◆ fit_distortion_full()

template<typename T >
auto calib::fit_distortion_full ( const std::vector< Observation< T > > &  observations,
const CameraMatrixT< T > &  intrinsics,
int  num_radial = 2,
std::span< const int >  fixed_indices = {},
std::span< const T >  fixed_values = {} 
) -> std::optional<DistortionWithResiduals<T>>

Definition at line 231 of file distortion.h.

◆ fit_plane_ransac()

auto calib::fit_plane_ransac ( const std::vector< Eigen::Vector3d > &  pts,
const RansacOptions opts = {} 
) -> PlaneRansacResult

Definition at line 87 of file planefit.cpp.

◆ fit_plane_svd()

auto calib::fit_plane_svd ( const std::vector< Eigen::Vector3d > &  pts) -> Eigen::Vector4d

Definition at line 68 of file planefit.cpp.

◆ from_json() [1/4]

void calib::from_json ( const nlohmann::json &  j,
BrownConradyd d 
)
inline

Definition at line 418 of file distortion.h.

◆ from_json() [2/4]

void calib::from_json ( const nlohmann::json &  j,
DualDistortion d 
)
inline

Definition at line 411 of file distortion.h.

◆ from_json() [3/4]

template<distortion_model DistortionT>
void calib::from_json ( const nlohmann::json &  j,
PinholeCamera< DistortionT > &  cam 
)
inline

Definition at line 173 of file pinhole.h.

◆ from_json() [4/4]

template<class T , std::enable_if_t< std::is_aggregate_v< T >, int > = 0>
void calib::from_json ( const nlohmann::json &  j,
T &  value 
)

Definition at line 89 of file json.h.

◆ get_camera_se3_target() [1/2]

template<typename T >
static std::pair< Eigen::Matrix< T, 3, 3 >, Eigen::Matrix< T, 3, 1 > > calib::get_camera_se3_target ( const Eigen::Matrix< T, 3, 3 > &  b_rot_t,
const Eigen::Matrix< T, 3, 1 > &  b_tra_t,
const Eigen::Matrix< T, 3, 3 > &  g_rot_c,
const Eigen::Matrix< T, 3, 1 > &  g_tra_c,
const Eigen::Matrix< T, 3, 3 > &  b_rot_g,
const Eigen::Matrix< T, 3, 1 > &  b_tra_g 
)
static

Definition at line 16 of file bundleresidual.h.

◆ get_camera_se3_target() [2/2]

template<typename T >
static std::pair< Eigen::Matrix< T, 3, 3 >, Eigen::Matrix< T, 3, 1 > > calib::get_camera_se3_target ( const Eigen::Matrix< T, 3, 3 > &  c_rot_r,
const Eigen::Matrix< T, 3, 1 > &  c_tra_r,
const Eigen::Matrix< T, 3, 3 > &  r_rot_t,
const Eigen::Matrix< T, 3, 1 > &  r_tra_t 
)
static

Definition at line 15 of file extrinsicsresidual.h.

◆ homography_consistency_fro()

auto calib::homography_consistency_fro ( const CameraMatrix kmtx,
const Eigen::Isometry3d &  c_se3_t,
const Eigen::Matrix3d &  hmtx 
) -> double

A quick consistency check.

Returns ||K [R(:,1) R(:,2) t] - H||_F / ||H||_F. Values ~ 1e-3..1e-2 are typical when H was estimated from the same correspondences used.

Definition at line 69 of file posefromhomography.cpp.

◆ invert_brown_conrady()

template<typename Scalar >
auto calib::invert_brown_conrady ( const Eigen::Matrix< Scalar, Eigen::Dynamic, 1 > &  forward) -> Eigen::Matrix<Scalar, Eigen::Dynamic, 1>
inline

Definition at line 166 of file distortion.h.

◆ invert_transform()

template<typename T >
std::pair< Eigen::Matrix< T, 3, 3 >, Eigen::Matrix< T, 3, 1 > > calib::invert_transform ( const Eigen::Matrix< T, 3, 3 > &  rotation,
const Eigen::Matrix< T, 3, 1 > &  translation 
)

Definition at line 27 of file observationutils.h.

◆ is_good_pair()

static auto calib::is_good_pair ( const MotionPair motion_pair,
double  min_angle,
bool  reject_axis_parallel,
double  axis_parallel_eps 
) -> bool
static

Definition at line 25 of file handeyedlt.cpp.

◆ kmtx_from_dual_conic()

static auto calib::kmtx_from_dual_conic ( const Eigen::VectorXd &  bv) -> std::optional<Eigen::Matrix3d>
static

Definition at line 32 of file zhang.cpp.

◆ log_so3()

Eigen::Vector3d calib::log_so3 ( const Eigen::Matrix3d &  rot_in)
inline

Definition at line 27 of file se3_utils.h.

◆ make_motion_pair()

static auto calib::make_motion_pair ( const Eigen::Isometry3d &  base_se3_gripper_a,
const Eigen::Isometry3d &  cam_se3_target_a,
const Eigen::Isometry3d &  base_se3_gripper_b,
const Eigen::Isometry3d &  cam_se3_target_b 
) -> MotionPair
static

Definition at line 11 of file handeyedlt.cpp.

◆ make_zhang_design_matrix()

static auto calib::make_zhang_design_matrix ( const std::vector< HomographyResult > &  hs) -> std::optional<Eigen::MatrixXd>
static

Definition at line 139 of file zhang.cpp.

◆ matrix()

template<typename Scalar >
auto calib::matrix ( const CameraMatrixT< Scalar > &  cam) -> Eigen::Matrix<Scalar, 3, 3>

Definition at line 22 of file camera_matrix.h.

◆ NLOHMANN_JSON_SERIALIZE_ENUM()

calib::NLOHMANN_JSON_SERIALIZE_ENUM ( OptimizerType  ,
{{OptimizerType::DEFAULT, "default"}, {OptimizerType::SPARSE_SCHUR, "sparse_schur"}, {OptimizerType::DENSE_SCHUR, "dense_schur"}, {OptimizerType::DENSE_QR, "dense_qr"}}   
)
final

Definition at line 19 of file optimize.h.

◆ normalize()

template<typename T , typename Scalar >
auto calib::normalize ( const CameraMatrixT< Scalar > &  cam,
const Eigen::Matrix< T, 2, 1 > &  pixel 
) -> Eigen::Matrix<T, 2, 1>

Definition at line 34 of file camera_matrix.h.

◆ normalize_and_estimate_homography()

static auto calib::normalize_and_estimate_homography ( const std::vector< Eigen::Vector2d > &  src,
const std::vector< Eigen::Vector2d > &  dst 
) -> Eigen::Matrix3d
static

Definition at line 69 of file homographyestimator.cpp.

◆ normalize_hmtx()

static auto calib::normalize_hmtx ( const Eigen::Matrix3d &  hmtx) -> Eigen::Matrix3d
static

Definition at line 112 of file zhang.cpp.

◆ normalize_points_2d()

static auto calib::normalize_points_2d ( const std::vector< Eigen::Vector2d > &  pts,
std::vector< Eigen::Vector2d > &  out 
) -> Eigen::Matrix3d
static

Definition at line 16 of file homographyestimator.cpp.

◆ optimize_bundle() [1/4]

template BundleResult< PinholeCamera< BrownConradyd > > calib::optimize_bundle ( const std::vector< BundleObservation > &  ,
const std::vector< PinholeCamera< BrownConradyd > > &  ,
const std::vector< Eigen::Isometry3d > &  ,
const Eigen::Isometry3d &  ,
const BundleOptions  
)

◆ optimize_bundle() [2/4]

template BundleResult< ScheimpflugCamera< PinholeCamera< BrownConradyd > > > calib::optimize_bundle ( const std::vector< BundleObservation > &  ,
const std::vector< ScheimpflugCamera< PinholeCamera< BrownConradyd > > > &  ,
const std::vector< Eigen::Isometry3d > &  ,
const Eigen::Isometry3d &  ,
const BundleOptions  
)

◆ optimize_bundle() [3/4]

template<camera_model CameraT>
BundleResult< CameraT > calib::optimize_bundle ( const std::vector< BundleObservation > &  observations,
const std::vector< CameraT > &  initial_cameras,
const std::vector< Eigen::Isometry3d > &  init_g_se3_c,
const Eigen::Isometry3d &  init_b_se3_t,
const BundleOptions opts = {} 
) -> BundleResult< CameraT >

Perform bundle-adjustment style optimisation of the hand-eye calibration problem.

Supports single or multiple cameras and optional optimisation of intrinsics and the target pose.

Parameters
observationsSet of observations with robot poses and target detections
initial_camerasInitial camera parameters
init_g_se3_cInitial estimate of hand-eye transformations
init_b_se3_tInitial estimate of base-to-target transformation
optsOptimization options
Returns
Calibration result containing optimized parameters and error metrics

Definition at line 148 of file bundle.cpp.

◆ optimize_bundle() [4/4]

template<camera_model CameraT>
auto calib::optimize_bundle ( const std::vector< BundleObservation > &  observations,
const std::vector< CameraT > &  initial_cameras,
const std::vector< Eigen::Isometry3d > &  init_g_se3_c,
const Eigen::Isometry3d &  init_b_se3_t,
const BundleOptions opts = {} 
) -> BundleResult< CameraT >

Perform bundle-adjustment style optimisation of the hand-eye calibration problem.

Supports single or multiple cameras and optional optimisation of intrinsics and the target pose.

Parameters
observationsSet of observations with robot poses and target detections
initial_camerasInitial camera parameters
init_g_se3_cInitial estimate of hand-eye transformations
init_b_se3_tInitial estimate of base-to-target transformation
optsOptimization options
Returns
Calibration result containing optimized parameters and error metrics

Definition at line 148 of file bundle.cpp.

◆ optimize_extrinsics() [1/4]

template ExtrinsicOptimizationResult< PinholeCamera< BrownConradyd > > calib::optimize_extrinsics ( const std::vector< MulticamPlanarView > &  ,
const std::vector< PinholeCamera< BrownConradyd > > &  ,
const std::vector< Eigen::Isometry3d > &  ,
const std::vector< Eigen::Isometry3d > &  ,
const ExtrinsicOptions  
)

◆ optimize_extrinsics() [2/4]

template ExtrinsicOptimizationResult< ScheimpflugCamera< PinholeCamera< BrownConradyd > > > calib::optimize_extrinsics ( const std::vector< MulticamPlanarView > &  ,
const std::vector< ScheimpflugCamera< PinholeCamera< BrownConradyd > > > &  ,
const std::vector< Eigen::Isometry3d > &  ,
const std::vector< Eigen::Isometry3d > &  ,
const ExtrinsicOptions  
)

◆ optimize_extrinsics() [3/4]

template<camera_model CameraT>
ExtrinsicOptimizationResult< CameraT > calib::optimize_extrinsics ( const std::vector< MulticamPlanarView > &  views,
const std::vector< CameraT > &  init_cameras,
const std::vector< Eigen::Isometry3d > &  init_c_se3_r,
const std::vector< Eigen::Isometry3d > &  init_r_se3_t,
const ExtrinsicOptions opts 
)

Definition at line 175 of file extrinsics.cpp.

◆ optimize_extrinsics() [4/4]

template<camera_model CameraT>
auto calib::optimize_extrinsics ( const std::vector< MulticamPlanarView > &  views,
const std::vector< CameraT > &  init_cameras,
const std::vector< Eigen::Isometry3d > &  init_c_se3_r,
const std::vector< Eigen::Isometry3d > &  init_r_se3_t,
const ExtrinsicOptions opts = {} 
) -> ExtrinsicOptimizationResult< CameraT >

Definition at line 175 of file extrinsics.cpp.

◆ optimize_handeye()

auto calib::optimize_handeye ( const std::vector< Eigen::Isometry3d > &  base_se3_gripper,
const std::vector< Eigen::Isometry3d > &  camera_se3_target,
const Eigen::Isometry3d &  init_gripper_se3_ref,
const OptimOptions &  options = {} 
) -> HandeyeResult

Refines the hand-eye calibration transformation using an optimization process.

This function takes a set of transformations representing the motion of the gripper relative to the robot base and the motion of the calibration target relative to the camera. It refines the initial estimate of the hand-eye transformation using the provided options.

Parameters
base_se3_gripperA vector of transformations representing the motion of the gripper relative to the robot base. Each transformation corresponds to a specific pose of the gripper.
camera_se3_targetA vector of transformations representing the motion of the calibration target relative to the camera. Each transformation corresponds to a specific pose of the target.
init_gripper_se3_refThe initial estimate of the transformation from the gripper to the reference frame (hand-eye transformation).
optionsOptional refinement options that control the optimization process. Defaults to an empty set of options.
Returns
The refined hand-eye transformation as an Eigen::Isometry3d object.

Definition at line 60 of file handeye.cpp.

◆ optimize_homography()

OptimizeHomographyResult calib::optimize_homography ( const PlanarView data,
const Eigen::Matrix3d &  init_h,
const OptimOptions &  options = {} 
) -> OptimizeHomographyResult

Definition at line 144 of file homography.cpp.

◆ optimize_intrinsics() [1/3]

template<camera_model CameraT>
auto calib::optimize_intrinsics ( const std::vector< PlanarView > &  views,
const CameraT &  init_camera,
std::vector< Eigen::Isometry3d >  init_c_se3_t,
const IntrinsicsOptimOptions opts = {} 
) -> IntrinsicsOptimizationResult<CameraT>

Definition at line 99 of file intrinsics.cpp.

◆ optimize_intrinsics() [2/3]

template auto calib::optimize_intrinsics ( const std::vector< PlanarView > &  views,
const PinholeCamera< BrownConradyd > &  init_camera,
std::vector< Eigen::Isometry3d >  init_c_se3_t,
const IntrinsicsOptimOptions opts 
) -> IntrinsicsOptimizationResult< PinholeCamera< BrownConradyd > >

◆ optimize_intrinsics() [3/3]

template auto calib::optimize_intrinsics ( const std::vector< PlanarView > &  views,
const ScheimpflugCamera< PinholeCamera< BrownConradyd > > &  init_camera,
std::vector< Eigen::Isometry3d >  init_c_se3_t,
const IntrinsicsOptimOptions opts 
) -> IntrinsicsOptimizationResult< ScheimpflugCamera< PinholeCamera< BrownConradyd > > >

◆ optimize_intrinsics_semidlt()

IntrinsicsOptimizationResult< PinholeCamera< BrownConradyd > > calib::optimize_intrinsics_semidlt ( const std::vector< PlanarView > &  views,
const CameraMatrix initial_guess,
const IntrinsicsOptimOptions opts = {} 
) -> IntrinsicsOptimizationResult<PinholeCamera<BrownConradyd>>

Definition at line 155 of file intrinsicssemidlt.cpp.

◆ optimize_planar_pose()

auto calib::optimize_planar_pose ( const PlanarView view,
const CameraMatrix intrinsics,
const Eigen::Isometry3d &  init_pose,
const PlanarPoseOptions opts = {} 
) -> PlanarPoseResult

Definition at line 84 of file planarpose.cpp.

◆ params_to_h()

static auto calib::params_to_h ( const HomographyParams params) -> Mat3
static

Definition at line 95 of file homography.cpp.

◆ planar_observables_to_observables()

template<typename T >
static void calib::planar_observables_to_observables ( const PlanarView planar_obs,
std::vector< Observation< T > > &  obs,
const Eigen::Transform< T, 3, Eigen::Isometry > &  camera_se3_target 
)
static

Definition at line 79 of file observationutils.h.

◆ plane_rms()

double calib::plane_rms ( const std::vector< Eigen::Vector3d > &  pts,
const Eigen::Vector4d &  plane 
)
inline

Definition at line 93 of file linescan.h.

◆ points_from_view()

template<camera_model CameraT>
std::vector< Eigen::Vector3d > calib::points_from_view ( LineScanView  view,
const CameraT &  camera 
)

Definition at line 64 of file linescan.h.

◆ populate_quat_tran()

void calib::populate_quat_tran ( const Eigen::Isometry3d &  pose,
std::array< double, 4 > &  quat,
std::array< double, 3 > &  translation 
)
inline

Definition at line 43 of file observationutils.h.

◆ pose_from_homography()

auto calib::pose_from_homography ( const CameraMatrix kmtx,
const Eigen::Matrix3d &  hmtx 
) -> PoseFromHResult

Estimates the camera pose from a homography matrix.

Given the camera intrinsic matrix and a homography matrix, this function computes the rotation and translation (pose) of the camera relative to a planar scene.

Parameters
kmtxThe camera intrinsic matrix (CameraMatrix).
hmtxThe 3x3 homography matrix (Eigen::Matrix3d) relating the world and image plane.
Returns
PoseFromHResult Structure containing the estimated rotation and translation.

Definition at line 12 of file posefromhomography.cpp.

◆ pose_from_homography_normalized()

Eigen::Isometry3d calib::pose_from_homography_normalized ( const Eigen::Matrix3d &  hmtx) -> Eigen::Isometry3d

Definition at line 17 of file planarpose_linear.cpp.

◆ pose_to_array()

std::array< double, 6 > calib::pose_to_array ( const Eigen::Isometry3d &  pose)
inline

Definition at line 65 of file se3_utils.h.

◆ process_planar_view()

static auto calib::process_planar_view ( const CameraMatrix kmtx,
const HomographyResult hres 
) -> ViewEstimateData
static

Definition at line 86 of file intrinsicsdlt.cpp.

◆ product()

template<typename T >
std::pair< Eigen::Matrix< T, 3, 3 >, Eigen::Matrix< T, 3, 1 > > calib::product ( const Eigen::Matrix< T, 3, 3 > &  rotation1,
const Eigen::Matrix< T, 3, 1 > &  translation1,
const Eigen::Matrix< T, 3, 3 > &  rotation2,
const Eigen::Matrix< T, 3, 1 > &  translation2 
)

Definition at line 35 of file observationutils.h.

◆ project_to_so3()

Eigen::Matrix3d calib::project_to_so3 ( const Eigen::Matrix3d &  rmtx)
inline

Definition at line 10 of file se3_utils.h.

◆ quat_array_to_rotmat()

template<typename T >
static Eigen::Matrix< T, 3, 3 > calib::quat_array_to_rotmat ( const T *const  arr)
static

Definition at line 21 of file observationutils.h.

◆ ransac()

template<class Estimator >
auto calib::ransac ( const std::vector< typename Estimator::Datum > &  data,
const RansacOptions opts = {} 
) -> RansacResult<typename Estimator::Model>

Definition at line 122 of file ransac.h.

◆ restore_pose()

Eigen::Isometry3d calib::restore_pose ( const std::array< double, 4 > &  quat,
const std::array< double, 3 > &  translation 
)
inline

Definition at line 56 of file observationutils.h.

◆ ridge_llsq()

template<class Mat , class Vec >
Eigen::VectorXd calib::ridge_llsq ( const Mat &  amtx,
const Vec &  bvec,
double  lambda = 1e-10 
)
inline

Definition at line 58 of file se3_utils.h.

◆ sanitize_intrinsics()

auto calib::sanitize_intrinsics ( const CameraMatrix kmtx,
const std::optional< CalibrationBounds > &  bounds 
) -> std::pair<CameraMatrix, bool>
inline

Definition at line 64 of file intrinsics_utils.h.

◆ set_param_constraints()

template<camera_model CameraT>
static void calib::set_param_constraints ( ceres::Problem &  problem,
const ExtrinsicOptions options,
ExtrinsicBlocks< CameraT > &  blocks 
)
static

Definition at line 110 of file extrinsics.cpp.

◆ set_residual_blocks()

template<camera_model CameraT>
static void calib::set_residual_blocks ( ceres::Problem &  problem,
const std::vector< MulticamPlanarView > &  views,
const std::vector< CameraT > &  cameras,
const ExtrinsicOptions options,
ExtrinsicBlocks< CameraT > &  blocks 
)
static

Definition at line 87 of file extrinsics.cpp.

◆ skew()

Eigen::Matrix3d calib::skew ( const Eigen::Vector3d &  vec)
inline

Definition at line 21 of file se3_utils.h.

◆ solve_full()

static auto calib::solve_full ( const std::vector< PlanarView > &  views,
const IntrinsicBlocks blocks,
const IntrinsicsOptimOptions opts 
) -> std::optional<DistortionWithResiduals<double>>
static

Definition at line 77 of file intrinsicssemidlt.cpp.

◆ solve_linear_system()

static auto calib::solve_linear_system ( const LinearSystem system) -> std::optional<Eigen::VectorXd>
static

Definition at line 195 of file intrinsicsdlt.cpp.

◆ solve_llsq()

Eigen::VectorXd calib::solve_llsq ( const Eigen::MatrixXd &  amtx,
const Eigen::VectorXd &  bvec 
)
inline

Definition at line 53 of file se3_utils.h.

◆ solve_problem()

void calib::solve_problem ( ceres::Problem &  problem,
const OptimOptions &  opts,
OptimResult result 
)
inline

Definition at line 27 of file ceresutils.h.

◆ symmetric_rms_px() [1/2]

static auto calib::symmetric_rms_px ( const Eigen::Matrix3d &  hmtx,
const PlanarView view,
std::span< const int >  inliers 
) -> double
static

Definition at line 21 of file intrinsicsdlt.cpp.

◆ symmetric_rms_px() [2/2]

static auto calib::symmetric_rms_px ( const Eigen::Matrix3d &  hmtx,
const std::vector< PlanarObservation > &  data,
std::span< const int >  inliers 
) -> double
static

Definition at line 18 of file homography.cpp.

◆ symmetric_transfer_error()

static auto calib::symmetric_transfer_error ( const Eigen::Matrix3d &  hmtx,
const Eigen::Vector2d &  xy,
const Eigen::Vector2d &  uv 
) -> double
static

Definition at line 80 of file homographyestimator.cpp.

◆ to_json() [1/4]

void calib::to_json ( nlohmann::json &  j,
const BrownConradyd d 
)
inline

Definition at line 416 of file distortion.h.

◆ to_json() [2/4]

void calib::to_json ( nlohmann::json &  j,
const DualDistortion d 
)
inline

Definition at line 407 of file distortion.h.

◆ to_json() [3/4]

template<distortion_model DistortionT>
void calib::to_json ( nlohmann::json &  j,
const PinholeCamera< DistortionT > &  cam 
)
inline

Definition at line 168 of file pinhole.h.

◆ to_json() [4/4]

template<class T , std::enable_if_t< std::is_aggregate_v< T >, int > = 0>
void calib::to_json ( nlohmann::json &  j,
const T &  value 
)

Definition at line 49 of file json.h.

◆ to_observation()

template<typename T >
Observation< T > calib::to_observation ( const PlanarObservation obs,
const T *  pose6 
)

Definition at line 98 of file observationutils.h.

◆ undistort()

template<typename T >
auto calib::undistort ( Eigen::Matrix< T, 2, 1 >  norm_xy,
const Eigen::Matrix< T, Eigen::Dynamic, 1 > &  coeffs 
) -> Eigen::Matrix<T, 2, 1>

Definition at line 121 of file distortion.h.

◆ v_ij()

static auto calib::v_ij ( const Eigen::Matrix3d &  hmtx,
int  i,
int  j 
) -> Eigen::Matrix<double, 1, 6>
static

Definition at line 93 of file zhang.cpp.

◆ validate_input() [1/3]

template<camera_model CameraT>
void calib::validate_input ( const std::vector< BundleObservation > &  observations,
const std::vector< CameraT > &  initial_cameras 
)

Definition at line 136 of file bundle.cpp.

◆ validate_input() [2/3]

template<camera_model CameraT>
static void calib::validate_input ( const std::vector< CameraT > &  init_cameras,
const std::vector< Eigen::Isometry3d > &  init_c_se3_r,
const std::vector< Eigen::Isometry3d > &  init_r_se3_t,
const std::vector< MulticamPlanarView > &  views 
)
static

Definition at line 163 of file extrinsics.cpp.

◆ validate_input() [3/3]

static void calib::validate_input ( const std::vector< PlanarView > &  views)
static

Definition at line 92 of file intrinsics.cpp.

◆ validate_observations()

void calib::validate_observations ( const std::vector< LineScanView > &  views)
inline

Definition at line 39 of file linescan.h.

◆ zhang_bmtx()

static auto calib::zhang_bmtx ( const Eigen::VectorXd &  b) -> Eigen::Matrix3d
static

Constructs B = K^{-T} K^{-1} from the 6-vector b.

Definition at line 9 of file zhang.cpp.

◆ zhang_intrinsics_from_hs()

auto calib::zhang_intrinsics_from_hs ( const std::vector< HomographyResult > &  hs) -> std::optional<CameraMatrix>

Definition at line 171 of file zhang.cpp.

Variable Documentation

◆ k_default_max_iterations

constexpr int calib::k_default_max_iterations = 5
constexpr

Improved linear initialization with distortion estimation.

Definition at line 66 of file intrinsics.h.

◆ optim_to_ceres

const std::map<OptimizerType, ceres::LinearSolverType> calib::optim_to_ceres
static
Initial value:
= {
{OptimizerType::DEFAULT, ceres::SPARSE_NORMAL_CHOLESKY},
{OptimizerType::SPARSE_SCHUR, ceres::SPARSE_SCHUR},
{OptimizerType::DENSE_SCHUR, ceres::DENSE_SCHUR},
{OptimizerType::DENSE_QR, ceres::DENSE_QR}}

Definition at line 21 of file ceresutils.h.