#intrinsics #camera-intrinsic #calibration #format #fisheye #convert-model

bin+lib camera-intrinsic-calibration

Camera Intrinsic Calibration

25 releases (7 breaking)

Uses new Rust 2024

0.8.0 May 18, 2025
0.7.0 Mar 30, 2025
0.5.4 Dec 29, 2024

#229 in Math

Download history 10/week @ 2025-02-02 5/week @ 2025-02-16 112/week @ 2025-02-23 32/week @ 2025-03-02 1/week @ 2025-03-09 116/week @ 2025-03-16 10/week @ 2025-03-23 179/week @ 2025-03-30 86/week @ 2025-04-06 117/week @ 2025-04-13 15/week @ 2025-04-20 1/week @ 2025-04-27 2/week @ 2025-05-04 5/week @ 2025-05-11 122/week @ 2025-05-18

130 downloads per month

GPL-3.0-or-later

94KB
2K SLoC

camera-intrinsic-calibration

crate crate downloads

PyPI - Version PyPI - Python Version

A pure rust camera intrinsic calibration tool.

Installation

# cargo install cli
cargo install camera-intrinsic-calibration
# Or pip install cli
pip install camera-intrinsic-calibration

Or download from the latest release.

CLI Usage

# camera-calibration-rs
ccrs -h

# run intrinsic calibration on TUM vi dataset
# Download and untar
wget https://vision.in.tum.de/tumvi/exported/euroc/1024_16/dataset-calib-cam1_1024_16.tar
tar xf dataset-calib-cam1_1024_16.tar

# [Optional] export RUST_LOG=trace
ccrs dataset-calib-cam1_1024_16 --model eucm

Visualize details after calibration

# use cargo to install rerun
cargo install rerun-cli --version 0.23.2
# or use pip to install rerun
pip install rerun-sdk==0.23.2
# visualize result
rerun results/20YYMMDD_HH_MM_SS/logging.rrd
example detection

Supported formats

Dataset format

  • Euroc (default)
    dataset_root
    └── mav0
        ├── cam0
        │   └── data
        │       ├── {time_stamp}.png
        │       ├── {time_stamp}.png
        │       └── {time_stamp}.png
        └── cam1
            └── data
                ├── {time_stamp}.png
                ├── {time_stamp}.png
                └── {time_stamp}.png
    
  • General --dataset-format general
    dataset_root
    ├── cam0
    │   ├── any_file_name.png
    │   ├── any_file_name.png
    │   └── any_file_name.png
    └── cam1
        ├── any_file_name.png
        ├── any_file_name.png
        └── any_file_name.png
    
    Images can be either .png or .jpg, but .png is preferred if possible. PNG is lossless compression, while JPG is not.

Camera models

  • Extended Unified (EUCM)
  • Extended Unified with Tangential (EUCMT)
  • Unified Camera Model (UCM)
  • Kannala Brandt (KB4) aka OpenCV Fisheye
  • OpenCV (OPENCV5) aka plumb_bob in ROS
  • F-theta (FTHETA) by NVidia

Examples

cargo run -r --example convert_model

Calibrate your own camera

Please follow the tutorial.

Acknowledgements

Links:

Papers:

  • Kukelova, Zuzana, et al. "Radial distortion homography." Proceedings of the IEEE conference on computer vision and pattern recognition. 2015.

TODO

  • Multi-camera extrinsic
  • More calibration info

Dependencies

~56–91MB
~1.5M SLoC