Use this class to rectify stereo images if the same distortion maps are reused over and over again.
The rectify maps are cached internally and only computed once for the camera parameters. The stereo camera calibration must be supplied in a mrpt::util::TStereoCamera structure (which provides method for loading from a plain text config file) or directly from the parameters of a mrpt::obs::CObservationStereoImages object.
Remember that the rectified images have a different set of intrinsic parameters than the original images, which can be retrieved with getRectifiedImageParams()
Works with grayscale or color images.
Refer to the program stereo-calib-gui for a tool that generates the required stereo camera parameters from a set of stereo images of a checkerboard.
Example of usage with mrpt::obs::CObservationStereoImages:
Read also the tutorial page online: http://www.mrpt.org/Rectifying_stereo_images
Definition at line 77 of file CStereoRectifyMap.h.
#include <mrpt/vision/CStereoRectifyMap.h>
Public Member Functions | |
CStereoRectifyMap () | |
Default ctor. More... | |
Rectify map preparation and setting/getting of parameters | |
bool | isSet () const |
Returns true if setFromCamParams() has been already called, false otherwise. More... | |
void | setFromCamParams (const mrpt::utils::TStereoCamera ¶ms) |
Prepares the mapping from the intrinsic, distortion and relative pose parameters of a stereo camera. More... | |
void | setFromCamParams (const mrpt::obs::CObservationStereoImages &stereo_obs) |
A wrapper to setFromCamParams() which takes the parameters from an stereo observation object. More... | |
const mrpt::utils::TStereoCamera & | getCameraParams () const |
Returns the camera parameters which were used to generate the distortion map, as passed by the user to setFromCamParams. More... | |
const mrpt::utils::TStereoCamera & | getRectifiedImageParams () const |
After computing the rectification maps, this method retrieves the calibration parameters of the rectified images (which won't have any distortion). More... | |
const mrpt::utils::TCamera & | getRectifiedLeftImageParams () const |
Just like getRectifiedImageParams() but for the left camera only. More... | |
const mrpt::utils::TCamera & | getRectifiedRightImageParams () const |
Just like getRectifiedImageParams() but for the right camera only. More... | |
void | setAlpha (double alpha) |
Sets the alpha parameter which controls the zoom in/out of the rectified images, such that: More... | |
double | getAlpha () const |
Return the alpha parameter. More... | |
void | enableResizeOutput (bool enable, unsigned int target_width=0, unsigned int target_height=0) |
If enabled, the computed maps will rectify images to a size different than their original size. More... | |
bool | isEnabledResizeOutput () const |
Returns whether resizing is enabled (default=false) More... | |
mrpt::utils::TImageSize | getResizeOutputSize () const |
Only when isEnabledResizeOutput() returns true, this gets the target size. More... | |
void | setInterpolationMethod (const mrpt::utils::TInterpolationMethod interp) |
Change remap interpolation method (default=Lineal). More... | |
mrpt::utils::TInterpolationMethod | getInterpolationMethod () const |
Get the currently selected interpolation method. More... | |
void | enableBothCentersCoincide (bool enable=true) |
If enabled (default=false), the principal points in both output images will coincide. More... | |
bool | isEnabledBothCentersCoincide () const |
const mrpt::poses::CPose3DQuat & | getLeftCameraRot () const |
After computing the rectification maps, get the rotation applied to the left/right camera so their virtual image plane is the same after rectification. More... | |
const mrpt::poses::CPose3DQuat & | getRightCameraRot () const |
See getLeftCameraRot() More... | |
void | setRectifyMaps (const std::vector< int16_t > &left_x, const std::vector< uint16_t > &left_y, const std::vector< int16_t > &right_x, const std::vector< uint16_t > &right_y) |
Direct input access to rectify maps. More... | |
void | setRectifyMapsFast (std::vector< int16_t > &left_x, std::vector< uint16_t > &left_y, std::vector< int16_t > &right_x, std::vector< uint16_t > &right_y) |
Direct input access to rectify maps. More... | |
Rectify methods | |
void | rectify (const mrpt::utils::CImage &in_left_image, const mrpt::utils::CImage &in_right_image, mrpt::utils::CImage &out_left_image, mrpt::utils::CImage &out_right_image) const |
Rectify the input image pair and save the result in a different output images - setFromCamParams() must have been set prior to calling this. More... | |
void | rectify (mrpt::utils::CImage &left_image, mrpt::utils::CImage &right_image, const bool use_internal_mem_cache=true) const |
Overloaded version for in-place rectification: replace input images with their rectified versions If use_internal_mem_cache is set to true (recommended), will reuse over and over again the same auxiliary images (kept internally to this object) needed for in-place rectification. More... | |
void | rectify (mrpt::obs::CObservationStereoImages &stereo_image_observation, const bool use_internal_mem_cache=true) const |
Overloaded version for in-place rectification of image pairs stored in a mrpt::obs::CObservationStereoImages. More... | |
void | rectify_IPL (const void *in_left_image, const void *in_right_image, void *out_left_image, void *out_right_image) const |
Just like rectify() but directly works with OpenCV's "IplImage*", which must be passed as "void*" to avoid header dependencies Output images CANNOT coincide with the input images. More... | |
Private Member Functions | |
void | internal_invalidate () |
Private Attributes | |
double | m_alpha |
bool | m_resize_output |
bool | m_enable_both_centers_coincide |
mrpt::utils::TImageSize | m_resize_output_value |
mrpt::utils::TInterpolationMethod | m_interpolation_method |
mrpt::utils::CImage | m_cache1 |
Memory caches for in-place rectification speed-up. More... | |
mrpt::utils::CImage | m_cache2 |
std::vector< int16_t > | m_dat_mapx_left |
std::vector< int16_t > | m_dat_mapx_right |
std::vector< uint16_t > | m_dat_mapy_left |
std::vector< uint16_t > | m_dat_mapy_right |
mrpt::utils::TStereoCamera | m_camera_params |
A copy of the data provided by the user. More... | |
mrpt::utils::TStereoCamera | m_rectified_image_params |
Resulting images params. More... | |
mrpt::poses::CPose3DQuat | m_rot_left |
The rotation applied to the left/right camera so their virtual image plane is the same after rectification. More... | |
mrpt::poses::CPose3DQuat | m_rot_right |
CStereoRectifyMap::CStereoRectifyMap | ( | ) |
Default ctor.
Definition at line 23 of file CStereoRectifyMap.cpp.
void CStereoRectifyMap::enableBothCentersCoincide | ( | bool | enable = true | ) |
If enabled (default=false), the principal points in both output images will coincide.
Definition at line 58 of file CStereoRectifyMap.cpp.
References internal_invalidate(), and m_enable_both_centers_coincide.
void CStereoRectifyMap::enableResizeOutput | ( | bool | enable, |
unsigned int | target_width = 0 , |
||
unsigned int | target_height = 0 |
||
) |
If enabled, the computed maps will rectify images to a size different than their original size.
Definition at line 48 of file CStereoRectifyMap.cpp.
References internal_invalidate(), m_resize_output, m_resize_output_value, mrpt::utils::TPixelCoord::x, and mrpt::utils::TPixelCoord::y.
|
inline |
Return the alpha parameter.
Definition at line 144 of file CStereoRectifyMap.h.
References m_alpha.
|
inline |
Returns the camera parameters which were used to generate the distortion map, as passed by the user to setFromCamParams.
Definition at line 112 of file CStereoRectifyMap.h.
References m_camera_params.
|
inline |
Get the currently selected interpolation method.
Definition at line 173 of file CStereoRectifyMap.h.
References m_interpolation_method.
|
inline |
After computing the rectification maps, get the rotation applied to the left/right camera so their virtual image plane is the same after rectification.
Definition at line 194 of file CStereoRectifyMap.h.
References m_rot_left.
const mrpt::utils::TStereoCamera & CStereoRectifyMap::getRectifiedImageParams | ( | ) | const |
After computing the rectification maps, this method retrieves the calibration parameters of the rectified images (which won't have any distortion).
std::exception | If the rectification maps have not been computed. |
Definition at line 459 of file CStereoRectifyMap.cpp.
References isSet(), m_rectified_image_params, and THROW_EXCEPTION.
const mrpt::utils::TCamera & CStereoRectifyMap::getRectifiedLeftImageParams | ( | ) | const |
Just like getRectifiedImageParams() but for the left camera only.
Definition at line 467 of file CStereoRectifyMap.cpp.
References isSet(), mrpt::utils::TStereoCamera::leftCamera, m_rectified_image_params, and THROW_EXCEPTION.
const mrpt::utils::TCamera & CStereoRectifyMap::getRectifiedRightImageParams | ( | ) | const |
Just like getRectifiedImageParams() but for the right camera only.
Definition at line 475 of file CStereoRectifyMap.cpp.
References isSet(), m_rectified_image_params, mrpt::utils::TStereoCamera::rightCamera, and THROW_EXCEPTION.
|
inline |
Only when isEnabledResizeOutput() returns true, this gets the target size.
Definition at line 159 of file CStereoRectifyMap.h.
References m_resize_output_value.
|
inline |
|
private |
Definition at line 32 of file CStereoRectifyMap.cpp.
References m_dat_mapx_left, m_dat_mapx_right, m_dat_mapy_left, and m_dat_mapy_right.
Referenced by enableBothCentersCoincide(), enableResizeOutput(), and setAlpha().
|
inline |
Definition at line 186 of file CStereoRectifyMap.h.
References m_enable_both_centers_coincide.
|
inline |
Returns whether resizing is enabled (default=false)
Definition at line 156 of file CStereoRectifyMap.h.
References m_resize_output.
|
inline |
Returns true if setFromCamParams() has been already called, false otherwise.
Can be used within loops to determine the first usage of the object and when it needs to be initialized.
Definition at line 90 of file CStereoRectifyMap.h.
References m_dat_mapx_left.
Referenced by getRectifiedImageParams(), getRectifiedLeftImageParams(), getRectifiedRightImageParams(), and rectify_IPL().
void CStereoRectifyMap::rectify | ( | const mrpt::utils::CImage & | in_left_image, |
const mrpt::utils::CImage & | in_right_image, | ||
mrpt::utils::CImage & | out_left_image, | ||
mrpt::utils::CImage & | out_right_image | ||
) | const |
Rectify the input image pair and save the result in a different output images - setFromCamParams() must have been set prior to calling this.
The previous contents of the output images are completely ignored, but if they are already of the correct size and type, allocation time will be saved. Recall that getRectifiedImageParams() provides you the new intrinsic parameters of these images.
std::exception | If the rectification maps have not been computed. |
Definition at line 268 of file CStereoRectifyMap.cpp.
References mrpt::utils::CImage::getAs(), mrpt::utils::CImage::isColor(), mrpt::utils::CImage::isOriginTopLeft(), mrpt::utils::TStereoCamera::leftCamera, m_camera_params, m_resize_output, m_resize_output_value, MRPT_END, MRPT_START, mrpt::utils::TCamera::ncols, mrpt::utils::TCamera::nrows, rectify_IPL(), mrpt::utils::CImage::resize(), mrpt::utils::TPixelCoord::x, and mrpt::utils::TPixelCoord::y.
Referenced by mrpt::hwdrivers::CDUO3DCamera::getObservations(), and rectify().
void CStereoRectifyMap::rectify | ( | mrpt::utils::CImage & | left_image, |
mrpt::utils::CImage & | right_image, | ||
const bool | use_internal_mem_cache = true |
||
) | const |
Overloaded version for in-place rectification: replace input images with their rectified versions If use_internal_mem_cache is set to true (recommended), will reuse over and over again the same auxiliary images (kept internally to this object) needed for in-place rectification.
The only reason not to enable this cache is when multiple threads can invoke this method simultaneously.
Definition at line 305 of file CStereoRectifyMap.cpp.
References mrpt::utils::CImage::getAs(), mrpt::utils::CImage::isColor(), mrpt::utils::CImage::isOriginTopLeft(), mrpt::utils::TStereoCamera::leftCamera, m_cache1, m_cache2, m_camera_params, m_resize_output, m_resize_output_value, MRPT_END, MRPT_START, mrpt::utils::TCamera::ncols, mrpt::utils::TCamera::nrows, rectify_IPL(), mrpt::utils::CImage::resize(), mrpt::utils::CImage::setFromIplImage(), mrpt::utils::TPixelCoord::x, and mrpt::utils::TPixelCoord::y.
void CStereoRectifyMap::rectify | ( | mrpt::obs::CObservationStereoImages & | stereo_image_observation, |
const bool | use_internal_mem_cache = true |
||
) | const |
Overloaded version for in-place rectification of image pairs stored in a mrpt::obs::CObservationStereoImages.
Upon return, the new camera intrinsic parameters will be already stored in the observation object. If use_internal_mem_cache is set to true (recommended), will reuse over and over again the same auxiliary images (kept internally to this object) needed for in-place rectification. The only reason not to enable this cache is when multiple threads can invoke this method simultaneously.
Upon return, the new camera intrinsic parameters will be already stored in the observation object.
Definition at line 377 of file CStereoRectifyMap.cpp.
References ASSERT_, mrpt::obs::CObservationStereoImages::cameraPose, mrpt::obs::CObservationStereoImages::hasImageRight, mrpt::obs::CObservationStereoImages::imageLeft, mrpt::obs::CObservationStereoImages::imageRight, mrpt::poses::CPose3DQuat::m_coords, m_rectified_image_params, m_rot_left, MRPT_END, MRPT_START, rectify(), mrpt::obs::CObservationStereoImages::rightCameraPose, and mrpt::obs::CObservationStereoImages::setStereoCameraParams().
void CStereoRectifyMap::rectify_IPL | ( | const void * | in_left_image, |
const void * | in_right_image, | ||
void * | out_left_image, | ||
void * | out_right_image | ||
) | const |
Just like rectify() but directly works with OpenCV's "IplImage*", which must be passed as "void*" to avoid header dependencies Output images CANNOT coincide with the input images.
Just like rectify() but directly works with OpenCV's "IplImage*", which must be passed as "void*" to avoid header dependencies.
Definition at line 406 of file CStereoRectifyMap.cpp.
References ASSERT_, isSet(), mrpt::utils::TStereoCamera::leftCamera, m_camera_params, m_dat_mapx_left, m_dat_mapx_right, m_dat_mapy_left, m_dat_mapy_right, m_interpolation_method, m_resize_output, m_resize_output_value, MRPT_END, MRPT_START, mrpt::utils::TCamera::ncols, mrpt::utils::TCamera::nrows, THROW_EXCEPTION, mrpt::utils::TPixelCoord::x, and mrpt::utils::TPixelCoord::y.
Referenced by rectify().
void CStereoRectifyMap::setAlpha | ( | double | alpha | ) |
Sets the alpha parameter which controls the zoom in/out of the rectified images, such that:
Definition at line 41 of file CStereoRectifyMap.cpp.
References internal_invalidate(), and m_alpha.
void CStereoRectifyMap::setFromCamParams | ( | const mrpt::utils::TStereoCamera & | params | ) |
Prepares the mapping from the intrinsic, distortion and relative pose parameters of a stereo camera.
Prepares the mapping from the distortion parameters of a camera.
Must be called before invoking rectify(). The alpha parameter can be changed with setAlpha() before invoking this method; otherwise, the current rectification maps will be marked as invalid and should be prepared again.
Must be called before invoking undistort().
Definition at line 68 of file CStereoRectifyMap.cpp.
References ASSERT_, mrpt::utils::TCamera::dist, mrpt::utils::TCamera::focalLengthMeters, mrpt::utils::TCamera::intrinsicParams, mrpt::utils::TStereoCamera::leftCamera, m_alpha, m_camera_params, m_dat_mapx_left, m_dat_mapx_right, m_dat_mapy_left, m_dat_mapy_right, m_enable_both_centers_coincide, m_rectified_image_params, m_resize_output, m_resize_output_value, m_rot_left, m_rot_right, MRPT_END, MRPT_START, mrpt::utils::TCamera::ncols, mrpt::utils::TCamera::nrows, R, mrpt::utils::TStereoCamera::rightCamera, mrpt::utils::TStereoCamera::rightCameraPose, mrpt::poses::CPose3D::setRotationMatrix(), THROW_EXCEPTION, mrpt::utils::TPixelCoord::x, and mrpt::utils::TPixelCoord::y.
Referenced by mrpt::hwdrivers::CDUO3DCamera::open(), and setFromCamParams().
|
inline |
A wrapper to setFromCamParams() which takes the parameters from an stereo observation object.
Definition at line 103 of file CStereoRectifyMap.h.
References mrpt::obs::CObservationStereoImages::getStereoCameraParams(), and setFromCamParams().
|
inline |
Change remap interpolation method (default=Lineal).
This parameter can be safely changed at any instant without consequences.
Definition at line 166 of file CStereoRectifyMap.h.
References m_interpolation_method.
void CStereoRectifyMap::setRectifyMaps | ( | const std::vector< int16_t > & | left_x, |
const std::vector< uint16_t > & | left_y, | ||
const std::vector< int16_t > & | right_x, | ||
const std::vector< uint16_t > & | right_y | ||
) |
Direct input access to rectify maps.
Definition at line 483 of file CStereoRectifyMap.cpp.
References m_dat_mapx_left, m_dat_mapx_right, m_dat_mapy_left, and m_dat_mapy_right.
void CStereoRectifyMap::setRectifyMapsFast | ( | std::vector< int16_t > & | left_x, |
std::vector< uint16_t > & | left_y, | ||
std::vector< int16_t > & | right_x, | ||
std::vector< uint16_t > & | right_y | ||
) |
Direct input access to rectify maps.
This method swaps the vectors so the inputs are no longer available.
Definition at line 498 of file CStereoRectifyMap.cpp.
References m_dat_mapx_left, m_dat_mapx_right, m_dat_mapy_left, and m_dat_mapy_right.
|
private |
Definition at line 283 of file CStereoRectifyMap.h.
Referenced by getAlpha(), setAlpha(), and setFromCamParams().
|
mutableprivate |
Memory caches for in-place rectification speed-up.
Definition at line 290 of file CStereoRectifyMap.h.
Referenced by rectify().
|
mutableprivate |
Definition at line 290 of file CStereoRectifyMap.h.
Referenced by rectify().
|
private |
A copy of the data provided by the user.
Definition at line 296 of file CStereoRectifyMap.h.
Referenced by getCameraParams(), rectify(), rectify_IPL(), and setFromCamParams().
|
private |
Definition at line 292 of file CStereoRectifyMap.h.
Referenced by internal_invalidate(), isSet(), rectify_IPL(), setFromCamParams(), setRectifyMaps(), and setRectifyMapsFast().
|
private |
Definition at line 292 of file CStereoRectifyMap.h.
Referenced by internal_invalidate(), rectify_IPL(), setFromCamParams(), setRectifyMaps(), and setRectifyMapsFast().
|
private |
Definition at line 293 of file CStereoRectifyMap.h.
Referenced by internal_invalidate(), rectify_IPL(), setFromCamParams(), setRectifyMaps(), and setRectifyMapsFast().
|
private |
Definition at line 293 of file CStereoRectifyMap.h.
Referenced by internal_invalidate(), rectify_IPL(), setFromCamParams(), setRectifyMaps(), and setRectifyMapsFast().
|
private |
Definition at line 285 of file CStereoRectifyMap.h.
Referenced by enableBothCentersCoincide(), isEnabledBothCentersCoincide(), and setFromCamParams().
|
private |
Definition at line 287 of file CStereoRectifyMap.h.
Referenced by getInterpolationMethod(), rectify_IPL(), and setInterpolationMethod().
|
private |
Resulting images params.
Definition at line 298 of file CStereoRectifyMap.h.
Referenced by getRectifiedImageParams(), getRectifiedLeftImageParams(), getRectifiedRightImageParams(), rectify(), and setFromCamParams().
|
private |
Definition at line 284 of file CStereoRectifyMap.h.
Referenced by enableResizeOutput(), isEnabledResizeOutput(), rectify(), rectify_IPL(), and setFromCamParams().
|
private |
Definition at line 286 of file CStereoRectifyMap.h.
Referenced by enableResizeOutput(), getResizeOutputSize(), rectify(), rectify_IPL(), and setFromCamParams().
|
private |
The rotation applied to the left/right camera so their virtual image plane is the same after rectification.
Definition at line 302 of file CStereoRectifyMap.h.
Referenced by getLeftCameraRot(), rectify(), and setFromCamParams().
|
private |
Definition at line 302 of file CStereoRectifyMap.h.
Referenced by getRightCameraRot(), and setFromCamParams().
Page generated by Doxygen 1.8.14 for MRPT 1.9.9 Git: ae4571287 Thu Nov 23 00:06:53 2017 +0100 at dom oct 27 23:51:55 CET 2019 |