0

私は、ユーザーが画像上の特定の点を識別し、それらの各点に関連付けられた実世界の座標を指定することで画像を登録できるようにする .NET プログラムを作成しています。

http://www.ironbyte.ca/temp/mountain.jpg

画像登録プロセスでは、ユーザーはカメラの座標も指定する必要があります。

画像が登録された後にできるようにしたいのは、実際の座標に基づいて画像上に他のポイントを描画することです。

私は透視投影について多くのことを読んできましたが、物事を機能させるのに苦労しています。私の数学のスキルは、闘争の一部であるべきものではないことを認めなければなりません. 私が立ち往生している場所は、焦点距離とディスプレイ表面までの距離を決定しようとしています:

この記事ではビューアーの位置 (e [x,y,z]) と呼びます: http://en.wikipedia.org/wiki/3D_projection#Perspective_projection

この記事も参照しています: http://www.shotlink.com/Tour/WebTemplate/shotlinknew.nsf/2c47cc31e412bc4985256e6e00287832/c1743b40acf6aa03852575b7007122b0/$FILE/Plotting%203D%20ShotLink%20Data%20%on%202D視野から焦点距離を抽出する .pdf は、事前にわかっているように見えますが、私の場合はそうではありません。

私の質問は、逆に作業して、画像上の既知の点の位置に基づいて焦点距離や視野を決定する方法はありますか? それとも、これを間違った方法で見ていて、最終目標を達成するためのより簡単な方法があるのでしょうか?

4

2 に答える 2

0

最小 4 つの既知の点を使用して射影行列を計算できるTsai アルゴリズム ( http://en.wikipedia.org/wiki/Camera_resectioning#Algorithms ) の実装を使用して、この問題を解決することができました。基本的に、ユーザーがポイントのワールド座標を指定してから、画像をクリックして画像座標を指定できるようにします。アルゴリズムは、これらのマッピング (マッピングが多いほど、ソリューションの精度が高くなります) をイメージの幅と高さと共に使用して、射影行列を計算します。次に、この射影行列を使用して、ワールド座標を使用して画像に追加の点を射影できます。

于 2013-06-18T12:59:07.800 に答える
0

編集:スキーマでユニットを混在させることで混乱しました。したがって、私は私の答えを少し作り直しました。


投影の背後にある数学を見ると、私には実現可能に思えます。

水平座標の状況のそれほど厳密ではないスキーマを次に示します (状況を説明するために、現実世界の座標とピクセルを組み合わせています)

射影のスキーマ

と:

  • D、ユーザーによって指定されたポイントの1つで(x,y,z)、カメラによって定義された相対座標系に対する投影位置を持ちます(したがって、その平行移動と回転を適用した後)
  • Eカメラ ポイント - 上記の座標系の原点。
  • B画像平面内の結果のポイントをuピクセルv単位で。画面の寸法はwxhピクセルです。
  • fピクセル単位の焦点距離( ...と同じ単位xyz ) 、実際の単位でのその値、および水平半画角 -評価する値Fα

三角形ECDEBM類似していることがわかります。そのため、 Side-Splitter Theoremを使用すると、次のようになります。

  • EM / EC = MB / CD<=> f / z = u / x(比率を比較しているので、式の左のメンバーが実世界の単位を使用し、右のメンバーがピクセルを使用している場合は問題ありません。 実世界の値をピクセルで割ったものです)

したがって、次のようになります。

  • f = u / x * z

必要に応じて、次の理由から、カメラのセンサーの寸法x (実世界の単位)を知る必要があると思います。α Fr_xr_y

  • tan(α) = (r_x / 2) / f F = r_x / (w / 2) * f

しかし、についてはα、次の方法で取得できます。

  • tan(α) = (w / 2) / f

あなたが指摘しているウィキペディアの記事と並行したい場合は、以下を使用しています。

スクリーンへの投影

どこ:

  • (d_x,d_y,d_z)= (x,y,z)、カメラ システム内の点の位置
  • (s_x,s_y)= (w,h), 印刷可能な面のサイズ
  • (r_x,r_y,r_z)= (r_x,r_y,f), 記録面の特性
  • (b_x,b_y)= (u,v)、印刷可能な面に配置します
于 2013-05-29T12:53:54.483 に答える