問題タブ [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.

0 投票する
0 に答える
126 参照

python - solvePnP() から取得したポーズ (回転行列と並進ベクトル) を介してポーズの速度と加速度を取得するにはどうすればよいですか?

私は現在、solvePnP() を介して apriltag オブジェクトのポーズを取得し、projectPoints() を使用してポイントを投影しています。

これは videoStream で呼び出されるため、solvePnP() を最適化するために、前のポーズ (前のフレームのオブジェクトのポーズ) を取得し、そのポーズを現在のフレームの solvePnP() に渡します。

コードは次のとおりです。

動画ストリーミング機能内:

ポーズの速度と加速度を取得し、それを solvePnP() に渡したいと思います。

ポーズの速度については、現在の並進ベクトルから前の並進ベクトルを差し引くだけでよいことはわかっていますが、回転行列 (Rodrigues() を介して取得し、加速度を取得する) についてはどうすればよいかわかりません。 . 2 つの回転行列の間の角度を取得する必要があるかもしれないと考えています, そしてその差は変化を与え、したがって角速度を与えるでしょうか? または、solvePnP() から回転ベクトル間の差を見つけるのと同じくらい簡単です. ?

私の質問は次のとおりです。

  1. 回転行列の観点からポーズ間の速度を取得するにはどうすればよいですか?現在の移動ベクトルから前の移動ベクトルを差し引くだけの方法は、移動速度を取得するという点で正しいですか?
  2. 並進ベクトルと回転行列の加速度を取得するにはどうすればよいですか?
  3. 前のポーズを取得するために使用している方法は最善の方法ですか?
  4. 加速度については、速度の変化だけなので、フレーム間で取得した速度を追跡し、差を取得して加速度を取得するのが賢明でしょうか?

どんな助けでも大歓迎です!

0 投票する
1 に答える
497 参照

opencv - 未知の内因性および外因性パラメーター内での OpenCV カメラ キャリブレーション: アルゴリズム DLT と SolvePNP の組み合わせ

キャリブレーションされていない画像、つまり単一の画像の絶対カメラ位置を推定しようとしています。3D モデル (オブジェクト座標) と 2D イメージ (UV 座標) の 2 セットのキー ポイントがあります。キーポイントが正確であると仮定しましょう。次に、次の手順を実行します。

  • 標準の直接線形変換 (DLT) を適用して、射影行列 P を推定します。3 次元の「世界」から 2 次元の画像変換 x = P*X;
  • OpenCV DecomposeProjectionMatrix() 関数は、射影行列を外因性行列と内因性行列に分解するのに役立ちます: P = K {R|t};
  • 回転行列と平行移動行列の最初の推測を改善するために、SolvePnP (「最良の」ソリューションを提供することを理解した反復法を使用) 関数をキー ポイント セットとカメラ パラメータに適用します。

いくつかのケースで組み合わせたアルゴリズムを実行しているときに、ほとんどのケースで SolvePnP がグラウンド トゥルースに非常に近い結果を返すことに気付きました。休符の結果は不正確で、回転と移動は現実とはかけ離れています。

Q: 現在のアルゴリズムが失敗するこれらのケースを改善することは可能ですか? OpenCV CameraCalibrate() に基づいて組み込みパラメーターを最適化するか、他の SolvePnP アルゴリズムを適用しますか?

0 投票する
1 に答える
288 参照

opencv - 画像の2次元点から平面の透視世界で回転と位置を求めたい

私は2D png画像を持っていますフレーム

図に示すように、ソファの完全な回転と位置に 3D 平面を配置したい最終フレーム

three.js とパースペクティブ カメラを使用して、平面に手動で回転と移動を追加しています。

緑の平面が配置されている領域の中心と角の座標があります。初期の 3D 座標位置 - (0,0,0) と回転 - (0,0,0) があります。私は Object (0,0),(0,100),(140,0),(1 likeの初期点を持っています初期フレーム

OpenCV と three.js を使用して、初期フレーム最終フレームに変換したいと考えています。その 2D 画像から最終フレームの緑色の平面の角度を見つけて、緑色の平面を回転させて白い平面に変換する方法は?

私たちの最終目標は、このような平面に 3D オブジェクトを配置することです -最終イメージ

OpenCV solvePNP を使用して同じことを解決しようとしましたが、回転と平行移動ベクトルが機能せず、間違った結果が得られたという望ましい結果が得られませんでした。