高レベルのコンテキスト:
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# プロジェクトでそれを行う必要があります
わかった、数学的アルゴリズムを使用する必要がある、それが理論だが、ライブラリを自由に使用するにはどうすればよいか