私は画像の視差マップを持っています。これを3Dポイントと法線のセットに変換する必要があります。これを行うにはどうすればよいですか?これを行うことができる既存の実装はありますか?視差マップを3Dポイントに変換
答えて
Gnu Triangulated Surfaceライブラリ?
私が奥行きマップ(または望むならば視差マップ)を作成して元のカメラのキャリブレーションを知っている前にこれをやっていたら、ポイントのR3への再投影を実行することができました。
各点の近傍(元の隣接ピクセルによる)を知ることは、それらを接続するための基本的な三角測量を作成することは非常に些細なことです。
(あなたがこれを知らなかった場合は...ドロネー三角形分割または他のより高度なアルゴリズムのいくつかのフォームを試行する必要があります)
あなたはすべてを保証するために、各三角形の正しい頂点の順序を取得していることを確認します法線は正しい方法を/一貫して指しています。
Meshlabは、追加の後処理に非常に便利です。
cvFindStereoCorrespondenceBM(frame1r, frame2r, disp, BMState);
/* cvShowImage("camera1", frame1);
cvShowImage("camera2", frame2); */
// cvConvertScale(disp, disp, 16, 0);
cvNormalize(disp, vdisp, 0, 256, CV_MINMAX);
cvShowImage("disparity", vdisp);
cvReprojectImageTo3D(disp, Image3D, &_Q);
cvShowImage("depthmap",Image3D);
このコードスニペットは私が願っています。ここでのコードの説明は次のとおりです。右カメラと左カメラの画像を整理してBMstate
を定義すると、これをcvFindStereoCorrespondenceBM
に渡して視差画像を見つけました。次に、3D点をImage3D
として格納する次元3の行列を定義する。 OpenCVのcvReprojectImageTo3D
我々はステレオ対応し得るQ行列を渡すことで機能することで、私たちは、あなたがこれだけの機能がスピードを向上させることができ、3Dポイントを持っている必要がある場合は、3Dの設定は、その2D画像
答えが役に立つと分かっていれば、あなたの答えはもっと役に立ちます。事実上純粋なコードスニペットは多くのアップフォースを得られない傾向があります。 –
Donald Fellows、説明を編集 – nbsrujan
@ here is calculation which may help you
% %Z = fB/d
% where
% Z = distance along the camera Z axis
% f = focal length (in pixels)
% B = baseline (in metres)
% d = disparity (in pixels)
% % After Z is determined, X and Y can be calculated using the usual projective camera equations:
%
% X = uZ/f
% Y = vZ/f
% where
% u and v are the pixel location in the 2D image
% X, Y, Z is the real 3d position
% Note: u and v are not the same as row and column. You must account for the image center. You can get the image center using the triclopsGetImageCenter() function. Then you find u and v by:
% u = col - centerCol
% v = row - centerRow
% Note: If u, v, f, and d are all in pixels and X,Y,Z are all in the meters, the units will always work i.e. pixel/pixel = no-unit-ratio = m/m.
コードに説明を追加する方が良いでしょう。 SOは "コードライブラリ"ではなく、援助サイトです。説明を追加することは、コードの問題だけでなく、どのように働いているのか、問題の解決法と同じように作業原理も重要な問題に答える最良の方法です。 –
- 1. 2dウィンドウポイントを3dポイントに変換する
- 2. ステレオマッチングにおける視差マップと視差画像の相違
- 3. 視差マップの定義
- 4. 3Dポイントを2Dポイント座標系に変換する、またはその逆を変換する
- 5. 曲線の視点:3Dを2Dに変換
- 6. マップ上のポイントをポリゴンに変換する
- 7. OpenCV較正パラメータとステレオカメラからの3Dポイント変換
- 8. 3Dアレイを3Dモデルに変換する
- 9. 視差マップからオブジェクトの深度を取得するには?
- 10. 3Dポイントの生成
- 11. JavaマップをJavascriptマップに変換する
- 12. 視差画像を視差行内に追加する方法
- 13. 3Dモデルをボクセルフィールドに変換する
- 14. 3Dモデルを2D画像に変換
- 15. 3Dシーンを2Dビューに変換する
- 16. 3Dモデルを2D画像に変換
- 17. OpenCV:Matを3Dイメージアレイに変換する
- 18. Android:ポイントをピクセルに変換する
- 19. Three.js +リーフレット= 3Dマップ?
- 20. CSS3 3D変換コードのコンパスバージョン
- 21. 視差マップからのOpenCv深度推定
- 22. ステレオ画像と計算視差/奥行きマップのネイティブライブラリ
- 23. jQuery視差チュートリアル?
- 24. カスタム視差
- 25. 3Dを変換する - > 2D座標
- 26. 3Dゲームエンジン、アブソリュート変換を取得
- 27. Androidの視差アニメーション
- 28. 差異GUIDS無視
- 29. スクロール垂直視差
- 30. 4ポイントのスペイン語グレードスケールを110ポイントのイタリア語グレードスケールに変換するには?
に対応する点取得しますもしあなたがそれを必要とするなら、投票してください。私はスピードコードを追加します。 –