問題タブ [pose-estimation]
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.
c++ - 外部パラメータと内部パラメータが既知の場合、2D イメージ ピクセルから 3D 座標を取得します
ツァイアルゴからカメラのキャリブレーションを行っています。内部行列と外部行列を取得しましたが、その情報から 3D 座標を再構築するにはどうすればよいですか?
1) X、Y、Z、Wの検索にガウス消去法を使用できます。その後、ポイントは均質システムとして X/W 、 Y/W 、 Z/W になります。
2) OpenCV ドキュメントアプローチを使用できます
。
私が知っているように、、、、u
計算できます。v
R
t
X,Y,Z
ただし、どちらの方法も結果が異なり、正しくありません。
私は何を間違っていますか?
c++ - C ++はワールド座標でカメラの位置を取得します(opencv)
わかりました。最初に、Matlab ツールと chessboardthingie を使用して組み込みパラメーターを取得します。そして、私は cv::solvePnP() を使用します
はい、検索を使用しましたが、残念ながらあまり役に立ちませんでした。
タイトルが示すように、現実世界のカメラ座標を見つける必要があります。しかし、opencv コマンドに関するいくつかの問題にも直面しています。これまで、画像内のいくつかのポイントと対応するワールド座標を知っています。(最悪6点が判明)
カメラ座標を取得するには、次の式を使用することを考えました。
transp(x,y,z)= - transp(R)*t 、ここで R と t は外部パラメータです
だから今私の問題は次のとおりです: R と t を計算する方法は? この問題を解決する opencv 関数は存在しますか? 実際には多くのカメラキャリブレーション機能があります。それとも、最初に固有パラメータを計算する必要がありますか?
編集:ここに私が意味する機能があります :
しかし、パラメータがどのように見えるべきかわかりません。たとえば、 cv::Mat ([[x1] [y1] [z1]] .... [[x6] [y6] [z6]]) のような 3x6 マトリックスを手動で初期化するにはどうすればよいですか
opencv - 拡張現実のカメラ マトリックスを見つける方法は?
X、Y、Zメートルのカメラで仮想オブジェクトを拡張したい。OpenCVにはカメラのキャリブレーション機能がありますが、正確にメートル単位で座標を与える方法がわかりません
Unity でカメラをシミュレートしようとしましたが、期待どおりの結果が得られません。
射影行列を次のように設定し、z = 2.415 + 0.5 に単位立方体を作成します。2.415 は目と投影面 (ピンホール カメラ モデル) の間の距離です。立方体の面は前方クリッピング面にあり、その寸法は単位なので、ビューポート全体をカバーするべきではありませんか?
opencv - モデルベースの姿勢推定
opencvを使用して、既知の3Dオブジェクトのポーズを推定したいと考えています。3D モデルのポイントとそれに対応する画像上のポイントが指定されている場合は、solvePnP を使用できます。私の質問は次のとおりです。既知の 3D モデルとその画像への投影との対応をどのように見つけることができますか? 本当にありがとうございました
c++ - 2D画像ピクセルから3D座標系でx、yを取得する
固定位置のカメラを使用して、動いているオブジェクトを追跡し、事前に選択した座標系でローカライズする必要があります。アイデアは、既知の高さを持つオブジェクトの上部に特定のカラー マーカーを配置することです。これにより、Z 座標が認識されます。色の追跡が完了したら、色が見つかった u と v の画像座標から X と Y を見つける必要があります。私はすでにカメラのキャリブレーションを行っており、cv::solvePnP を使用して回転と平行移動ベクトルを取得する予定です。また、ここでカラー トラッキングについて学び、そこから C++ API を作成しました。
ここで同様の質問を見つけて、そこから多くのことを学びましたが、違いは、Z 座標がわかっている (以前に測定された) ため、X と Y のみを評価する必要があることです。事前に指定された Z でこれらの X 座標と Y 座標を取得するにはどうすればよいですか? 手伝ってくれてありがとう!
opencv - 画像点から x,y 座標 (3D) を計算する
3D 座標系でオブジェクトを見つけるタスクがあります。ほぼ正確な X 座標と Y 座標を取得する必要があるため、この図のオレンジ色のボールのように、移動オブジェクトの上部に配置される既知の Z 座標を持つ 1 つのカラー マーカーを追跡することにしました。
最初に、カメラのキャリブレーションを行って内部パラメーターを取得し、その後、次のコードのように cv::solvePnP を使用して回転と平行移動ベクトルを取得しました。
すべての行列を取得した後、画像ポイントを世界座標に変換するのに役立つこの方程式:
ここで、M は cameraMatrix、R - 回転マトリックス、t - tvec、s は不明です。Zconst はオレンジ色のボールの高さを表し、この例では 285 mm です。したがって、最初に前の方程式を解いて「s」を取得する必要があります。その後、イメージ ポイントを選択して X 座標と Y 座標を見つけます。
これを解決すると、行列の最後の行を使用して変数 "s" を見つけることができます。これは、Zconst が既知であるためです。そのための次のコードを次に示します。
この後、結果が得られました: P = [-2629.5, 1272.6, 285.]
それを測定値と比較すると、次のようになります。 Preal = [-2629.6, 1269.5, 285.]
エラーは非常に小さく、非常に良いのですが、このボックスをこの部屋の端に移動すると、エラーが 20 ~ 40 mm になる可能性があり、これを改善したいと考えています。誰でもそれを手伝ってもらえますか、何か提案はありますか?
opengl - 2台のカメラによる頭部姿勢推定
2 台のカメラを使用した頭部姿勢推定プロジェクトに取り組んでいます。1 つのカメラ システムに対して動作し、各カメラ座標系に対する頭部の回転行列と並進ベクトルを返します。頭の動きを表すために回転および変換された OpenGL シーンでオブジェクトをレンダリングしました。計算された回転行列と並進ベクトルを表示するには、次の OpenGL コマンドを使用するだけです。
ここで、ポーズ マトリックスは、頭部の回転マトリックスと並進ベクトルから構成される OpenGL ModelView マトリックスです。
現在、2 台のキャリブレーション済みカメラに対してこれを実行しようとしています。最初のカメラが顔の追跡を失ったが、2 番目のカメラが頭の姿勢を推定した場合、2 番目のカメラに対する回転と平行移動を表示し、その逆も同様です。どちらの場合も、1 つの OpenGl オブジェクトを表示して移動したいと考えています。そのためには、ポーズ行列を共通の座標フレームに転送する必要があります。
2 台のカメラの相対的なジオメトリを知っています。カメラの 1 つがワールド座標フレームであると仮定し、最初のカメラに対して 2 番目のカメラのポーズ マトリックスとキャリブレーション マトリックスを乗算することにより、2 番目のカメラのヘッド ポーズ マトリックスを最初のカメラのフレームに転送します。この乗算された行列を OpenGL ModelView 行列にロードすると、間違った結果が得られます。最初のカメラが顔をキャプチャすると、オブジェクトは右に移動しますが、2 番目のカメラではオブジェクトが平行移動および回転し、最初のカメラの場合と同じ場所にはありません。
何が問題なのですか?OpenGLの表示部分が間違っているのでしょうか?
opencv - CV Surf と FindExtrinsicCameraParams2 を開きます
SURF 特徴検出でホモグラフィー分解を使用する代わりに、FindExtrinsicCameraParams2 を使用してポーズ行列を取得することは可能ですか?
opencv - OpenCV::solvePNP() - アサーションに失敗しました
OpenCV の solvePNP() を使用して、カメラのポーズを取得しようとしています。
プログラムを実行した後、次のエラーが表示されます。
これらのエラーを解決する方法を検索しようとしましたが、残念ながら解決できませんでした!
これが私のコードです。すべてのコメント/ヘルプは大歓迎です:
編集 (いくつかのデバッグ情報):
行ごとにデバッグしました。私はすべての機能に足を踏み入れました。SolvePNP(...) でアサーションが失敗しました。solvePNP 関数にステップインしたときに表示される内容を以下に示します。最初に最初の if ステートメント / if(vec.empty()) / を飛び越え、2 番目の if ステートメント / if( !copyData ) / に入り、最後の行 /*datalimit = dataend = datastart + rows を実行します。 *step[0]*/ は、最初の if ステートメントに戻り、=> を返します。Assertion failed エラーが発生します。
opencv - 平面オブジェクトホモグラフィ計算とポーズ推定
私はOpenCVで自分のホモグラフィとポーズ推定を実装しようとしています。カメラからの入力フレームに配置したいモデルとして正方形の画像があるとします。私の質問は、ホモグラフィを計算するためのモデルデータを準備する方法についてです。
私は次の手順を実行しました:
1-両方の画像で対応する3つのセットを抽出しました。
2-P3P問題の解決:
a)カメラ固有のパラメータを使用して入力ポイントを正規化する:
b)単位ベクトルを持つために長さを正規化する:
c)p3pを解き、a、b、cに保存することにより、uとカメラの焦点の間の距離を求めます(vとwについても同じです)。
d)3D座標の計算:
3-コンピューティングホモグラフィ
私の質問はここで生じています。p1_model,p2_model and p3_model
ホモグラフィコンピューティングに備えるために、どのように準備および変更する必要がありますか?
明らかに A_Input
、は正規化された日付の3Dベクトルですがp1_model
、はピクセル単位の2Dベクトルです。
問題を解決した後、残りは次のようになります。
a)両方のセットの中心点を見つける。
b)この式ドット製品を使用してHを見つける
4-HとSVDを使用して剛体変換を見つける
詳細はこちらとこちらをご覧ください