The class implements the modified H. Hirschmuller algorithm
[HH08]
that differs from the original one as follows:
[詳解]
#include <calib3d.hpp>
cv::StereoMatcherを継承しています。
|
enum |
{
MODE_SGBM
= 0 ,
MODE_HH
= 1 ,
MODE_SGBM_3WAY
= 2 ,
MODE_HH4
= 3 } |
|
enum |
{
DISP_SHIFT
= 4 ,
DISP_SCALE
= (1 << DISP_SHIFT) } |
|
|
virtual CV_WRAP int |
getPreFilterCap
() const =0 |
|
virtual CV_WRAP void |
setPreFilterCap
(int preFilterCap)=0 |
|
virtual CV_WRAP int |
getUniquenessRatio
() const =0 |
|
virtual CV_WRAP void |
setUniquenessRatio
(int uniquenessRatio)=0 |
|
virtual CV_WRAP int |
getP1
() const =0 |
|
virtual CV_WRAP void |
setP1
(int P1)=0 |
|
virtual CV_WRAP int |
getP2
() const =0 |
|
virtual CV_WRAP void |
setP2
(int P2)=0 |
|
virtual CV_WRAP int |
getMode
() const =0 |
|
virtual CV_WRAP void |
setMode
(int mode)=0 |
|
virtual CV_WRAP void |
compute
(InputArray left, InputArray right,
OutputArray
disparity)=0 |
|
指定されたステレオペアに対する視差マップを計算します.[【詳解】(英語]
|
|
virtual CV_WRAP int |
getMinDisparity
() const =0 |
|
virtual CV_WRAP void |
setMinDisparity
(int minDisparity)=0 |
|
virtual CV_WRAP int |
getNumDisparities
() const =0 |
|
virtual CV_WRAP void |
setNumDisparities
(int numDisparities)=0 |
|
virtual CV_WRAP int |
getBlockSize
() const =0 |
|
virtual CV_WRAP void |
setBlockSize
(int blockSize)=0 |
|
virtual CV_WRAP int |
getSpeckleWindowSize
() const =0 |
|
virtual CV_WRAP void |
setSpeckleWindowSize
(int speckleWindowSize)=0 |
|
virtual CV_WRAP int |
getSpeckleRange
() const =0 |
|
virtual CV_WRAP void |
setSpeckleRange
(int speckleRange)=0 |
|
virtual CV_WRAP int |
getDisp12MaxDiff
() const =0 |
|
virtual CV_WRAP void |
setDisp12MaxDiff
(int disp12MaxDiff)=0 |
|
virtual CV_WRAP void |
clear
() |
|
アルゴリズムの状態をクリアする[【詳解】(英語]
|
|
virtual void |
write
(FileStorage
&fs) const |
|
アルゴリズムのパラメーターをファイルストレージに格納[【詳解】(英語]
|
|
CV_WRAP void |
write
(const
Ptr<
FileStorage
> &fs, const String &name=String()) const |
|
これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。
|
|
virtual CV_WRAP void |
read
(const
FileNode
&fn) |
|
アルゴリズム・パラメータをファイル・ストレージから読み込みます。[【詳解】(英語]
|
|
virtual CV_WRAP bool |
empty
() const |
|
が空の場合はtrueを返します。Algorithmが空の場合は真を返します。[【詳解】(英語]
|
|
virtual CV_WRAP void |
save
(const String &filename) const |
|
virtual CV_WRAP String |
getDefaultName
() const |
|
|
static CV_WRAP
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 > |
read
(const
FileNode
&fn) |
|
ファイル・ノードからアルゴリズムを読み込む[【詳解】(英語]
|
|
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()) |
|
文字列からアルゴリズムを読み込む[【詳解】(英語]
|
|
このクラスは,修正されたH. Hirschmullerアルゴリズムを実装しています[HH08]を実装しています.を実装しており,オリジナルのアルゴリズムとは以下のように異なります.
- createStereoSGBMでmode=StereoSGBM::MODE_HHを設定すると、アルゴリズムの完全なバリエーションが実行されますが、多くのメモリを消費する可能性があることに注意してください。
- このアルゴリズムは、個々のピクセルではなく、ブロックをマッチングします。ただし、blockSize=1を設定すると、ブロックが単一のピクセルに縮小されます。
- 相互情報コスト関数は実装されていません。代わりに、より単純なBirchfield-Tomasiサブピクセルメトリックを使用しています。[BT98] を使用しています。を使用しています。ただし、カラー画像にも対応しています。
- K. Konoligeアルゴリズムのいくつかの前処理および後処理のステップが含まれています。StereoBM例えば,プレフィルタリング(StereoBM::PREFILTER_XSOBELタイプ),ポストフィルタリング(一意性チェック,2次補間,スペックルフィルタリング)が含まれています.
- 覚え書き
-
- (Python) マッチングアルゴリズムの使用例は、opencc にあります。StereoSGBMマッチングアルゴリズムは opencv_source_code/samples/python/stereo_match.py にあります.
◆
create()
static CV_WRAP
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
|
視差検索範囲を作成します。StereoSGBMオブジェクト
- 引数
-
minDisparity |
視差の最小値.通常は0ですが,平行化アルゴリズムによって画像がずれることがあるので,このパラメータを適宜調整する必要があります. |
numDisparities |
最大視差量から最小視差量を引いた値.この値は常にゼロよりも大きくなります.現在の実装では,このパラメータは 16 で割り切れるものでなければなりません. |
blockSize |
マッチしたブロックサイズ.奇数 >=1 でなければなりません.通常は,3~11の範囲内の値を指定します. |
P1 |
視差の滑らかさを制御する最初のパラメータです.以下を参照してください. |
P2 |
視差の滑らかさを制御する2番目のパラメータ.値が大きくなるほど,視差が滑らかになります.P1は,隣接するピクセル間のプラスマイナス1の視差の変化に対するペナルティです.P2は,隣接するピクセル間で1以上の視差の変化があった場合のペナルティです.このアルゴリズムでは,P2 > P1 である必要があります.stereo_match.cpp のサンプルには,適度な P1 と P2 の値が示されています(それぞれ,8*number_of_image_channels*blockSize*blockSize と 32*number_of_image_channels*blockSize*blockSize など). |
disp12MaxDiff |
左右の視差をチェックする際の最大許容差(整数ピクセル単位)。チェックを無効にするには、この値を非正の値に設定します。 |
preFilterCap |
フィルタリングされた画像のピクセルに対する切り捨て値.このアルゴリズムでは、まず各ピクセルのx-derivativeを計算し、その値を[-preFilterCap, preFilterCap]間隔で切り詰めます。その結果をBirchfield-Tomasi pixel cost functionに渡します。 |
uniquenessRatio |
Margin(マージン):計算されたコスト関数の最良(最小)の値が、2番目に良い値に「勝つ」ことで、見つかったマッチが正しいと判断される割合です。通常,5~15 の範囲内の値であれば十分です. |
speckleWindowSize |
スムーズ視差領域のノイズスペックルを考慮して無効にする最大サイズ。0に設定するとスペックルフィルタリングを無効にします。それ以外の場合は、50-200の範囲内で設定してください。 |
speckleRange |
各連結成分内の最大視差変動。スペックルフィルタリングを行う場合、このパラメータを正の値に設定すると、暗黙のうちに16倍されます。通常は、1または2で十分です。 |
mode |
StereoSGBM::MODE_HHに設定すると、本格的な2パス・ダイナミック・プログラミング・アルゴリズムが実行されます。これは,O(W*H*numDisparities) バイトを消費するが,640x480 ステレオでは大きく,HD サイズの画像では巨大である.デフォルトでは,false に設定されています. |
最初のコンストラクタではStereoSGBMをすべてのデフォルトパラメータで初期化します。したがって,StereoSGBM::numDisparities を最小値に設定するだけでよいのです.2番目のコンストラクタでは,各パラメータをカスタム値に設定することができます.
このクラス詳解は次のファイルから抽出されました: