IVT

Class for computing matches for individual points in stereo image pairs. More...
#include <StereoMatcher.h>
Public Member Functions  
CStereoMatcher ()  
The default constructor (and only constructor). More...  
~CStereoMatcher ()  
The destructor. More...  
bool  LoadCameraParameters (const char *pCameraParameterFileName) 
Initializes the internally used camera model, given a file path to a camera parameter file. More...  
void  InitCameraParameters (CStereoCalibration *pStereoCalibration, bool bCloneCalibration) 
Initializes the internally used camera model, given an instance of CStereoCalibration. More...  
int  GetDisparityEstimate (const float z) 
Computes a disparity estimated for a given zdistance. More...  
int  Match (const CByteImage *pLeftImage, const CByteImage *pRightImage, int x, int y, int nWindowSize, int d1, int d2, Vec2d &result, Vec3d &result_3d, float fThreshold, bool bInputImagesAreUndistorted=false) 
Computes a disparity estimated for a given zdistance using the ZeroMean Normalized Cross Correlation (ZNCC). More...  
int  MatchZSAD (const CByteImage *pLeftImage, const CByteImage *pRightImage, int x, int y, int nWindowSize, int d1, int d2, Vec2d &result, Vec3d &result_3d, float fThreshold, bool bInputImagesAreUndistorted=false) 
Computes a disparity estimated for a given zdistance using the ZeroMean Sum of Absolute Differences (ZSAD). More...  
Class for computing matches for individual points in stereo image pairs.
This class allows to search for a correspondence in the right image, given a point in the left image of stereo image pair. As correlation function a ZeroMean Normalized Cross Correlation (ZNCC) is used. The ZNCC is invariant to constant additive and constant multiplicative illumination variations.
The search for the correspondences is performed along the epipolar line. The images must not be rectified (or if rectified, the camera parameters must be updated to be valid for the rectified images). In any case it is recommended to provide the original images  not rectified images.
As result, the corresponence in the right image is computed with subpixel accuracy as well as the 3D point in the world coordinate system by performing stereo triangulation.
Images must be of type CByteImage::eGrayScale.
Definition at line 78 of file StereoMatcher.h.
CStereoMatcher::CStereoMatcher  (  ) 
The default constructor (and only constructor).
Initialization is performed by calling one of the methods LoadCameraParameters(const char*) or InitCameraParameters(CStereoCalibration*, bool).
Definition at line 67 of file StereoMatcher.cpp.
CStereoMatcher::~CStereoMatcher  (  ) 
The destructor.
Definition at line 73 of file StereoMatcher.cpp.
int CStereoMatcher::GetDisparityEstimate  (  const float  z  ) 
Computes a disparity estimated for a given zdistance.
The zdistance is defined as the zcoordinate in the camera coordinate system of the left camera. The disparity estimate is computed as the disparity of the point (0, 0, z)^T in the camera coordinate system of the left camera.
Before application of this method, the instance must have been initialized by calling one of the methods LoadCameraParameters(const char*) or InitCameraParameters(CStereoCalibration*, bool).
[in]  z  The zdistance to compute the disparity estimate for. 
Definition at line 112 of file StereoMatcher.cpp.
void CStereoMatcher::InitCameraParameters  (  CStereoCalibration *  pStereoCalibration, 
bool  bCloneCalibration  
) 
Initializes the internally used camera model, given an instance of CStereoCalibration.
The camera parameters are needed for knowledge of the epipolar geometry.
[in]  pStereoCalibration  The pointer to the instance of CStereoCalibration. 
[in]  bCloneCalibration  If set to true, an internal instance is created and pStereoCalibration serves as the template instance. If set to false simply the pointer is stored. In any case, deletion of the provided instance pStereoCalibration is not handled by CStereoMatcher. 
Definition at line 92 of file StereoMatcher.cpp.
bool CStereoMatcher::LoadCameraParameters  (  const char *  pCameraParameterFileName  ) 
Initializes the internally used camera model, given a file path to a camera parameter file.
The file must contain the parameters for the used stereo camera system. Details on the file format and camera calibration can be found in CStereoCalibration::LoadCameraParameters.
The camera parameters are needed for knowledge of the epipolar geometry.
[in]  pCameraParameterFileName  The file path to the camera parameter file to be loaded. 
Definition at line 84 of file StereoMatcher.cpp.
int CStereoMatcher::Match  (  const CByteImage *  pLeftImage, 
const CByteImage *  pRightImage,  
int  x,  
int  y,  
int  nWindowSize,  
int  d1,  
int  d2,  
Vec2d &  result,  
Vec3d &  result_3d,  
float  fThreshold,  
bool  bInputImagesAreUndistorted = false 

) 
Computes a disparity estimated for a given zdistance using the ZeroMean Normalized Cross Correlation (ZNCC).
The zdistance is defined as the zcoordinate in the camera coordinate system of the left camera. The disparity estimate is computed as the disparity of the point (0, 0, z)^T in the camera coordinate system of the left camera.
The width and height of pInputImage and pOutputImage must match. pInputImage and pOutputImage must be both of type CByteImage::eGrayScale.
Before application of this method, the instance must have been initialized by calling one of the methods LoadCameraParameters(const char*) or InitCameraParameters(CStereoCalibration*, bool).
[in]  pLeftImage  The left camera image. Must be of type CByteImage::eGrayScale. 
[in]  pRightImage  The right camera image. Must be of type CByteImage::eGrayScale. 
[in]  x  The xcoordinate of the point in pLeftImage to search a correspondence for in pRightImage. 
[in]  y  The ycoordinate of the point in pLeftImage to search a correspondence for in pRightImage. 
[in]  nWindowSize  Specifies the size of the correlation window, which is nWindowSize x nWindowSize. 
[in]  d1  The minimum disparity, defining the starting point of the search. Must be >= 0. 
[in]  d2  The maximum disparity, defining the end point of the search. Must be > d1. 
[out]  result  The computed correspondence in the pRightImage, with subpixel accuracy. 
[out]  result_3d  The computed 3D point, expressed in the world coordinate system. 
[in]  fThreshold  The threshold for the Zero MeanNormalized Cross Correlation (ZNCC). As the ZNCC is a similarity measure (not an error measure) the greater the value the greater is the similarity. The maximum value that can be achieved is 1. fThreshold = 0.0f practically accepts all correspondences, fThreshold = 0.5f can be considered as a relatively nonrestrictive threshold, fThrehold = 0.8f can be considered as a relatively restrictive threshold. The choice of this value depends on the quality of the images and the application. 
[in]  bInputImagesAreUndistorted  If set to false (default value) the input coordinates are undistorted before performing the search. If set to true, it is assumed that the images are already undistorted, thus not undistorting the coordinates. As the epipolar geometry is only valid for the linear mapping, it is strictly recommended to undistort the images, if the lens distortions have an observable effect. 
Definition at line 125 of file StereoMatcher.cpp.
int CStereoMatcher::MatchZSAD  (  const CByteImage *  pLeftImage, 
const CByteImage *  pRightImage,  
int  x,  
int  y,  
int  nWindowSize,  
int  d1,  
int  d2,  
Vec2d &  result,  
Vec3d &  result_3d,  
float  fThreshold,  
bool  bInputImagesAreUndistorted = false 

) 
Computes a disparity estimated for a given zdistance using the ZeroMean Sum of Absolute Differences (ZSAD).
The zdistance is defined as the zcoordinate in the camera coordinate system of the left camera. The disparity estimate is computed as the disparity of the point (0, 0, z)^T in the camera coordinate system of the left camera.
The width and height of pInputImage and pOutputImage must match. pInputImage and pOutputImage must be both of type CByteImage::eGrayScale.
Before application of this method, the instance must have been initialized by calling one of the methods LoadCameraParameters(const char*) or InitCameraParameters(CStereoCalibration*, bool).
[in]  pLeftImage  The left camera image. Must be of type CByteImage::eGrayScale. 
[in]  pRightImage  The right camera image. Must be of type CByteImage::eGrayScale. 
[in]  x  The xcoordinate of the point in pLeftImage to search a correspondence for in pRightImage. 
[in]  y  The ycoordinate of the point in pLeftImage to search a correspondence for in pRightImage. 
[in]  nWindowSize  Specifies the size of the correlation window, which is nWindowSize x nWindowSize. 
[in]  d1  The minimum disparity, defining the starting point of the search. Must be >= 0. 
[in]  d2  The maximum disparity, defining the end point of the search. Must be > d1. 
[out]  result  The computed correspondence in the pRightImage, with subpixel accuracy. 
[out]  result_3d  The computed 3D point, expressed in the world coordinate system. 
[in]  fThreshold  The threshold for the ZeroMean Sum of Absolute Differences (ZSAD). As the ZSAD is an error measure, the smaller the value the greater is the similarity. The minimum value that can be achieved is 0. fThreshold = 255.0f accepts all correspondences. The choice of this value depends on the quality of the images and the application. 
[in]  bInputImagesAreUndistorted  If set to false (default value) the input coordinates are undistorted before performing the search. If set to true, it is assumed that the images are already undistorted, thus not undistorting the coordinates. As the epipolar geometry is only valid for the linear mapping, it is strictly recommended to undistort the images, if the lens distortions have an observable effect. 
Definition at line 169 of file StereoMatcher.cpp.