このクラスは、修正版のH. Hirschmullerアルゴリズム[129]を実装したものであり、オリジナルとは以下の点が異なる: 続き...
#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アルゴリズム[129]を実装したものであり、オリジナルとは以下の点が異なる:
- デフォルトではアルゴリズムは1パスであり、8方向ではなく5方向だけを考慮することを意味する。アルゴリズムの完全版を実行するには createStereoSGBM で mode=StereoSGBM::MODE_HH に設定するが、大量のメモリを消費する可能性があることに注意。
- このアルゴリズムは個々のピクセルではなくブロック単位でマッチングを行う。ただし、blockSize=1を設定するとブロックは単一ピクセルに縮小される。
- 相互情報量コスト関数は実装されていない。代わりに、[30]のより単純なBirchfield-Tomasiサブピクセルメトリックを使用する。ただし、カラー画像もサポートされている。
- K. KonoligeアルゴリズムStereoBMの前処理および後処理ステップの一部が含まれている。例えば、前処理フィルタ(StereoBM::PREFILTER_XSOBEL型)や後処理(一意性チェック、二次補間、スペックルフィルタリング)などである。
- 覚え書き
- (Python) StereoSGBM マッチングアルゴリズムの使用例は opencv_source_code/samples/python/stereo_match.py にある
◆ anonymous enum
| 列挙値 |
|---|
| 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 | 視差の平滑性を制御する第1引数。下記を参照。 |
| P2 | 視差の平滑性を制御する第2引数。値が大きいほど視差は平滑になる。P1 は隣接ピクセル間で視差がプラスマイナス1だけ変化することに対するペナルティである。P2 は隣接ピクセル間で視差が1を超えて変化することに対するペナルティである。アルゴリズムは P2 > P1 であることを要求する。妥当に良い P1 と P2 の値が示されている stereo_match.cpp サンプルを参照 (それぞれ 8*number_of_image_channels*blockSize*blockSize と 32*number_of_image_channels*blockSize*blockSize など)。 |
| disp12MaxDiff | 左右視差チェックにおける許容される最大の差(整数ピクセル単位)。チェックを無効にするには非正の値を設定する。 |
| preFilterCap | プレフィルタされた画像ピクセルの切り捨て値。アルゴリズムはまず各ピクセルでx微分を計算し、その値を[-preFilterCap, preFilterCap]の区間でクリップする。結果の値はBirchfield-Tomasiのピクセルコスト関数に渡される。 |
| uniquenessRatio | 見つかったマッチを正しいと見なすために、計算されたコスト関数の最良(最小)値が次に良い値に対して「勝つ」べきマージン(パーセンテージ)。通常、5-15の範囲の値で十分である。 |
| speckleWindowSize | ノイズスペックルと見なして無効化する、滑らかな視差領域の最大サイズ。スペックルフィルタリングを無効にするには0を設定する。それ以外の場合は50-200の範囲のどこかに設定する。 |
| speckleRange | 各連結成分内における視差の最大変動量。スペックルフィルタリングを行う場合は正の値を設定する。この値は内部的に16倍される。通常は1または2で十分である。 |
| mode | フルスケールの2パス動的計画法アルゴリズムを実行するには StereoSGBM::MODE_HH に設定する。これは O(W*H*numDisparities) バイトを消費し、640x480 のステレオでは大きく、HD サイズの画像では膨大になる。デフォルトでは false に設定されている。 |
1番目のコンストラクタはStereoSGBMをすべてのデフォルト引数で初期化する。したがって、最低限StereoSGBM::numDisparitiesを設定するだけでよい。2番目のコンストラクタでは各引数を任意の値に設定できる。
◆ getMode()
| virtual int cv::StereoSGBM::getMode |
( |
| ) |
const |
|
pure virtual |
| Python: |
|---|
| cv.StereoSGBM.getMode( | | ) -> | retval |
◆ getP1()
| virtual int cv::StereoSGBM::getP1 |
( |
| ) |
const |
|
pure virtual |
| Python: |
|---|
| cv.StereoSGBM.getP1( | | ) -> | retval |
◆ getP2()
| virtual int cv::StereoSGBM::getP2 |
( |
| ) |
const |
|
pure virtual |
| Python: |
|---|
| cv.StereoSGBM.getP2( | | ) -> | retval |
◆ getPreFilterCap()
| virtual int cv::StereoSGBM::getPreFilterCap |
( |
| ) |
const |
|
pure virtual |
| Python: |
|---|
| cv.StereoSGBM.getPreFilterCap( | | ) -> | retval |
◆ getUniquenessRatio()
| virtual int cv::StereoSGBM::getUniquenessRatio |
( |
| ) |
const |
|
pure virtual |
| Python: |
|---|
| cv.StereoSGBM.getUniquenessRatio( | | ) -> | retval |
◆ setMode()
| virtual void cv::StereoSGBM::setMode |
( |
int | mode | ) |
|
|
pure virtual |
| Python: |
|---|
| cv.StereoSGBM.setMode( | mode | ) -> | None |
◆ setP1()
| virtual void cv::StereoSGBM::setP1 |
( |
int | P1 | ) |
|
|
pure virtual |
| Python: |
|---|
| cv.StereoSGBM.setP1( | P1 | ) -> | None |
◆ setP2()
| virtual void cv::StereoSGBM::setP2 |
( |
int | P2 | ) |
|
|
pure virtual |
| Python: |
|---|
| cv.StereoSGBM.setP2( | P2 | ) -> | None |
◆ setPreFilterCap()
| virtual void cv::StereoSGBM::setPreFilterCap |
( |
int | preFilterCap | ) |
|
|
pure virtual |
| Python: |
|---|
| cv.StereoSGBM.setPreFilterCap( | preFilterCap | ) -> | None |
◆ setUniquenessRatio()
| virtual void cv::StereoSGBM::setUniquenessRatio |
( |
int | uniquenessRatio | ) |
|
|
pure virtual |
| Python: |
|---|
| cv.StereoSGBM.setUniquenessRatio( | uniquenessRatio | ) -> | None |
このクラス詳解は次のファイルから抽出されました: