Chessboard calibration

// typedefs

typedef std::map<std::string, TImageCalibData> mrpt::vision::TCalibrationImageList;
typedef void(*)(const TImageStereoCallbackData&d, void*user_data) mrpt::vision::TSteroCalibCallbackFunctor;
typedef std::vector<TImageStereoCalibData> mrpt::vision::TCalibrationStereoImageList;

// structs

struct mrpt::vision::TImageCalibData;
struct mrpt::vision::TImageStereoCalibData;
struct mrpt::vision::TImageStereoCallbackData;
struct mrpt::vision::TStereoCalibParams;
struct mrpt::vision::TStereoCalibResults;

// global functions

bool mrpt::vision::checkerBoardCameraCalibration(
    TCalibrationImageList& images,
    unsigned int check_size_x,
    unsigned int check_size_y,
    double check_squares_length_X_meters,
    double check_squares_length_Y_meters,
    mrpt::img::TCamera& out_camera_params,
    bool normalize_image = true,
    double* out_MSE = nullptr,
    bool skipDrawDetectedImgs = false,
    bool useScaramuzzaAlternativeDetector = false
    );

bool mrpt::vision::checkerBoardCameraCalibration(
    TCalibrationImageList& images,
    unsigned int check_size_x,
    unsigned int check_size_y,
    double check_squares_length_X_meters,
    double check_squares_length_Y_meters,
    mrpt::math::CMatrixDouble33& intrinsicParams,
    std::vector<double>& distortionParams,
    bool normalize_image = true,
    double* out_MSE = nullptr,
    bool skipDrawDetectedImgs = false,
    bool useScaramuzzaAlternativeDetector = false
    );

bool mrpt::vision::findChessboardCorners(
    const mrpt::img::CImage& img,
    std::vector<mrpt::img::TPixelCoordf>& cornerCoords,
    unsigned int check_size_x,
    unsigned int check_size_y,
    bool normalize_image = true,
    bool useScaramuzzaMethod = false
    );

void mrpt::vision::findMultipleChessboardsCorners(
    const mrpt::img::CImage& img,
    std::vector<std::vector<mrpt::img::TPixelCoordf>>& cornerCoords,
    unsigned int check_size_x,
    unsigned int check_size_y
    );

bool mrpt::vision::checkerBoardStereoCalibration(TCalibrationStereoImageList& images, const TStereoCalibParams& params, TStereoCalibResults& out_results);

Typedefs

typedef std::map<std::string, TImageCalibData> mrpt::vision::TCalibrationImageList

A list of images, used in checkerBoardCameraCalibration.

See also:

checkerBoardCameraCalibration

typedef void(*)(const TImageStereoCallbackData&d, void*user_data) mrpt::vision::TSteroCalibCallbackFunctor

Prototype of optional user callback function.

typedef std::vector<TImageStereoCalibData> mrpt::vision::TCalibrationStereoImageList

A list of images, used in checkerBoardStereoCalibration.

See also:

checkerBoardStereoCalibration

Global Functions

bool mrpt::vision::checkerBoardCameraCalibration(
    TCalibrationImageList& images,
    unsigned int check_size_x,
    unsigned int check_size_y,
    double check_squares_length_X_meters,
    double check_squares_length_Y_meters,
    mrpt::img::TCamera& out_camera_params,
    bool normalize_image = true,
    double* out_MSE = nullptr,
    bool skipDrawDetectedImgs = false,
    bool useScaramuzzaAlternativeDetector = false
    )

Performs a camera calibration (computation of projection and distortion parameters) from a sequence of captured images of a checkerboard.

Parameters:

input_images

[IN/OUT] At input, this list must have one entry for each image to process. At output the original, detected checkboard and rectified images can be found here. See TImageCalibData.

check_size_x

[IN] The number of squares in the checkerboard in the X direction.

check_size_y

[IN] The number of squares in the checkerboard in the Y direction.

check_squares_length_X_meters

[IN] The size of each square in the checkerboard, in meters, in the X axis.

check_squares_length_Y_meters

[IN] This will typically be equal to check_squares_length_X_meters.

intrinsicParams

[OUT] The 3x3 intrinsic parameters matrix. See https://www.mrpt.org/Camera_Parameters

distortionParams

[OUT] The 1x4 vector of distortion parameters: k1 k2 p1 p2. See https://www.mrpt.org/Camera_Parameters

normalize_image

[IN] Select OpenCV flag

out_MSE

[OUT] If set to !=nullptr, the mean square error of the reprojection will be stored here (in pixel units).

skipDrawDetectedImgs

[IN] Whether to skip the generation of the undistorted and detected images in each TImageCalibData

useScaramuzzaAlternativeDetector

[IN] Whether to use an alternative detector. See CImage::findChessboardCorners for more deatails and references.

Returns:

false on any error (more info will be dumped to cout), or true on success.

See also:

The camera-calib-gui application is a user-friendly GUI to this class.

CImage::findChessboardCorners, checkerBoardStereoCalibration

bool mrpt::vision::findChessboardCorners(
    const mrpt::img::CImage& img,
    std::vector<mrpt::img::TPixelCoordf>& cornerCoords,
    unsigned int check_size_x,
    unsigned int check_size_y,
    bool normalize_image = true,
    bool useScaramuzzaMethod = false
    )

Look for the corners of a chessboard in the image using one of two different methods.

Look for the corners of a chessboard in the image.

