mrcal - camera calibrations and more!

mrcal is a toolkit that provides improved methods for making and using camera models (calibration, tracking, mapping, photogrammetry, etc). It was originally built at NASA/JPL to generate the high-accuracy calibrations demanded by long-range stereo, so it provides facilities to calibrate cameras, thoroughly analyze the accuracy of the result, and to propagate and report uncertainties.

Why mrcal?

Because all other tools are terrible if you care about accuracy. They make basic questions like "how much data should I gather for a calibration?" and "how good is this calibration I just computed?" and "how different are these two models?" unanswerable. The previous state-of-the-art was good-enough for low-resolution cameras and long-focal-length lenses and low-range stereo. But today, the existing tools are often insufficient.

This toolkit allows the user to confidently produce calibrations that are as good as possible. It provides lots of visualization capabilities to evaluate various properties of a model solution. And it provides powerful analysis methods, such as model differencing and quantification of projection and triangulation uncertainty. To fit the real-world lens behavior mrcal loosens many assumptions common in other toolkits: the calibration chessboard isn't assumed to be flat, lenses aren't assumed to follow simple parametric models, rectified stereo isn't done with a pinhole model, and so on.

mrcal consists of

  • a C library for core functionality
  • a Python library for higher-level functions
  • pre-made commandline tools to handle common tasks

Documentation index

Overview, background

  • The tour of mrcal: if this is your first exposure to mrcal, start here. This goes over the high-level capabilities of the toolkit, to give a good sense of what mrcal can do that's different and better than other tools.
  • Terminology and conventions

Details about the internals


To cite this work in a publication, use this bibtex stanza:

  author = "Dima Kogan",
  title = "mrcal",
  howpublished = "\url{}",

Dev communication

For now let's use the github issue tracker for bug reporting and for communication in general. At some point I will probably set up a mailing list as well.


Dima Kogan <>

License and copyright

These are listed on their own page.