OpenCV 4.12.0
開源計算機視覺
載入中...
搜尋中...
無匹配項
cv::stereo::StereoBinarySGBM 類參考抽象

該類實現了改進的H. Hirschmuller演算法[128],其與原始演算法的不同之處如下:更多...

#include <opencv2/stereo.hpp>

cv::stereo::StereoBinarySGBM 的協作圖

公共型別

列舉  {
  MODE_SGBM = 0 ,
  MODE_HH = 1
}
 
- 繼承自 cv::stereo::StereoMatcher 的公有型別
列舉  {
  DISP_SHIFT = 4 ,
  DISP_SCALE = (1 << DISP_SHIFT)
}
 

公有成員函式

virtual int getBinaryKernelType () const =0
 
virtual int getMode () const =0
 
virtual int getP1 () const =0
 
virtual int getP2 () const =0
 
virtual int getPreFilterCap () const =0
 
virtual int getSpekleRemovalTechnique () const =0
 
virtual int getSubPixelInterpolationMethod () const =0
 
virtual int getUniquenessRatio () const =0
 
virtual void setBinaryKernelType (int value)=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 setSpekleRemovalTechnique (int factor)=0
 
virtual void setSubPixelInterpolationMethod (int value)=0
 
virtual void setUniquenessRatio (int uniquenessRatio)=0
 
- 繼承自 cv::stereo::StereoMatcher 的公有成員函式
virtual void compute (InputArray left, InputArray right, OutputArray disparity)=0
 為指定的立體對計算視差圖。
 
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
 
- 繼承自 cv::Algorithm 的公有成員函式
 Algorithm ()
 
virtual ~Algorithm ()
 
virtual void clear ()
 清除演算法狀態。
 
virtual bool empty () const
 如果該Algorithm為空(例如在最開始或讀取失敗後),則返回 true。
 
virtual String getDefaultName () const
 
virtual void read (const FileNode &fn)
 從檔案儲存中讀取演算法引數。
 
virtual void save (const String &filename) const
 
void write (const Ptr< FileStorage > &fs, const String &name=String()) const
 
virtual void write (FileStorage &fs) const
 將演算法引數儲存到檔案儲存中。
 
void write (FileStorage &fs, const String &name) const
 

靜態公有成員函式

static Ptr< cv::stereo::StereoBinarySGBMcreate (int minDisparity, int numDisparities, int blockSize, int P1=100, int P2=1000, int disp12MaxDiff=1, int preFilterCap=0, int uniquenessRatio=5, int speckleWindowSize=400, int speckleRange=200, int mode=StereoBinarySGBM::MODE_SGBM)
 建立 StereoSGBM 物件。
 
- 繼承自 cv::Algorithm 的靜態公有成員函式
template<typename _Tp >
static Ptr< _Tpload (const String &filename, const String &objname=String())
 從檔案中載入演算法。
 
template<typename _Tp >
static Ptr< _TploadFromString (const String &strModel, const String &objname=String())
 從字串載入演算法。
 
template<typename _Tp >
static Ptr< _Tpread (const FileNode &fn)
 從檔案節點讀取演算法。
 

其他繼承成員

- 繼承自 cv::Algorithm 的保護成員函式
void writeFormat (FileStorage &fs) const
 

詳細描述

該類實現了改進的H. Hirschmuller演算法[128],其與原始演算法的不同之處如下

  • 預設情況下,該演算法是單趟的,這意味著您只考慮5個方向而不是8個。在createStereoSGBM中將mode設定為StereoSGBM::MODE_HH以執行演算法的完整變體,但請注意它可能會消耗大量記憶體。
  • 該演算法匹配的是塊,而不是單個畫素。不過,將blockSize=1可以使塊縮減為單個畫素。
  • 互資訊代價函式未實現。相反,使用了來自[29]的更簡單的Birchfield-Tomasi亞畫素度量。不過,也支援彩色影像。
  • 包含K. Konolige演算法StereoBM中的一些預處理和後處理步驟,例如:預過濾(StereoBM::PREFILTER_XSOBEL型別)和後過濾(唯一性檢查、二次插值和散斑濾波)。
注意
  • (Python) 演示StereoSGBM匹配演算法用法的示例可以在 opencv_source_code/samples/python2/stereo_match.py 中找到

成員列舉文件

◆ 匿名列舉

匿名列舉
列舉器
MODE_SGBM 
MODE_HH 

成員函式文件

◆ create()

static Ptr< cv::stereo::StereoBinarySGBM > cv::stereo::StereoBinarySGBM::create ( int minDisparity,
int numDisparities,
int blockSize,
int P1 = 100
int P2 = 1000
int disp12MaxDiff = 1
int preFilterCap = 0
int uniquenessRatio = 5
int speckleWindowSize = 400
int speckleRange = 200
int mode = StereoBinarySGBM::MODE_SGBM )
static