The search algorithm will be OpenCV’s function cvFindChessboardCorners or its improved version published by M. Rufli, D. Scaramuzza, and R. Siegwart. See: http://robotics.ethz.ch/~scaramuzza/Davide_Scaramuzza_files/Research/OcamCalib_Tutorial.htm and the papers:

    1. Scaramuzza, D., Martinelli, A. and Siegwart, R. (2006), A Toolbox for Easily Calibrating Omnidirectional Cameras, Proceedings of the IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS 2006), Beijing, China, October 2006.

    1. Scaramuzza, D., Martinelli, A. and Siegwart, R., (2006). “A Flexible Technique for Accurate Omnidirectional Camera Calibration and Structure from Motion”, Proceedings of IEEE International Conference of Vision Systems (ICVS’06), New York, January 5-7, 2006.

    1. Rufli, M., Scaramuzza, D., and Siegwart, R. (2008), Automatic Detection of Checkerboards on Blurred and Distorted Images, Proceedings of the IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS 2008), Nice, France, September 2008.

After detecting the corners with either method, it’s called “cvFindCornerSubPix” to achieve subpixel accuracy.

Parameters:

cornerCoords

[OUT] The pixel coordinates of all the corners.

check_size_x

[IN] The number of squares, in the X direction

check_size_y

[IN] The number of squares, in the Y direction

normalize_image

[IN] Whether to normalize the image before detection

useScaramuzzaMethod

[IN] Whether to use the alternative, more robust method by M. Rufli, D. Scaramuzza, and R. Siegwart.

cornerCoords

[OUT] The pixel coordinates of all the corners.

check_size_x

[IN] The number of squares, in the X direction

check_size_y

[IN] The number of squares, in the Y direction

normalize_image

[IN] Whether to normalize the image before detection

useScaramuzzaMethod

[IN] Whether to use the alternative, more robust method by M. Rufli, D. Scaramuzza, and R. Siegwart.

Returns:

true on success

true on success

See also:

findMultipleChessboardsCorners, mrpt::vision::checkerBoardCameraCalibration, drawChessboardCorners

void mrpt::vision::findMultipleChessboardsCorners(
    const mrpt::img::CImage& img,
    std::vector<std::vector<mrpt::img::TPixelCoordf>>& cornerCoords,
    unsigned int check_size_x,
    unsigned int check_size_y
    )

Look for the corners of one or more chessboard/checkerboards in the image.

This method uses an improved version of OpenCV’s cvFindChessboardCorners published by M. Rufli, D. Scaramuzza, and R. Siegwart. See: http://robotics.ethz.ch/~scaramuzza/Davide_Scaramuzza_files/Research/OcamCalib_Tutorial.htm and the papers:

    1. Scaramuzza, D., Martinelli, A. and Siegwart, R. (2006), A Toolbox for Easily Calibrating Omnidirectional Cameras, Proceedings of the IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS 2006), Beijing, China, October 2006.

    1. Scaramuzza, D., Martinelli, A. and Siegwart, R., (2006). “A Flexible Technique for Accurate Omnidirectional Camera Calibration and Structure from Motion”, Proceedings of IEEE International Conference of Vision Systems (ICVS’06), New York, January 5-7, 2006.

    1. Rufli, M., Scaramuzza, D., and Siegwart, R. (2008), Automatic Detection of Checkerboards on Blurred and Distorted Images, Proceedings of the IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS 2008), Nice, France, September 2008.

That method has been extended in this MRPT implementation to automatically detect a number of different checkerboards in the same image.

This method uses an improved version of OpenCV’s cvFindChessboardCorners published by M. Rufli, D. Scaramuzza, and R. Siegwart. That method has been extended in this MRPT implementation to automatically detect a number of different checkerboards in the same image.

Parameters:

cornerCoords

[OUT] A vector of N vectors of pixel coordinates, for each of the N chessboards detected.

check_size_x

[IN] The number of squares, in the X direction

check_size_y

[IN] The number of squares, in the Y direction

cornerCoords

[OUT] A vector of N vectors of pixel coordinates, for each of the N chessboards detected.

check_size_x

[IN] The number of squares, in the X direction

check_size_y

[IN] The number of squares, in the Y direction

See also:

mrpt::vision::checkerBoardCameraCalibration, drawChessboardCorners

mrpt::vision::checkerBoardCameraCalibration, drawChessboardCorners

bool mrpt::vision::checkerBoardStereoCalibration(
    TCalibrationStereoImageList& images,
    const TStereoCalibParams& params,
    TStereoCalibResults& out_results
    )

Optimize the calibration parameters of a stereo camera or a RGB+D (Kinect) camera.

This computes the projection and distortion parameters of each camera, and their relative spatial pose, from a sequence of pairs of captured images of a checkerboard. A custom implementation of an optimizer (Levenberg-Marquartd) seeks for the set of selected parameters to estimate that minimize the reprojection errors.

See also the ready-to-use application: kinect-calibrate

Parameters:

input_images

[IN/OUT] At input, this list must have one entry for each image to process. At output the original, detected checkboard and rectified images can be found here. See TImageCalibData.

params

[IN] Mandatory: the user must provide the size of the checkerboard, which parameters to optimize and which to leave fixed to zero, etc.

out_results

[OUT] The results of the calibration, and its uncertainty measure, will be found here upon return.

Returns:

false on any error (more info will be dumped to cout), or true on success.

See also:

CImage::findChessboardCorners, checkerBoardCameraCalibration, mrpt::hwdrivers::CKinect