該類實現了修改後的 H. Hirschmuller 演算法 [128],它與原始演算法的不同之處如下:更多...
#include <opencv2/calib3d.hpp>
|
| 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) |
| | 建立 StereoSGBM 物件。
|
| |
| template<typename _Tp > |
| static Ptr< _Tp > | load (const String &filename, const String &objname=String()) |
| | 從檔案中載入演算法。
|
| |
| template<typename _Tp > |
| static Ptr< _Tp > | loadFromString (const String &strModel, const String &objname=String()) |
| | 從字串載入演算法。
|
| |
| template<typename _Tp > |
| static Ptr< _Tp > | read (const FileNode &fn) |
| | 從檔案節點讀取演算法。
|
| |
該類實現了修改後的 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 | ) -> | 無 |
此類的文件是從以下檔案生成的