tomo0415
@tomo0415

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

ステレオ視差推定で何故かFullDPが使用できません。

ステレオ視差推定をFullDPで行いたい。

二つのカメラでのステレオ奥行き推定を行ってます。
cv2.StereoSGBM_createを用いて視差推定を行う際、
fullDp = True
で実行したいのですが、エラー出ます。

発生している問題・エラー

TypeError: 'fullDp' is an invalid keyword argument for StereoSGBM_create()

該当するソースコード

stereo = cv2.StereoSGBM_create(
            numDisparities = self._num_disparities,
            blockSize = self._window_size,
            P1 = 8 * self._window_size**2,
            P2 = 32 * self._window_size**2,
            disp12MaxDiff = 0,
            uniquenessRatio = 0,
            speckleWindowSize = 0,
            speckleRange = 16,
            fullDp = True,
            mode=cv2.StereoSGBM_MODE_HH4
        )

自分で試したこと

以下のMODEで試しましたができませんでした。
MODE_SGBM,
MODE_HH,
MODE_SGBM_3WAY,
MODE_HH4

python3.8.3
openCV4.2

0

1Answer

TL;DR

OpenCV4.2では引数 fullDp がありません。代わりに、mode=cv2.StereoSGBM_MODE_HH とすると、fullDp=True と同様の処理ができます。

詳細

OpenCV4.2のリファレンスを見ると、引数fullDpがありません。

OpenCV: cv::StereoSGBM Class Reference

2.X系では存在するようです。つまり、2.Xから4.2の間のどこかでこの引数が消えてしまっています。

カメラキャリブレーションと3次元再構成 — opencv 2.2 documentation

こういう場合、大抵は他のパラメータに置き換わっていることがほとんどです。2.Xのリファレンスには以下の記載があります。

デフォルトでは,このアルゴリズムはシングルパスです.つまり,8方向ではなく5方向しか考慮されません.このアルゴリズムの完全版( 大量の メモリを消費する場合があります)を実行するには, fullDP=true としてください.

もう一度4.2のリファレンスに戻って、周辺を読んでみます。Detailed Descriptionに以下の記載を見つけました。英語と日本語の違いがありますが、上記と同じことを言っています。

By default, the algorithm is single-pass, which means that you consider only 5 directions instead of 8. Set mode=StereoSGBM::MODE_HH in createStereoSGBM to run the full variant of the algorithm but beware that it may consume a lot of memory.

1Like

Comments

  1. @tomo0415

    Questioner

    回答していただき、ありがとうございます。
    mode=cv2.StereoSGBM_MODE_HHにして、実行します。
    本当にありがとうございます。

Your answer might help someone💌