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

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

#include <opencv2/calib3d.hpp>

cv::StereoSGBM 的協作圖

公共型別

列舉  {
  MODE_SGBM = 0 ,
  MODE_HH = 1 ,
  MODE_SGBM_3WAY = 2 ,
  MODE_HH4 = 3
}
 
- 從 cv::StereoMatcher 繼承的公共型別
列舉  {
  DISP_SHIFT = 4 ,
  DISP_SCALE = (1 << DISP_SHIFT)
}
 

公共成員函式

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
 
- 從 cv::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< StereoSGBMcreate (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)
 建立 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/python/stereo_match.py 找到。

成員列舉文件

◆ 匿名列舉

匿名列舉
列舉器
MODE_SGBM 
MODE_HH 
MODE_SGBM_3WAY 
MODE_HH4 

成員函式文件

◆ 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
Python
cv.StereoSGBM.create([, minDisparity[, numDisparities[, blockSize[, P1[, P2[, disp12MaxDiff[, preFilterCap[, uniquenessRatio[, speckleWindowSize[, speckleRange[, mode]]]]]]]]]]]) -> retval
cv.StereoSGBM_create([, minDisparity[, numDisparities[, blockSize[, P1[, P2[, disp12MaxDiff[, preFilterCap[, uniquenessRatio[, speckleWindowSize[, speckleRange[, mode]]]]]]]]]]]) -> retval

建立 StereoSGBM 物件。

引數
minDisparity可能的最小視差值。通常為零,但有時校正演算法會使影像發生偏移,因此需要相應地調整此引數。
numDisparities最大視差減去最小視差。該值始終大於零。在當前實現中,此引數必須能被 16 整除。
blockSize匹配塊大小。它必須是大於等於 1 的奇數。通常,它應在 3..11 的範圍內。
P1控制視差平滑度的第一個引數。詳見下文。
P2控制視差平滑度的第二個引數。值越大,視差越平滑。P1 是相鄰畫素間視差變化加一或減一的懲罰。P2 是相鄰畫素間視差變化大於一的懲罰。演算法要求 P2 > P1。請參見 stereo_match.cpp 示例,其中顯示了一些合理的 P1 和 P2 值(例如,分別為 8*影像通道數*blockSize*blockSize 和 32*影像通道數*blockSize*blockSize)。
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。第二個建構函式允許您將每個引數設定為自定義值。

◆ getMode()

virtual int cv::StereoSGBM::getMode ( ) const
純虛擬函式
Python
cv.StereoSGBM.getMode() -> retval

◆ getP1()

virtual int cv::StereoSGBM::getP1 ( ) const
純虛擬函式
Python
cv.StereoSGBM.getP1() -> retval

◆ getP2()

virtual int cv::StereoSGBM::getP2 ( ) const
純虛擬函式
Python
cv.StereoSGBM.getP2() -> retval

◆ getPreFilterCap()

virtual int cv::StereoSGBM::getPreFilterCap ( ) const
純虛擬函式
Python
cv.StereoSGBM.getPreFilterCap() -> retval

◆ getUniquenessRatio()

virtual int cv::StereoSGBM::getUniquenessRatio ( ) const
純虛擬函式
Python
cv.StereoSGBM.getUniquenessRatio() -> retval

◆ setMode()

virtual void cv::StereoSGBM::setMode ( int mode)
純虛擬函式
Python
cv.StereoSGBM.setMode(mode) ->

◆ setP1()

virtual void cv::StereoSGBM::setP1 ( int P1)
純虛擬函式
Python
cv.StereoSGBM.setP1(P1) ->

◆ setP2()

virtual void cv::StereoSGBM::setP2 ( int P2)
純虛擬函式
Python
cv.StereoSGBM.setP2(P2) ->

◆ setPreFilterCap()

virtual void cv::StereoSGBM::setPreFilterCap ( int preFilterCap)
純虛擬函式
Python
cv.StereoSGBM.setPreFilterCap(preFilterCap) ->

◆ setUniquenessRatio()

virtual void cv::StereoSGBM::setUniquenessRatio ( int uniquenessRatio)
純虛擬函式
Python
cv.StereoSGBM.setUniquenessRatio(uniquenessRatio) ->

此類的文件是從以下檔案生成的