MRPT  2.0.0
Classes | Typedefs | Functions
Chessboard calibration

Detailed Description

Collaboration diagram for Chessboard calibration:

Classes

struct  mrpt::vision::TImageCalibData
 Data associated to each image in the calibration process mrpt::vision::checkerBoardCameraCalibration (All the information can be left empty and will be filled up in the calibration method). More...
 
struct  mrpt::vision::TImageStereoCalibData
 Data associated to each stereo image in the calibration process mrpt::vision::checkerBoardCameraCalibration (All the information can be left empty and will be filled up in the calibration method). More...
 
struct  mrpt::vision::TImageStereoCallbackData
 Params of the optional callback provided by the user. More...
 
struct  mrpt::vision::TStereoCalibParams
 Input parameters for mrpt::vision::checkerBoardStereoCalibration. More...
 
struct  mrpt::vision::TStereoCalibResults
 Output results for mrpt::vision::checkerBoardStereoCalibration. More...
 

Typedefs

using mrpt::vision::TCalibrationImageList = std::map< std::string, TImageCalibData >
 A list of images, used in checkerBoardCameraCalibration. More...
 
using mrpt::vision::TSteroCalibCallbackFunctor = void(*)(const TImageStereoCallbackData &d, void *user_data)
 Prototype of optional user callback function. More...
 
using mrpt::vision::TCalibrationStereoImageList = std::vector< TImageStereoCalibData >
 A list of images, used in checkerBoardStereoCalibration. More...
 

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. More...
 
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)
 Look for the corners of a chessboard in the image using one of two different methods. More...
 
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. More...
 
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. More...
 

Typedef Documentation

◆ TCalibrationImageList

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

A list of images, used in checkerBoardCameraCalibration.

See also
checkerBoardCameraCalibration

Definition at line 57 of file chessboard_camera_calib.h.

◆ TCalibrationStereoImageList

A list of images, used in checkerBoardStereoCalibration.

See also
checkerBoardStereoCalibration

Definition at line 137 of file chessboard_stereo_camera_calib.h.

◆ TSteroCalibCallbackFunctor

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

Prototype of optional user callback function.

Definition at line 52 of file chessboard_stereo_camera_calib.h.

Function Documentation

◆ checkerBoardCameraCalibration() [1/2]

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.
See also
The camera-calib-gui application is a user-friendly GUI to this class.
Returns
false on any error (more info will be dumped to cout), or true on success.
See also
CImage::findChessboardCorners, checkerBoardStereoCalibration

Referenced by mrpt::vision::checkerBoardCameraCalibration().

Here is the caller graph for this function:

◆ checkerBoardCameraCalibration() [2/2]

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 
)

Definition at line 31 of file checkerboard_cam_calib.cpp.

References check_size_x, check_size_y, check_squares_length_X_meters, check_squares_length_Y_meters, mrpt::vision::checkerBoardCameraCalibration(), mrpt::img::TCamera::getDistortionParamsAsVector(), images, and mrpt::img::TCamera::intrinsicParams.

Here is the call graph for this function:

◆ checkerBoardStereoCalibration()

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.

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.
Note
See also the ready-to-use application: kinect-calibrate
See also
CImage::findChessboardCorners, checkerBoardCameraCalibration, mrpt::hwdrivers::CKinect

Definition at line 44 of file chessboard_stereo_camera_calib.cpp.

