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
- All the tools use
/usr/bin/envin the#!line. People who live life on hard mode now have it slightly easier Tools to support more file formats:
These are experimental. Please let me know if these are or aren't useful
mrcal-stereo,mrcal.stereo_range()work properly ifdisparity_min>0- The
mrcal-stereoGUI displays the pixel coordinates for both cameras, not just the one under the cursor
Build
- 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
- The Procrustes fit functions (
mrcal.align_procrustes_vectors_R01(),mrcal.align_procrustes_vectors_Rt01()) detect and report errors in the input data mrcal.show_projection_diff()has similar contour-generating options as whatmrcal.show_projection_uncertainty()has- renamed
mrcal.residuals_chessboard()tomrcal.residuals_board(). Both names are available for backwards compatibility mrcal.show_residuals_...()functions andmrcal-show-residuals-...tools now all havecbmaxand--cbmaxoptions respectively to set the upper bound for the mapping in the heat map display- Added
mrcal.CHOLMOD_factorization.rcond()as an interface tocholmod_rcond() mrcal.worst_direction_stdev()works with NxN arrays, not just 2x2mrcal.ref_calibration_object()has a newoptimization_inputsargument. This provides a convenient shorthand to get the object used in a particular calibration- Added
mrcal.R_aligned_to_vector()to produce a non-unique rotation to map a given vector to [0,0,1] - Added
mrcal.sorted_eig()to compute an eigenvalue decomposition with sorted eigenvalues - Added
mrcal.write_point_cloud_as_ply()to write a point cloud as a.plyfile mrcal.apply_color_map()supports all gnuplot rgbformulae, above the 7,5,15 defaultmrcal.stereo_range()has more optional arguments:disparity_maxto set the upper valid-disparity bounddisparity_scaled_min,disparity_scaled_maxto act on the raw disparity data produced by the stereo matcher
C 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_tmrcal_image_uint8_tmrcal_image_int16_tmrcal_image_uint16_tmrcal_image_int32_tmrcal_image_uint32_tmrcal_image_int64_tmrcal_image_uint64_tmrcal_image_float_tmrcal_image_double_tmrcal_image_bgr_t
- Renamed the
bgr_ttype tomrcal_bgr_t. For namespacing. mrcal_rectification_maps()supportsLENSMODEL_LATLONandLENSMODEL_PINHOLErectificationThe 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 rangesmrcal_stereo_range_dense()to convert a disparity image to a range imagemrcal_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_boardargument:mrcal_pack_solver_state_vector()mrcal_unpack_solver_state_vector()
- C API breaking change:
bgr_tstructure renamed tomrcal_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_maxarguments now must be passed in as kwargs, and not as positionals.