OpenCV: cv::StereoSGBM Class Reference

| OpenCV 3.4.2 Open Source Computer Vision

Public Types | Public Member Functions | Static Public Member Functions | List of all members
cv::StereoSGBM Class Referenceabstract
Camera Calibration and 3D Reconstruction

The class implements the modified H. Hirschmuller algorithm [41] that differs from the original one as follows: More...

`#include "calib3d.hpp"`

Inheritance diagram for cv::StereoSGBM:

## Public Types
enum | { MODE_SGBM = 0, MODE_HH = 1, MODE_SGBM_3WAY = 2, MODE_HH4 = 3 }
Public Types inherited from cv::StereoMatcher
enum | { DISP_SHIFT = 4, DISP_SCALE = (1 << DISP_SHIFT) }

## Public Member Functions
virtual int | getMode () const =0
virtual int | getP1 () const =0
virtual int | getP2 () const =0
virtual int | getPreFilterCap () const =0
virtual int | getUniquenessRatio () const =0
virtual void | setMode (int mode)=0
virtual void | setP1 (int P1)=0
virtual void | setP2 (int P2)=0
virtual void | setPreFilterCap (int preFilterCap)=0
virtual void | setUniquenessRatio (int uniquenessRatio)=0
Public Member Functions inherited from cv::StereoMatcher
virtual void | compute (InputArray left, InputArray right, OutputArray disparity)=0
| Computes disparity map for the specified stereo pair. More...
virtual int | getBlockSize () const =0
virtual int | getDisp12MaxDiff () const =0
virtual int | getMinDisparity () const =0
virtual int | getNumDisparities () const =0
virtual int | getSpeckleRange () const =0
virtual int | getSpeckleWindowSize () const =0
virtual void | setBlockSize (int blockSize)=0
virtual void | setDisp12MaxDiff (int disp12MaxDiff)=0
virtual void | setMinDisparity (int minDisparity)=0
virtual void | setNumDisparities (int numDisparities)=0
virtual void | setSpeckleRange (int speckleRange)=0
virtual void | setSpeckleWindowSize (int speckleWindowSize)=0
Public Member Functions inherited from cv::Algorithm
| Algorithm ()
virtual | ~Algorithm ()
virtual void | clear ()
| Clears the algorithm state. More...
virtual bool | empty () const
| Returns true if the Algorithm is empty (e.g. in the very beginning or after unsuccessful read. More...
virtual String | getDefaultName () const
virtual void | read (const FileNode &fn)
| Reads algorithm parameters from a file storage. More...
virtual void | save (const String &filename) const
virtual void | write (FileStorage &fs) const
| Stores algorithm parameters in a file storage. More...
void | write (const Ptr< FileStorage > &fs, const String &name=String()) const
| simplified API for language bindings This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. More...

## Static Public Member Functions
static Ptr< StereoSGBM > | create (int minDisparity=0, int numDisparities=16, int blockSize=3, int P1=0, int P2=0, int disp12MaxDiff=0, int preFilterCap=0, int uniquenessRatio=0, int speckleWindowSize=0, int speckleRange=0, int mode=StereoSGBM::MODE_SGBM)
| Creates StereoSGBM object. More...
Static Public Member Functions inherited from cv::Algorithm
template<typename _Tp >
static Ptr< _Tp > | load (const String &filename, const String &objname=String())
| Loads algorithm from the file. More...
template<typename _Tp >
static Ptr< _Tp > | loadFromString (const String &strModel, const String &objname=String())
| Loads algorithm from a String. More...
template<typename _Tp >
static Ptr< _Tp > | read (const FileNode &fn)
| Reads algorithm from the file node. More...

## Additional Inherited Members
Protected Member Functions inherited from cv::Algorithm
void | writeFormat (FileStorage &fs) const

## Detailed Description

The class implements the modified H. Hirschmuller algorithm [41] that differs from the original one as follows:

- By default, the algorithm is single-pass, which means that you consider only 5 directions instead of 8. Set mode=StereoSGBM::MODE_HH in createStereoSGBM to run the full variant of the algorithm but beware that it may consume a lot of memory.
- The algorithm matches blocks, not individual pixels. Though, setting blockSize=1 reduces the blocks to single pixels.
- Mutual information cost function is not implemented. Instead, a simpler Birchfield-Tomasi sub-pixel metric from [5] is used. Though, the color images are supported as well.
- Some pre- and post- processing steps from K. Konolige algorithm StereoBM are included, for example: pre-filtering (StereoBM::PREFILTER_XSOBEL type) and post-filtering (uniqueness check, quadratic interpolation and speckle filtering).

Note
  - (Python) An example illustrating the use of the StereoSGBM matching algorithm can be found at opencv_source_code/samples/python/stereo_match.py

## Member Enumeration Documentation

## ◆ anonymous enum

anonymous enum

Enumerator
MODE_SGBM |
MODE_HH |
MODE_SGBM_3WAY |
MODE_HH4 |

## Member Function Documentation

## ◆ create()

static Ptr<StereoSGBM> cv::StereoSGBM::create | ( | int | minDisparity = `0`,
|  | int | numDisparities = `16`,
|  | int | blockSize = `3`,
|  | int | P1 = `0`,
|  | int | P2 = `0`,
|  | int | disp12MaxDiff = `0`,
|  | int | preFilterCap = `0`,
|  | int | uniquenessRatio = `0`,
|  | int | speckleWindowSize = `0`,
|  | int | speckleRange = `0`,
|  | int | mode = `StereoSGBM::MODE_SGBM`
| ) |  |
| static

Creates StereoSGBM object.

Parameters

  minDisparity | Minimum possible disparity value. Normally, it is zero but sometimes rectification algorithms can shift images, so this parameter needs to be adjusted accordingly.
  numDisparities | Maximum disparity minus minimum disparity. The value is always greater than zero. In the current implementation, this parameter must be divisible by 16.
  blockSize | Matched block size. It must be an odd number >=1 . Normally, it should be somewhere in the 3..11 range.
  P1 | The first parameter controlling the disparity smoothness. See below.
  P2 | The second parameter controlling the disparity smoothness. The larger the values are, the smoother the disparity is. P1 is the penalty on the disparity change by plus or minus 1 between neighbor pixels. P2 is the penalty on the disparity change by more than 1 between neighbor pixels. The algorithm requires P2 > P1 . See stereo_match.cpp sample where some reasonably good P1 and P2 values are shown (like 8*number_of_image_channels*SADWindowSize*SADWindowSize and 32*number_of_image_channels*SADWindowSize*SADWindowSize , respectively).
  disp12MaxDiff | Maximum allowed difference (in integer pixel units) in the left-right disparity check. Set it to a non-positive value to disable the check.
  preFilterCap | Truncation value for the prefiltered image pixels. The algorithm first computes x-derivative at each pixel and clips its value by [-preFilterCap, preFilterCap] interval. The result values are passed to the Birchfield-Tomasi pixel cost function.
  uniquenessRatio | Margin in percentage by which the best (minimum) computed cost function value should "win" the second best value to consider the found match correct. Normally, a value within the 5-15 range is good enough.
  speckleWindowSize | Maximum size of smooth disparity regions to consider their noise speckles and invalidate. Set it to 0 to disable speckle filtering. Otherwise, set it somewhere in the 50-200 range.
  speckleRange | Maximum disparity variation within each connected component. If you do speckle filtering, set the parameter to a positive value, it will be implicitly multiplied by 16. Normally, 1 or 2 is good enough.
  mode | Set it to StereoSGBM::MODE_HH to run the full-scale two-pass dynamic programming algorithm. It will consume O(W*H*numDisparities) bytes, which is large for 640x480 stereo and huge for HD-size pictures. By default, it is set to false .

The first constructor initializes StereoSGBM with all the default parameters. So, you only have to set StereoSGBM::numDisparities at minimum. The second constructor enables you to set each parameter to a custom value.

## ◆ getMode()

virtual int cv::StereoSGBM::getMode | ( |  | ) | const
| pure virtual

## ◆ getP1()

virtual int cv::StereoSGBM::getP1 | ( |  | ) | const
| pure virtual

## ◆ getP2()

virtual int cv::StereoSGBM::getP2 | ( |  | ) | const
| pure virtual

## ◆ getPreFilterCap()

virtual int cv::StereoSGBM::getPreFilterCap | ( |  | ) | const
| pure virtual

## ◆ getUniquenessRatio()

virtual int cv::StereoSGBM::getUniquenessRatio | ( |  | ) | const
| pure virtual

## ◆ setMode()

virtual void cv::StereoSGBM::setMode | ( | int | mode | ) |
| pure virtual

## ◆ setP1()

virtual void cv::StereoSGBM::setP1 | ( | int | P1 | ) |
| pure virtual

## ◆ setP2()

virtual void cv::StereoSGBM::setP2 | ( | int | P2 | ) |
| pure virtual

## ◆ setPreFilterCap()

virtual void cv::StereoSGBM::setPreFilterCap | ( | int | preFilterCap | ) |
| pure virtual

## ◆ setUniquenessRatio()

virtual void cv::StereoSGBM::setUniquenessRatio | ( | int | uniquenessRatio | ) |
| pure virtual

The documentation for this class was generated from the following file:

- calib3d/include/opencv2/calib3d.hpp