References mrpt::vision::add_lm_increment(), mrpt::math::MatrixVectorBase< Scalar, Derived >::array(), mrpt::math::CVectorDynamic< T >::asEigen(), mrpt::math::CMatrixDynamic< T >::asEigen(), ASSERT_, ASSERT_EQUAL_, mrpt::vision::build_linear_system(), mrpt::vision::TImageStereoCallbackData::calibRound, mrpt::vision::TStereoCalibParams::callback, mrpt::vision::TStereoCalibParams::callback_user_param, mrpt::vision::TStereoCalibResults::cam_params, mrpt::vision::TStereoCalibParams::check_size_x, mrpt::vision::TStereoCalibParams::check_size_y, mrpt::vision::TStereoCalibParams::check_squares_length_X_meters, mrpt::vision::TStereoCalibParams::check_squares_length_Y_meters, mrpt::img::CImage::colorImage(), mrpt::math::CMatrixDynamic< T >::cols(), mrpt::vision::TImageStereoCallbackData::current_iter, mrpt::vision::TImageStereoCallbackData::current_rmse, mrpt::img::TCamera::cx(), mrpt::img::TCamera::cy(), mrpt::vision::TImageCalibData::detected_corners, mrpt::img::CImage::drawChessboardCorners(), eps, mrpt::img::FAST_REF_OR_CONVERT_TO_GRAY, mrpt::vision::TStereoCalibResults::final_iters, mrpt::vision::TStereoCalibResults::final_number_good_image_pairs, mrpt::vision::TStereoCalibResults::final_rmse, mrpt::vision::findChessboardCorners(), mrpt::format(), mrpt::img::TCamera::fx(), mrpt::img::TCamera::fy(), mrpt::img::CImage::getHeight(), mrpt::img::CImage::getSize(), mrpt::img::CImage::getWidth(), mrpt::vision::TStereoCalibResults::image_pair_was_used, images, mrpt::vision::TImageCalibData::img_checkboard, mrpt::vision::TImageCalibData::img_original, mrpt::vision::TImageCalibData::img_rectified, mrpt::img::CImage::isExternallyStored(), mrpt::img::TCamera::k1(), mrpt::img::TCamera::k2(), mrpt::img::TCamera::k3(), mrpt::vision::lm_stat_t::left_cam_params, mrpt::vision::lm_stat_t::left_cam_poses, mrpt::vision::TStereoCalibResults::left_cam_poses, mrpt::vision::TStereoCalibResults::left_params_inv_variance, mrpt::img::TStereoCamera::leftCamera, mrpt::vision::TStereoCalibParams::maxIters, mrpt::img::TCamera::ncols, mrpt::vision::TImageStereoCallbackData::nImgsProcessed, mrpt::vision::TImageStereoCallbackData::nImgsToProcess, mrpt::vision::TStereoCalibParams::normalize_image, mrpt::img::TCamera::nrows, mrpt::vision::TStereoCalibParams::optimize_k1, mrpt::vision::TStereoCalibParams::optimize_k2, mrpt::vision::TStereoCalibParams::optimize_k3, mrpt::vision::TStereoCalibParams::optimize_t1, mrpt::vision::TStereoCalibParams::optimize_t2, out, mrpt::img::TCamera::p1(), mrpt::img::TCamera::p2(), mrpt::vision::TImageCalibData::projectedPoints_distorted, mrpt::vision::pinhole::projectPoints_with_distortion(), mrpt::math::TPose3DQuat::qr, mrpt::math::TPose3DQuat::qx, mrpt::math::TPose3DQuat::qy, mrpt::math::TPose3DQuat::qz, mrpt::math::CQuaternion< T >::r(), mrpt::vision::recompute_errors_and_Jacobians(), mrpt::vision::TImageCalibData::reconstructed_camera_pose, mrpt::vision::TStereoCalibResults::right2left_camera_pose, mrpt::vision::lm_stat_t::right2left_pose, mrpt::vision::lm_stat_t::right_cam_params, mrpt::vision::TStereoCalibResults::right_params_inv_variance, mrpt::img::TStereoCamera::rightCamera, mrpt::img::TStereoCamera::rightCameraPose, mrpt::vision::TStereoCalibParams::robust_kernel_param, mrpt::vision::lm_stat_t::swap(), mrpt::vision::TStereoCalibParams::use_robust_kernel, mrpt::vision::TStereoCalibParams::verbose, mrpt::img::TPixelCoordf::x, mrpt::math::TPose3DQuat::x, mrpt::img::TPixelCoord::x, mrpt::math::CQuaternion< T >::x(), mrpt::img::TPixelCoordf::y, mrpt::math::TPose3DQuat::y, mrpt::img::TPixelCoord::y, mrpt::math::CQuaternion< T >::y(), mrpt::math::TPose3DQuat::z, and mrpt::math::CQuaternion< T >::z().

Here is the call graph for this function:

◆ findChessboardCorners()

bool mrpt::vision::findChessboardCorners ( const mrpt::img::CImage in_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.
  • 2. 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.
  • 3. 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.
Returns
true on success
See also
findMultipleChessboardsCorners, mrpt::vision::checkerBoardCameraCalibration, drawChessboardCorners
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.
Returns
true on success

Definition at line 35 of file checkerboard_find_corners.cpp.

References mrpt::img::CImage::asCvMat(), ASSERT_, check_size_x, check_size_y, cvFindChessboardCorners3(), mrpt::img::FAST_REF_OR_CONVERT_TO_GRAY, MRPT_END, MRPT_START, and mrpt::img::SHALLOW_COPY.

Referenced by mrpt::vision::checkerBoardStereoCalibration().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ findMultipleChessboardsCorners()

void mrpt::vision::findMultipleChessboardsCorners ( const mrpt::img::CImage in_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.
  • 2. 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.
  • 3. 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.

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
See also
mrpt::vision::checkerBoardCameraCalibration, drawChessboardCorners

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
See also
mrpt::vision::checkerBoardCameraCalibration, drawChessboardCorners

Definition at line 133 of file checkerboard_find_corners.cpp.

References mrpt::img::CImage::asCvMat(), ASSERT_, mrpt::containers::begin(), check_size_x, check_size_y, mrpt::math::crossProduct3D(), mrpt::img::FAST_REF_OR_CONVERT_TO_GRAY, find_chessboard_corners_multiple(), mrpt::img::SHALLOW_COPY, mrpt::math::size(), and mrpt::math::TPoint2D_data< T >::x.

Here is the call graph for this function:



Page generated by Doxygen 1.8.14 for MRPT 2.0.0 Git: b38439d21 Tue Mar 31 19:58:06 2020 +0200 at miƩ abr 1 00:50:30 CEST 2020