本「Learning OpenCV」のステレオ実装に従いました。基本、基本、回転、平行移動行列がありますが、クリックしたオブジェクトの実際の位置を計算するにはどうすればよいですか?
1 に答える
使用できますReprojectTo3D
。
reprojectImageto3D 関数には、視差マップ、画像と同じサイズの出力配列、および配列 Q (視差から深度へのマップ) が必要です。
Q は、stereoRectify 関数から計算されます -> stereoRectify には、固有のカメラ行列、歪み係数、および 2 つのカメラ間の相対回転と平行移動ベクトル (R&T) が必要です。
これらすべてを計算するには、これらすべてを出力する stereoCalibrate 関数を使用します。 http://opencv.willowgarage.com/documentation/camera_calibration_and_3d_reconstruction.html - これは、私が言及したすべての機能へのリンクです。
したがって、コーディングの順序は次のとおりです。
1> stereoCalibrate (今のところ同じカメラからの 2 つのビューを使用): 両方のカメラと R & T の歪み係数、固有行列を取得します (これは既に実行済みです)。
2> 視差を計算し、画像を保存します - ここに示す視差計算 (カメラに関する情報なしの 2 つの画像からの 3D 再構成) を使用して、reprojectImageto3D の最初と 2 番目の引数としてどのような種類の入力が期待されるかを理解します。
3> stereoRectify を使用して Q を取得します。
4> reprojectImage to3D にすべての値をプラグインして、座標を生成します。出力配列 _3dImage のすべてのエントリ、つまり各ピクセルには、ピクセルに対応する x、y 座標と、Q から計算された z 座標の 3 つの値が一緒に格納されます。この z 座標は、本質的に必要なものです。
視差マップを計算し、Q を使用して _3dImage を取得すると、それぞれ(i, j)
に値_3dImage
があり(x, y, z)
ます。3D イメージを表示するために PCL に移植したところ、次のようになりました。
これは、視差マップがどのように見えるかです
これは、PCL を使用した対応する 3D ビューです。