8

this paperで説明されているように、指定された高さでカメラからピクセル位置 (世界座標) までの光線方向を計算したいと考えています。カメラ画像サイズは640,480。固有のカメラ パラメーターを調整し、各画像の歪みを修正しました。ここにスケッチされているように、カメラと背景平面 (29 cm) の間の物理的な距離を測定しました。

シーン

1 cm は 25 ピクセルに変換されます (二次ピクセルを想定)。私の最初のアプローチは、次のようにピクセルとカメラの位置に基づいて計算することでした。

float3 pixPos = (float3)(u, v, z);
float3 camPos = (float3)(height/2, width/2, 29*25);
float3 ray = normalize(pixPos-camPos);

ここで、u、v は 0,0 から高さ、幅までの画像座標であり、z は私の (既に推定された) 高さの値です。これは正しい方法ではないようです。私はすでにSOで検索を行い、この回答を見つけましたが、そこに記載されているソリューションにはピクセルの高さが含まれていません(ここではz)。

4

1 に答える 1

14

数年前、卒業論文を書いていたとき、私は同じ問題を解決していました。これは、レイトレーシング用のカメラを作成する方法を説明するその一部です..

まず、カメラの座標系を定義する必要があります。これは正規直交座標系です。つまり、3 つの基底ベクトルはすべて互いに垂直で、同じサイズです (「1」である必要はありません)。また、カメラの座標系が右利きか左利きかを指摘する必要があります(左利きについて説明します)。まず、定義する必要がありますup vector(ベクトルは画面上の y 軸を示します) およびcamera direction vector(目の位置から投影面の中央までのベクトル)。次に、 と を使用してleft vector(または必要に応じて右ベクトル) (画面上の x 軸を正確に指す) をcross product計算up vectorしますcamera direction vector。さて、カメラ方向ベクトルと左ベクトルだけが確かに垂直なので、one more cross productcamera direction vectorおよびleft vector(画像上のベクトル y)。

このようなカメラ調整システムが得られます

左手用カメラ調整システム

いいえ、定義する必要はありません。ワールド座標での投影画面の大きさです。これは難しい場合があるため、2 つの角度ファイ角とシータ角(phitheta) と目の位置からの距離 ( と呼びましょう) で定義することもできますd

あなたのベクトルと が得られますv ベクトル。(xベクトルは画面上の x 軸を定義するベクトルなのでleft vector、利き手に依存する右ベクトルです) これら 2 つのベクトルの線形結合によりuv投影画面上の任意の位置を計算できます。係数アルファ alphaとは投影画面の中央からのベータ距離を表します。the point

アルファ係数ベータ係数srxy計算された画像上の座標 、とimageWidthimageHeight適切なサイズです。

この画像でわかるように

投影面

投影面上の任意の点の最終位置は です投影面上の点

次に、要求されたベクトルの計算は です希望のベクトル

于 2013-01-02T20:17:53.160 に答える