Camera Calibration and 3D Reconstruction
gpu::StereoBM_GPU
Class computing stereo correspondence (disparity map) using the block matching algorithm.
class StereoBM_GPU
{
public:
enum { BASIC_PRESET = 0, PREFILTER_XSOBEL = 1 };
enum { DEFAULT_NDISP = 64, DEFAULT_WINSZ = 19 };
StereoBM_GPU();
StereoBM_GPU(int preset, int ndisparities = DEFAULT_NDISP,
int winSize = DEFAULT_WINSZ);
void operator() (const GpuMat& left, const GpuMat& right,
GpuMat& disparity, Stream& stream = Stream::Null());
static bool checkIfGpuCallReasonable();
int preset;
int ndisp;
int winSize;
float avergeTexThreshold;
...
};
The class also performs pre- and post-filtering steps: Sobel pre-filtering (if PREFILTER_XSOBEL
flag is set) and low textureness filtering (if averageTexThreshols > 0
). If avergeTexThreshold = 0
, low textureness filtering is disabled. Otherwise, the disparity is set to 0 in each point (x, y)
, where for the left image
\sum HorizontalGradiensInWindow(x, y, winSize) < (winSize \cdot winSize) \cdot avergeTexThreshold
This means that the input left image is low textured.
gpu::StereoBM_GPU::StereoBM_GPU
Enables :ocv:class:`gpu::StereoBM_GPU` constructors.
gpu::StereoBM_GPU::operator ()
Enables the stereo correspondence operator that finds the disparity for the specified rectified stereo pair.
gpu::StereoBM_GPU::checkIfGpuCallReasonable
Uses a heuristic method to estimate whether the current GPU is faster than the CPU in this algorithm. It queries the currently active device.
gpu::StereoBeliefPropagation
Class computing stereo correspondence using the belief propagation algorithm.
class StereoBeliefPropagation
{
public:
enum { DEFAULT_NDISP = 64 };
enum { DEFAULT_ITERS = 5 };
enum { DEFAULT_LEVELS = 5 };
static void estimateRecommendedParams(int width, int height,
int& ndisp, int& iters, int& levels);
explicit StereoBeliefPropagation(int ndisp = DEFAULT_NDISP,
int iters = DEFAULT_ITERS,
int levels = DEFAULT_LEVELS,
int msg_type = CV_32F);
StereoBeliefPropagation(int ndisp, int iters, int levels,
float max_data_term, float data_weight,
float max_disc_term, float disc_single_jump,
int msg_type = CV_32F);
void operator()(const GpuMat& left, const GpuMat& right,
GpuMat& disparity, Stream& stream = Stream::Null());
void operator()(const GpuMat& data, GpuMat& disparity, Stream& stream = Stream::Null());
int ndisp;
int iters;
int levels;
float max_data_term;
float data_weight;
float max_disc_term;
float disc_single_jump;
int msg_type;
...
};
The class implements algorithm described in [Felzenszwalb2006] . It can compute own data cost (using a truncated linear model) or use a user-provided data cost.
Note
StereoBeliefPropagation
requires a lot of memory for message storage:
width \_ step \cdot height \cdot ndisp \cdot 4 \cdot (1 + 0.25)
and for data cost storage:
width\_step \cdot height \cdot ndisp \cdot (1 + 0.25 + 0.0625 + \dotsm + \frac{1}{4^{levels}})
width_step
is the number of bytes in a line including padding.
gpu::StereoBeliefPropagation::StereoBeliefPropagation
Enables the :ocv:class:`gpu::StereoBeliefPropagation` constructors.
StereoBeliefPropagation
uses a truncated linear model for the data cost and discontinuity terms:
DataCost = data \_ weight \cdot \min ( \lvert I_2-I_1 \rvert , max \_ data \_ term)
DiscTerm = \min (disc \_ single \_ jump \cdot \lvert f_1-f_2 \rvert , max \_ disc \_ term)
For more details, see [Felzenszwalb2006].
By default, :ocv:class:`gpu::StereoBeliefPropagation` uses floating-point arithmetics and the CV_32FC1
type for messages. But it can also use fixed-point arithmetics and the CV_16SC1
message type for better performance. To avoid an overflow in this case, the parameters must satisfy the following requirement:
10 \cdot 2^{levels-1} \cdot max \_ data \_ term < SHRT \_ MAX
gpu::StereoBeliefPropagation::estimateRecommendedParams
Uses a heuristic method to compute the recommended parameters ( ndisp
, iters
and levels
) for the specified image size ( width
and height
).
gpu::StereoBeliefPropagation::operator ()
Enables the stereo correspondence operator that finds the disparity for the specified rectified stereo pair or data cost.
gpu::StereoConstantSpaceBP
Class computing stereo correspondence using the constant space belief propagation algorithm.
class StereoConstantSpaceBP
{
public:
enum { DEFAULT_NDISP = 128 };
enum { DEFAULT_ITERS = 8 };
enum { DEFAULT_LEVELS = 4 };
enum { DEFAULT_NR_PLANE = 4 };
static void estimateRecommendedParams(int width, int height,
int& ndisp, int& iters, int& levels, int& nr_plane);
explicit StereoConstantSpaceBP(int ndisp = DEFAULT_NDISP,
int iters = DEFAULT_ITERS,
int levels = DEFAULT_LEVELS,
int nr_plane = DEFAULT_NR_PLANE,
int msg_type = CV_32F);
StereoConstantSpaceBP(int ndisp, int iters, int levels, int nr_plane,
float max_data_term, float data_weight,
float max_disc_term, float disc_single_jump,
int min_disp_th = 0,
int msg_type = CV_32F);
void operator()(const GpuMat& left, const GpuMat& right,
GpuMat& disparity, Stream& stream = Stream::Null());
int ndisp;
int iters;
int levels;
int nr_plane;
float max_data_term;
float data_weight;
float max_disc_term;
float disc_single_jump;
int min_disp_th;
int msg_type;
bool use_local_init_data_cost;
...
};
The class implements algorithm described in [Yang2010]. StereoConstantSpaceBP
supports both local minimum and global minimum data cost initialization algorithms. For more details, see the paper mentioned above. By default, a local algorithm is used. To enable a global algorithm, set use_local_init_data_cost
to false
.
gpu::StereoConstantSpaceBP::StereoConstantSpaceBP
Enables the :ocv:class:`gpu::StereoConstantSpaceBP` constructors.
StereoConstantSpaceBP
uses a truncated linear model for the data cost and discontinuity terms:
DataCost = data \_ weight \cdot \min ( \lvert I_2-I_1 \rvert , max \_ data \_ term)
DiscTerm = \min (disc \_ single \_ jump \cdot \lvert f_1-f_2 \rvert , max \_ disc \_ term)
For more details, see [Yang2010].
By default, StereoConstantSpaceBP
uses floating-point arithmetics and the CV_32FC1
type for messages. But it can also use fixed-point arithmetics and the CV_16SC1
message type for better performance. To avoid an overflow in this case, the parameters must satisfy the following requirement:
10 \cdot 2^{levels-1} \cdot max \_ data \_ term < SHRT \_ MAX
gpu::StereoConstantSpaceBP::estimateRecommendedParams
Uses a heuristic method to compute parameters (ndisp, iters, levelsand nrplane) for the specified image size (widthand height).
gpu::StereoConstantSpaceBP::operator ()
Enables the stereo correspondence operator that finds the disparity for the specified rectified stereo pair.
gpu::DisparityBilateralFilter
Class refining a disparity map using joint bilateral filtering.
class CV_EXPORTS DisparityBilateralFilter
{
public:
enum { DEFAULT_NDISP = 64 };
enum { DEFAULT_RADIUS = 3 };
enum { DEFAULT_ITERS = 1 };
explicit DisparityBilateralFilter(int ndisp = DEFAULT_NDISP,
int radius = DEFAULT_RADIUS, int iters = DEFAULT_ITERS);
DisparityBilateralFilter(int ndisp, int radius, int iters,
float edge_threshold, float max_disc_threshold,
float sigma_range);
void operator()(const GpuMat& disparity, const GpuMat& image,
GpuMat& dst, Stream& stream = Stream::Null());
...
};
The class implements [Yang2010] algorithm.
gpu::DisparityBilateralFilter::DisparityBilateralFilter
Enables the :ocv:class:`gpu::DisparityBilateralFilter` constructors.
gpu::DisparityBilateralFilter::operator ()
Refines a disparity map using joint bilateral filtering.
gpu::drawColorDisp
Colors a disparity image.
This function draws a colored disparity map by converting disparity values from [0..ndisp)
interval first to HSV
color space (where different disparity values correspond to different hues) and then converting the pixels to RGB
for visualization.
gpu::reprojectImageTo3D
Reprojects a disparity image to 3D space.
gpu::solvePnPRansac
Finds the object pose from 3D-2D point correspondences.
[Felzenszwalb2006] | (1, 2) Pedro F. Felzenszwalb algorithm [Pedro F. Felzenszwalb and Daniel P. Huttenlocher. Efficient belief propagation for early vision. International Journal of Computer Vision, 70(1), October 2006 |
[Yang2010] |
(1, 2, 3)
|