Skip to content

About

[RA-P'2026] Automatic Reproducible Camera Intrinsic Calibration (自动筛选数据的相机标定工具箱)

Topics

Resources

Stars

11 stars

Watchers

0 watching

Forks

Latest commit

 

History

12 Commits

Folders and files

Repository files navigation

Automatic Reproducible Camera Intrinsic Calibration

Xiangcheng Hu

English | 中文

IntrinsicCalib

RA-PVideoPRs-WelcomeGitHub StarsFORKGitHub IssuesLicense

Introduction

Accurate camera intrinsic calibration depends on the quality of the collected images, yet existing target-based methods often require the practitioner to select high-quality images and to specify the radial distortion order manually. This work determines both from the collected data.

Key insight: the two decisions are coupled through the residual. A higher-order model lowers the residual scale that defines the rejection threshold, and the calibration-set residual cannot validate the added coefficient. Image rejection therefore runs under each candidate order, and the order is selected on held-out images with the intrinsics and distortion fixed.

  • Intrinsic calibration method. An automatic and operator-free method iteratively selects high-quality images and the distortion order, yielding accurate and reproducible intrinsics.
  • Distortion-order selection. A criterion evaluates each candidate on held-out images with the intrinsics and distortion fixed, avoiding the use of calibration-set residuals to assess model adequacy.
  • Interactive calibration tool. An open-source tool for chessboard and AprilGrid targets, validated on public datasets and real-world robots.
pipeline algorithm

News

  • 2026/11: The paper is published in IEEE Robotics and Automation Practice (RA-P) as early access, DOI: 10.1109/RAP.2026.3751239.
  • 2026/11: The paper has been accepted by IEEE Robotics and Automation Practice (RA-P).
  • 2026/10/11: The calibration tool, data and experiment scripts are released.
  • 2026/09/09: The paper is available on arXiv.

Video

Click the image to play the full video (92 s).

Method

Image selection. Stage 1 admits an image only if the extractor recovers the complete inner-corner grid. Stage 2 iteratively rejects the images whose mean residual exceeds a multiple of the median and re-solves the calibration:

$$ \tau^{(t)} = \kappa,\tilde{e}^{(t)}, \qquad \mathcal{I}^{(t+1)} = \lbrace, i\in\mathcal{I}^{(t)} \mid \bar{e}_i^{(t)} \le \tau^{(t)} ,\rbrace $$

Distortion-order selection. The accepted set is split into an estimation subset and a validation subset $\mathcal{V}$. Each candidate is estimated with Stage 2 applied internally, and only the board pose is re-estimated on $\mathcal{V}$. $\mathrm{M}_3$ (adds $k_3$ to $\mathrm{M}_2$) is adopted if and only if it degrades neither the mean nor the worst-view error:

$$ \bar{e}_{\mathrm{v}}(\mathrm{M}_3) \le \alpha,\bar{e}_{\mathrm{v}}(\mathrm{M}_2) \quad\text{and}\quad e^{\max}_{\mathrm{v}}(\mathrm{M}_3) \le \beta,e^{\max}_{\mathrm{v}}(\mathrm{M}_2) $$

All hyper-parameters are fixed across every dataset: $\kappa=2$, $\alpha=\beta=1$, $N_{\min}=15$, $N_{\mathrm{stop}}=8$, $T_{\max}=3$.

Interactive tool. The tool displays the filtering status of every image and the distribution of calibration points, and records every decision. Left: a chessboard session (Rig-A, played at 3x). Right: an AprilGrid session (Rig-C).

Datasets

Dataset Camera Target Data
Rig-A 1920 x 1080, 111° chessboard 11 x 8, 45 mm 39 images
Rig-B second camera of the same model chessboard 11 x 8, 45 mm 64 images
Rig-C handheld stereo FLIR, 1440 x 1080, 113° 3 x 3 AprilGrid sessions D1, D2; sequences S1, S2, S3
Rig-D wheeled robot, Rig-A camera model chessboard 11 x 8, 45 mm one 163 s sequence
Public OpenCalib, ROS, OpenCV chessboard five sessions

Rig-A and Rig-B ship in data/. The Rig-C and Rig-D bags are available from Baidu Netdisk (code vihg), and the public sessions are fetched from their original sources. docs/DATA.md lists the data of every experiment.

Results

Image selection and cross-session consistency. On Rig-A, the two stages reduce the held-out error from 0.419 to 0.316 px (25%). On Rig-C, the method reduces the cross-session error of Kalibr by 36 to 50% on both cameras, and the focal length varies by less than 1.5 px between the days, against about 7 px for Kalibr.

selection tab_rigc

Order selection and ablation. On Rig-A, $\mathrm{M}_3$ further reduces the held-out mean to 0.299 px and the worst view from 0.590 to 0.554 px. On Rig-C, the baseline with all images and $\mathrm{M}_2$ (ours-$\mathrm{M}_2$) reaches a cross-session error of 0.513 to 1.025 px, against 0.197 to 0.244 px for the full pipeline.

order

Public sessions and odometry. The pipeline achieves the lowest held-out mean on all five public sessions. With OpenVINS, the intrinsics yield the lowest trajectory error on all three Rig-C sequences and the lowest median error on Rig-D.

tab_public tab_vio

Getting Started

The implementation uses Python 3.10, OpenCV 4.13 and PySide6, and has been tested on Ubuntu 20.04.

git clone https://github.com/JokerJohn/IntrinsicCalib.git && cd IntrinsicCalib
conda create -n intrinsic_calib python=3.10 && conda activate intrinsic_calib
pip install -r requirements.txt
sudo apt install g++ pkg-config libopencv-dev libeigen3-dev   # Kalibr extractors, compiled on first use

python tool/run_intrinsics_gui.py data/rig_a                  # interactive tool: Detect All, then Calibrate
python experiments/public/experiment/rap_headless.py data/rig_a --out rig_a.json   # headless

The headless run returns 39 detected, 27 after Stage 1, 20 final, $\mathrm{M}_3$ and 0.143 px on the retained images. docs/REPRODUCE.md describes the Python interface, the commands that reproduce every table of the paper and the tests.

tool/          calibration package intrinsic_calib and the launcher
experiments/   public (Table I), rigc (Table II), vio (Table III)
data/          Rig-A, Rig-B, Rig-C Kalibr files, manifest of the bags
tests/         tests of the Rig-A selection, the AprilGrid extraction and the tool

TODO

  • Release the calibration tool and the experiment scripts
  • Release the Rig-A to Rig-D data
  • Add rational and fisheye candidate models
  • Add coverage constraints
  • Support rolling-shutter and event cameras

Citation

@article{hu2026intrinsiccalib,
  title         = {Automatic Reproducible Camera Intrinsic Calibration},
  author        = {Hu, Xiangcheng},
  journal       = {IEEE Robotics and Automation Practice},
  doi           = {10.1109/RAP.2026.3751239},
  eprint        = {2609.10082},
  archivePrefix = {arXiv},
  primaryClass  = {cs.RO},
  year          = {2026}
}

Related work: P²Calib and VeriCalib.

Acknowledgment

The tool uses OpenCV and the ethz_apriltag2 decoder of Kalibr. The evaluation uses the data and baselines of OpenCalib, ROS camera_calibration, mrcal and Kalibr. The odometry experiments and the ground truth use OpenVINS, evo, FAST-LIO2, PALoc and Manual Loop Closure Tools.

License

Released under the MIT license. tool/intrinsic_calib/kalibr_extractor/third_party/ contains the ethz_apriltag2 sources and the target-extractor code of Kalibr (BSD, KALIBR_LICENSE). The public sessions keep the licences of their sources.

Contributors

About

[RA-P'2026] Automatic Reproducible Camera Intrinsic Calibration (自动筛选数据的相机标定工具箱)

Topics

Resources

Stars

11 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages