私は画像の視差マップを持っています。これを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. 視差マップからフラットポイントクラウドを取得
- 6. 曲線の視点:3Dを2Dに変換
- 7. マップ上のポイントをポリゴンに変換する
- 8. OpenCV較正パラメータとステレオカメラからの3Dポイント変換
- 9. OpenFrameworksの視差マップ後処理
- 10. 前景マスク画像の視差マップ
- 11. 変更視差バナーサイズモバイル
- 12. 3Dアレイを3Dモデルに変換する
- 13. C# - ポイントをポイントに変換する
- 14. 3D変換を2Dに変換
- 15. オブジェクトを3Dポイントに回転
- 16. メニュー3D変換
- 17. css3 3D変換
- 18. 3Dポイントの生成
- 19. 視差マップからオブジェクトの深度を取得するには?
- 20. ステレオ画像ペアの視差マップを見つけるには
- 21. フーリエ変換3Dデータセット
- 22. CSS 3Dアイソメトリックシンプルローテーション変換
- 23. iOS CorePlotポイント変換
- 24. 視差マップがCV_8UタイプのときにOpenCVの視差値にアクセスしますか?
- 25. SFMLを使用して2dポイントから3dへの最新のOpenGL変換
- 26. 交差点のポイント
- 27. JavaマップをJavascriptマップに変換する
- 28. 視差画像を視差行内に追加する方法
- 29. Matlab視差画像を単精度からuint8に変換する
- 30. OpenCV - 視差マップから実距離を計算する
に対応する点取得しますもしあなたがそれを必要とするなら、投票してください。私はスピードコードを追加します。 –