問題タブ [opencv-solvepnp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
opencv - opencv solvePnP、Y を除くすべての軸が見栄えがします
2D 特徴点と三角形分割された 3D ランドマーク ポイントを使用して、画像データセットで solvePnPRansac を実行しています。それは素晴らしく走り、回転、そして前軸と横軸の結果は見栄えがします。ただし、Y 軸は完全に間違っています。
データ セットのグラウンド トゥルースに照らして出力をテストしていますが、下降するはずの場所で上昇し、グラウンド トゥルースから非常に急速にずれています。他の軸は、はるかに長い間ロックされたままになります。
これは奇妙に思えますが、他の軸では正しく、1 つの軸では間違っているのでしょうか? さすがにそんなことはあり得ないので、どの軸も悪いか、どの軸も良いかのどちらかだと思っていたでしょう。
これを実現するために何が間違っている可能性がありますか? そして、どうすればこの奇妙さをデバッグできますか? 私の PnP コードは非常に標準的です。
c# - ARKit で公開されている pnp ソルバーはありますか、または EmguCV c# ラッパーを使用して Unity3D プロジェクト内で opencv の SolvePnP 関数を使用する方法はありますか
高レベルのコンテキスト:
Unity3D AR プロジェクトでは、システムは機械学習を使用して、イメージ内の一連の 2D ピクセル座標とワールド座標内の同じ一連の 3D ポイントとの間の対応を提供します。この 2 つのセットの対応関係から、その画像になったカメラ ポーズを推定したいと思います。
達成するための低レベルの目標:
私の調査の結果は、私が PnP-Ransac アルゴリズムを使用していることを示唆しています。Perspective-n-Points は、私が抱えているこの問題の名前です。一致する 2D-3D ポイントからカメラのポーズを見つけることです。PnP 問題の定義: https://en.wikipedia.org/wiki/Perspective-n-Point
私が試したこと
1) ARKit で PnP ソルバーを見つけようとしましたが、見つからなかったので公開されていないと思います。2) Unity プロジェクト内で openCV を使用できるようにするストアの EmguCV アセットを使用してみました。OpenCV solvePnP ドキュメント: https://docs.opencv.org/3.3.0/d9/d0c/group__calib3d.html#ga50620f0e26e02caa2e9adc07b5fbf24e
質問:
ARKit フレームワークで公開されている PnP ソルバーはありますか? そうでない場合は、Unity プロジェクト内で EmguCV C# ラッパーを使用して openCV の PnP ソルバーを正しく使用するにはどうすればよいですか (座標系を認識し、カメラ固有の行列のように提供する関数パラメーターを修正し、カメラの姿勢を正しくするために出力を解釈する方法)?
質問に答えようとして遭遇した問題:
SolvePnPRansac を使用すると、try-catch ブロックに配置しても、Unity-Editor 自体がクラッシュしました (おそらく、入力引数に予期しない形式が含まれていた可能性があります)。私は solvePnP だけを使用してより多くの成功を収めましたが、結果は期待したものではありません。ドキュメントには、出力ベクトル rvec と tvec は、オブジェクトをモデル座標系からカメラ座標系に移動する並進と回転に対応すると記載されています。したがって、カメラを (0,0,0) に配置して -z 方向を見て、オブジェクトを tvec にオイラー回転 rvec で配置すると、レンダリングされたオブジェクトは、ピクセル座標対応に使用した画像に似ていると予想されます。 . 私はそれを誤解しましたか?
私が持っている疑い:openCVの座標系は、画像座標yが上から下に移動し、zとxは右前方のままです。y 軸の 3D 座標だけでなく 2D も反転させてみましたが、うまくいきませんでした
編集 [ここでコードを削除しました。機能させるために質問してから大幅に変更したためです]
(多くのいくつかの) 関連する投稿 他の 41 個の stackoverflow の質問をタグ opencv-solvePnP で投げてみましたが、Unity3D または c# に関連するものはありませんでした
答えがありません
ホモグラフィーまたは solvePnP() 関数によるカメラ姿勢推定
3d-to-2d-point-correspondences (opencv を使用) でカメラのポーズを推定するにはどうすればよいですか?
違い: unity3D c# プロジェクトでそれを行う必要があります
わかった、数学的アルゴリズムを使用する必要がある、それが理論だが、ライブラリを自由に使用するにはどうすればよいか