vision-calibration
High-level entry crate and facade for the calibration-rs toolbox.
This is the recommended crate for most users. It re-exports all sub-crates through a unified API.
Features
- Session API: Structured calibration workflows with step functions, state tracking, and JSON checkpointing
- 6 workflows: Planar intrinsics, Scheimpflug intrinsics, single-camera hand-eye, rig extrinsics, rig hand-eye, laserline device
- Prelude module: Minimal imports for planar "hello world" calibration
- Foundation access: Direct access to core types, linear solvers, and optimization when needed
Quick Start
Add to your Cargo.toml:
[]
= { = "https://github.com/VitalyVorobyev/calibration-rs" }
Planar Intrinsics Calibration
use *;
use ;
let mut session = new;
# let dataset: PlanarDataset = unimplemented!;
session.set_input?;
step_init?;
step_optimize?;
let result = session.export?;
Single-Camera Hand-Eye Calibration
use CalibrationSession;
use ;
let mut session = new;
# let input = unimplemented!;
session.set_input?;
step_intrinsics_init?;
step_intrinsics_optimize?;
step_handeye_init?;
step_handeye_optimize?;
let result = session.export?;
Scheimpflug Intrinsics Calibration
use PlanarDataset;
use CalibrationSession;
use ;
#
Using the Prelude
use *;
// Minimal hello-world imports:
// CalibrationSession + planar problem + planar runner + core planar types.
Available Problem Types
| Problem Type | Steps |
|---|---|
PlanarIntrinsicsProblem |
step_init → step_optimize |
SingleCamHandeyeProblem |
step_intrinsics_init → step_intrinsics_optimize → step_handeye_init → step_handeye_optimize |
RigExtrinsicsProblem |
step_intrinsics_init_all → step_intrinsics_optimize_all → step_rig_init → step_rig_optimize |
RigHandeyeProblem |
All 6 steps (intrinsics + rig + hand-eye) |
LaserlineDeviceProblem |
step_init → step_optimize |
ScheimpflugIntrinsicsProblem |
step_init → step_optimize |
Each problem type also provides a run_calibration convenience function that runs all steps.
Module Organization
| Module | Description |
|---|---|
session |
Calibration session framework (CalibrationSession, ProblemType) |
planar_intrinsics |
Single-camera intrinsics (Zhang's method) |
single_cam_handeye |
Single camera + hand-eye calibration |
rig_extrinsics |
Multi-camera rig extrinsics |
rig_handeye |
Multi-camera rig + hand-eye |
laserline_device |
Camera + laser plane device |
scheimpflug_intrinsics |
Single-camera planar intrinsics with Scheimpflug tilt |
core |
Math types, camera models, RANSAC |
linear |
Closed-form initialization algorithms |
optim |
Non-linear optimization |
synthetic |
Deterministic synthetic data generation |
prelude |
Convenient re-exports |
When to Use This Crate vs. Sub-Crates
| Use Case | Recommended |
|---|---|
| General calibration tasks | vision-calibration (this crate) |
| Only need math types/camera models | vision-calibration-core |
| Only need linear initialization | vision-calibration-linear |
| Building custom optimization | vision-calibration-optim |
| Need pipeline + JSON I/O | vision-calibration-pipeline |
Examples
See examples/ directory:
| Example | Problem Type | Data |
|---|---|---|
planar_synthetic |
Planar intrinsics | Synthetic |
planar_real |
Planar intrinsics | Real stereo images |
stereo_session |
Rig extrinsics | Real stereo images |
stereo_charuco_session |
Rig extrinsics | Real stereo ChArUco images |
handeye_synthetic |
Single-camera hand-eye | Synthetic |
handeye_session |
Single-camera hand-eye | KUKA robot data |
rig_handeye_synthetic |
Rig hand-eye | Synthetic |
laserline_device_session |
Laserline device | Session API demo |
See Also
- vision-calibration-core: Core primitives
- vision-calibration-linear: Linear solvers
- vision-calibration-optim: Non-linear optimization
- vision-calibration-pipeline: Pipelines and session API