建立 StereoSGBM 物件。

引數
minDisparity最小可能視差值。通常為零,但有時校正演算法會使影像發生偏移,因此需要相應調整此引數。
numDisparities最大視差減去最小視差。該值始終大於零。在當前實現中,此引數必須可被16整除。
blockSize匹配塊大小。它必須是一個大於等於1的奇數。通常,它應在3..11的範圍內。
P1控制視差平滑度的第一個引數。此引數用於傾斜表面(非正面平行)的情況。
P2控制視差平滑度的第二個引數。此引數用於“解決”深度不連續問題。值越大,視差越平滑。P1 是相鄰畫素間視差變化加1或減1的懲罰。P2 是相鄰畫素間視差變化大於1的懲罰。演算法要求 P2 > P1。請參見 stereo_match.cpp 示例,其中顯示了一些相當好的 P1 和 P2 值(例如分別為 8*number_of_image_channels*SADWindowSize*SADWindowSize 和 32*number_of_image_channels*SADWindowSize*SADWindowSize)。
disp12MaxDiff左右視差檢查中允許的最大差異(以整數畫素單位)。設定為非正值可停用檢查。
preFilterCap預過濾影像畫素的截斷值。演算法首先計算每個畫素的x導數,並將其值截斷到 [-preFilterCap, preFilterCap] 區間。結果值被傳遞給 Birchfield-Tomasi 畫素代價函式。
uniquenessRatio最佳(最小)計算代價函式值應該“勝過”次佳值以被視為正確匹配的百分比裕量。通常,5-15 範圍內的值就足夠了。
speckleWindowSize將平滑視差區域的最大尺寸視為噪聲散斑並使其失效。設定為0可停用散斑濾波。否則,將其設定在50-200範圍內。
speckleRange每個連通分量內的最大視差變化。如果進行散斑濾波,請將此引數設定為正值,它將隱式乘以16。通常,1或2就足夠了。
mode將其設定為 StereoSGBM::MODE_HH 以執行完整規模的兩趟動態規劃演算法。它將消耗 O(W*H*numDisparities) 位元組,這對於 640x480 立體影像來說很大,對於高畫質尺寸影像來說是巨大的。預設情況下,它設定為 false。

第一個建構函式使用所有預設引數初始化 StereoSGBM。因此,您至少只需設定 StereoSGBM::numDisparities。第二個建構函式允許您將每個引數設定為自定義值。

◆ getBinaryKernelType()

virtual int cv::stereo::StereoBinarySGBM::getBinaryKernelType ( ) const
純虛擬函式

◆ getMode()

virtual int cv::stereo::StereoBinarySGBM::getMode ( ) const
純虛擬函式

◆ getP1()

virtual int cv::stereo::StereoBinarySGBM::getP1 ( ) const
純虛擬函式

◆ getP2()

virtual int cv::stereo::StereoBinarySGBM::getP2 ( ) const
純虛擬函式

◆ getPreFilterCap()

virtual int cv::stereo::StereoBinarySGBM::getPreFilterCap ( ) const
純虛擬函式

◆ getSpekleRemovalTechnique()

virtual int cv::stereo::StereoBinarySGBM::getSpekleRemovalTechnique ( ) const
純虛擬函式

◆ getSubPixelInterpolationMethod()

virtual int cv::stereo::StereoBinarySGBM::getSubPixelInterpolationMethod ( ) const
純虛擬函式

◆ getUniquenessRatio()

virtual int cv::stereo::StereoBinarySGBM::getUniquenessRatio ( ) const
純虛擬函式

◆ setBinaryKernelType()

virtual void cv::stereo::StereoBinarySGBM::setBinaryKernelType ( int )
純虛擬函式

◆ setMode()

virtual void cv::stereo::StereoBinarySGBM::setMode ( int mode)
純虛擬函式

◆ setP1()

virtual void cv::stereo::StereoBinarySGBM::setP1 ( int P1)
純虛擬函式

◆ setP2()

virtual void cv::stereo::StereoBinarySGBM::setP2 ( int P2)
純虛擬函式

◆ setPreFilterCap()

virtual void cv::stereo::StereoBinarySGBM::setPreFilterCap ( int preFilterCap)
純虛擬函式

◆ setSpekleRemovalTechnique()

virtual void cv::stereo::StereoBinarySGBM::setSpekleRemovalTechnique ( int factor)
純虛擬函式

◆ setSubPixelInterpolationMethod()

virtual void cv::stereo::StereoBinarySGBM::setSubPixelInterpolationMethod ( int )
純虛擬函式

◆ setUniquenessRatio()

virtual void cv::stereo::StereoBinarySGBM::setUniquenessRatio ( int uniquenessRatio)
純虛擬函式

該類的文件生成自以下檔案