問題タブ [structure-from-motion]

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 に答える
221 参照

opencv - モーションからの構造: エッセンシャル マトリックスからの回転および移動マトリックスの計算エラー

動きから構造をシミュレートしようとしています。

  1. 動きが x 方向である場合を考えてみましょう。以下に示すように、x 方向にのみ 50 ピクセルの動きがあるマッチング ポイントを作成しました。

前の画像座標

現在の画像座標 [0] {x=100.0 y=50.0 } [1] {x=150.0 y=50.0 }
[2] {x=200.0 y=50.0 } [3] {x=250.0 y=50.0 } [ 4] {x=300.0 y=50.0} [5] {x=350.0 y=50.0} [6] {x=100.0 y=100. [7] {x=150.0 y=100. [8] {x=200.0 y=100. [9] {x=250.0 y=100. } [10] {x=300.0 y=100. } [11] {x=350.0 y=100. }
[12] {x=100.0 y=150. } [13] {x=150.0 y=150. } [14] {x=200.0 y=150. } [15] {x=250.0 y=150. }

Intrinsic MatrixcvFindFundamentalMatrix 6.2821272+002 0. 3.474665e+002 0. 6.2886809e+002 2.4486120e+002 0. 0. 1. 既知の Intrinsic 行列を使用 opencv function( ) を使用して基礎行列を計算しました

平均ピクセル エラーはゼロに非常に近いです。

次に、以下の式を使用して必須マトリックスを見つけます

X オフセットを含むエッセンシャル マトリックス

次に、SVD - SVD decomp = SVD(E); を使用して、以下のリンクに示されているように、回転行列と並進行列を分解します。

基本行列から平行移動と回転を抽出

分解すると、回転角 Rx =0deg Ry =0deg と Rz =0deg になります。

回転は 0 度または 180 度のいずれかなので、これで問題ないようです。

y 方向の平行移動のみで座標を変更すると、次の座標のようになります。

前の座標

現在の座標

基本行列と本質行列を構築するために、同じ手順と同じ固有行列が使用されます。

Y オフセット -2.791314e-030、2.5449611e-015、5.095796479e-016 のエッセンシャル
マトリックス

しかし分解された回転は Rx=-2.27653561deg Ry = 180, Rz = 0

私が理解していないのは、変換が X 方向と y 方向のいずれかであるため、Rx に何らかの値がある理由です。

私のコードに問題がある場合は、ヒントを教えてください。

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

c++ - OpenCVs triangulatePoints() 後の均一な 4D ベクトルの正規化

対応するイメージ ポイントと射影行列の 2 つのセットがあります。私は OpenCVs triangulatePoints() 関数 ( API | src コード) を使用し、同種の 3D ポイントの結果は次のとおりです。

三角測量では SVD 構成を使用して解を計算するため、ポイント (上記のマトリックスの各行は 4D ポイントを表します) は単位ベクトルに正規化されます。同次点は次のように定義されるため、

ポイントのメトリック再構築を取得するために、計算されたすべてのポイントを個別に正規化する必要がありますか?最後のエントリはユニットです?

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

opencv - 回転とカメラの動きが少ない場合のシーン再構築

ドアの回転中心の近くに取り付けられたモノカメラを使用して、深度測定である種のオブジェクト検出を実装しようとしています。基本的な考え方は、ドアの前 (スイングアップ時) の物体を検出し、ドアが完全に開かない場合に衝突警告を生成することです。

私が対処しなければならないいくつかの問題があります:

  • わずかな動き: カメラは 0° から 90° まで回転し、限られた移動しかありません (カメラの位置による)。
  • カメラのレンズは魚眼レンズです (AOV ~ 100° 垂直および 180° 水平)

私が試したこと:

  • モーションからの構造:

    完全なシーケンス (0° から 90° までの回転) を使用しても、非常に悪いシーンの再構成しか得られません。カメラの動きが小さいため、このアプローチで良い結果を得るのは本当に難しいと思います (特に、衝突警告に関しては完全なビデオ シーケンスを使用できないため)。

  • 疑似ステレオ再構成:

    連続した 2 つの画像を使用し、それらを修正して、視差マップを生成しようとしました。ほとんどの場合、エピポールが画像内にあり、修正時に大量の歪みが発生します。しかし、エピポールが画像の外側にある場合でも (修正は可能です)、視差マップは使用できません (フラグメント、特徴的な構造はありません)。

誰かが私がここで試すことができるアイデアを持っていれば幸いです。多分オプティカルフローはここに適していますか?

また、解決策が実際には不可能な場合のある種の (数学的) 証明にも興味があります。SfM のようなアルゴリズムで良好な再構成結果を得るために必要な最小限の動きはありますか? SfM では、翻訳は回転より優れていますか?

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

python - OpenCVで2台のカメラの位置を推定するにはどうすればよいですか?

2 つの画像から 2 組の対応する点があります。カメラ間の変換をエンコードするエッセンシャル マトリックスを推定しました。

次に、回転コンポーネントと平行移動コンポーネントを抽出しました。

しかし、実際に 2 つのカメラのカメラ マトリックスを取得してcv2.triangulatePoints、小さな点群を生成するために使用するにはどうすればよいでしょうか?