mrcal 2.4 release notes

New in mrcal 2.4

This is yet another mostly-maintenance release. A number of bugs are fixed, and a number of new features have been added. The biggest new features:

  • mrcal can be built with clang. Try it out like this: CC=clang CXX=clang++ make. This opens up some portability improvements, such as making it easier to run on Windows.
  • Full dense stereo pipeline in C.

General fixes


  • mrcal builds with clang
  • The sources do not use _GNU_SOURCE: mrcal does not depend on glibc
  • The sources support the updated CHOLMOD APIs in the recent distros

Python API


  • Better error handling: lensmodel-parsing functions return an error code instead of asserting, if given invalid input. Affected functions:
    • mrcal_lensmodel_name_unconfigured()
    • mrcal_lensmodel_name()
    • mrcal_lensmodel_type_from_name()
    • mrcal_lensmodel_from_name()
  • More image types supported. We now have:
    • mrcal_image_int8_t
    • mrcal_image_uint8_t
    • mrcal_image_int16_t
    • mrcal_image_uint16_t
    • mrcal_image_int32_t
    • mrcal_image_uint32_t
    • mrcal_image_int64_t
    • mrcal_image_uint64_t
    • mrcal_image_float_t
    • mrcal_image_double_t
    • mrcal_image_bgr_t
  • Renamed the bgr_t type to mrcal_bgr_t. For namespacing.
  • mrcal_rectification_maps() supports LENSMODEL_LATLON and LENSMODEL_PINHOLE rectification
  • The remaining pieces for a full dense-stereo pipeline in C were implemented. The new functions are

    • mrcal_stereo_range_sparse() to convert a set of disparity values to ranges
    • mrcal_stereo_range_dense() to convert a disparity image to a range image
    • mrcal_apply_color_map() to convert a disparity or range image to a heat map for human consumption

    A dense-stereo-in-C sample is provided.

Migration notes 2.3 -> 2.4

  • C API/ABI breaking change: these functions now take an extra int Nobservations_board argument:
    • mrcal_pack_solver_state_vector()
    • mrcal_unpack_solver_state_vector()
  • C API breaking change: bgr_t structure renamed to mrcal_bgr_t
  • Python API: a function was renamed: mrcal.residuals_chessboard() -> mrcal.residuals_board(). Both names are available for backwards compatibility, but moving to the new name is recommended.
  • Python mrcal.apply_color_map() function: a_min, a_max arguments now must be passed in as kwargs, and not as positionals.