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:
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:
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:
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.
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.
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:
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.
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.
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