2017-10-23 30 views
1

linkたちはデュアル魚眼レンズは、以下の式を用いて座標を正距円筒座標に変換できることを示唆しているの正距円筒の座標変換は座標

const float FOV = 220.0f * PI/180.0f; 
float r = sqrt(u*u + v*v); 
float theta = atan2(v, u); 
float phi = r * FOV * 0.5f; 
float px = u; 
float py = r * sin(phi); 
float pz = v; 
float longitude = atan2(py, px); // theta 
float latitude = atan2(pz, sqrt(px*px + py*py)); // phi 
x = longitude/PI; 
y = 2.0f * latitude/PI; 

残念ながら私の数学は、私は、PX、PYおよびPZの値を推測しようとしたところ、私は、正確に上記のコードを記述する場合は必ずこのことを理解していないために十分ではありません。

私のカメラのFOVが220度で、カメラの解像度が2880x1440であると仮定すると、重なり合った領域のリアカメラのポイント(358,224)と、オーバーラップしたエリアのフロントカメラのポイント(2563,197)エリアは(2205,1009)に近い座標にマップされます。しかし実際のマッピングポイントはそれぞれ(515.966370,1834.647949)と(1644.442017,1853.060669)であり、両方とも(2205,1009)から非常に離れています。上記のコードを修正する方法をお手伝いしてください。どうもありがとう!

答えて

1

正射影画像を作成しているので、逆マッピングを使用することをお勧めします。

ペイントしているターゲット画像のピクセル位置から開始します。 2Dの位置を経度/緯度に変換します。次にそれを単位球の表面上の3D点に変換します。その後、3D点から2D魚眼源画像の位置に変換します。 Paul Bourkeのページでは、下の方程式、次に右の方程式、次に上の方程式から始めます。

緯度90度のようなランドマークの点を使用して、結果が各ステップで意味を持つことを確認します。

最終的な結果は、[-1 .. + 1]の範囲のソース魚眼画像内の位置でなければなりません。必要に応じて、ピクセルまたはUVにマップし直します。ソースは2つのアイ・イメージに分割されているので、ターゲット(等距離)の経度から正しいソース・サブイメージへのマッピングも必要になります。

関連する問題