12

私の悪い英語でごめんなさい。次の問題があります。

1

私のモバイルデバイスのカメラがこの写真を表示しているとしましょう。

写真では、4 つの異なる位置を見ることができます。すべての位置はわかっています (経度、緯度)。

今、特定の位置が写真のどこにあるか知りたいです。たとえば、前に 20 メートル、左に 5 メートルの長方形が必要です。このポイントの緯度/経度はわかっていますが、画像 (x,y) 内のどこに配置する必要があるかわかりません。たとえば、POS3 は私のビューでは (0,400) にあります。POS4 は (600,400) などです。

20 メートル前、5 メートル左にある新しいポイントはどこに配置すればよいですか? (したがって、私の入力は: (LatXY,LonXY) であり、結果は画面上で (x,y) になるはずです)

また、カメラの高さと、カメラからの x、y、z 軸の角度も取得しました。

この問題を解決するために簡単な数学演算を使用できますか?

どうもありがとうございました!

4

3 に答える 3

5

必要な答えは、必要な結果の精度によって異なります。danaid が指摘したように、イメージ センサーの非線形性や、大気の歪みなどのその他の要因がエラーを引き起こす可能性がありますが、さまざまなデバイスのさまざまなカメラなどで解決するのは難しい問題です。それでは、より正確さが必要な場合に微調整できる合理的な近似値を取得することから始めましょう。

まず、必要に応じて、デバイスからの方向情報を無視できる場合があります。5 つの位置 (POS1 - POS4 とカメラ) が一貫した座標の基本セットにある場合、必要なものはすべて揃っています。実際、これらすべてのポイントは必要ありません。

一貫した座標に関するメモ。彼の縮尺では、緯度と経度をメートルに変換し、縮尺係数に cos(lat) を使用すると、「平らな地球」の観点からすべての人を扱うことができるはずです。次に、カメラの xy 平面が大まかにグローバル xz 平面であることを覚えておく必要があります。

概念的な背景 下の図は、イメージ プレーンへの点の投影を示しています。パースペクティブに使用される dz は、遠点と近点の間のビュー内の距離とそれらの物理的な距離の比率を使用して直接導き出すことができます。POS1 から POS2 への線が POS3 から POS4 への線と平行である単純なケースでは、遠近係数は 2 つの線のスケーリングの比率にすぎません。

Scale (POS1, POS2) = pixel distance (pos1, pos2) / Physical distance (POS1, POS2)
Scale (POS3, POS4) = pixel distance (pos3, pos4) / Physical distance (POS3, POS4)
Perspective factor = Scale (POS3, POS4) / Scale (POS1, POS2)

したがって、四角形の頂点に適用する遠近係数は、線間の頂点までの距離の比率になります。単純化:

Factor(rect) ~= [(Rect.z - (POS3, POS4).z / ((POS1, POS2).z - (POS3, POS4).z)] * Perspective factor.

答え

透視変換は、視線方向の焦点からの距離に対して線形です。以下の図は、X 軸がイメージ プレーンに平行で、Y 軸がビューの方向を指している状態で描かれています。この座標系では、原点から任意の距離にある任意の点 P とイメージ プレーンに対して、投影された点 p は Px/Py に比例する X 座標 px を持ちます。これらの値は線形補間できます。

この図で、tp はターゲット ポイントの目的の投影です。tp.x を取得するには、次のように距離の調整を使用して、たとえば pos1.x と pos3.x の間を補間します。

tp.x = pos1.x + ((pos3.x-pos1.x)*((TP.x/TP.y)-(POS1.x/POS1.y))/((POS3.x/POS3.y)-(POS1.x/POS1.y))

このアプローチの利点は、各ピクセルから見た角度を事前に知る必要がなく、カメラの位置と向きの妥当な誤差に対して比較的堅牢であることです。

さらなる改良

より多くのデータを使用するということは、より多くのエラーを補正できることを意味します。ビュー内の複数のポイントで、カメラの位置と向きはTienstra メソッドを使用して調整できます。このアプローチの簡潔な証明 (重心座標を使用) は、ここにあります

必要な変換はすべて同次座標に基づく線形であるため、同次 3 空間の X、Y、Z、W 座標と (x、y) 座標を指定して、重心座標を適用して 3 つ以上の点に基づいて補間できます。画像空間で。ポイントが目的のポイントに近いほど、非線形性がそれほど重要ではない可能性が高いため、この例では、四角形が左側にあるため、POS 1 と POS3 を使用し、相対距離に応じて POS2 または POS4 を使用します。 .

(重心座標は、3D グラフィックスで三角形 (フラグメント) の色を補間するために使用される方法として最もよく知られています。)

編集:重心座標には、焦点からの距離の遠近補正を表現する別の方法である W 同次座標係数が引き続き必要です。詳細については、GameDev に関するこの記事を参照してください。

2 つの関連する SO の質問: 3Dのテクスチャ座標の透視補正と重心座標のテクスチャ マッピングこの図は、グローバル座標に基づく画像座標の補間を説明するのに役立ちます

于 2013-04-05T21:53:27.490 に答える
3

カメラ フレーム内の点と現実世界の座標がわかっている場合は、いくつかの単純な線形代数で十分です。OpenCV のようなパッケージにはこのタイプの機能がありますが、別の方法として、射影行列を自分で作成することもできます。

http://en.wikipedia.org/wiki/3D_projection

一連の点を取得したら、いくつかのベクトルを入力して連立方程式を解くのと同じくらい簡単です。これにより、射影行列が得られます。射影行列を取得したら、4 つの点が平面であると仮定できます。任意の 3D 座標を乗算して、対応する 2D イメージ プレーン座標を見つけます。

于 2013-03-27T22:21:11.247 に答える