1

3D オブジェクトがあるとします。オブジェクトの形状に関する詳細な情報はありません。私が持っている唯一の情報は、3 軸座標の範囲 (最小/最大 x 座標など) です。

カメラの「方向」(つまり、基本的にカメラがオブジェクトを見る角度)が与えられると、特定のサイズの画面でオブジェクト全体を表示できるようにするためにカメラがどれだけ離れている必要があるかを計算するにはどうすればよいですか。

したがって、基本的には次の入力があります。

  • オブジェクトの境界
  • カメラの「向き」
  • 画面サイズ

そして、カメラの距離を計算したい。

どうすればこれを解決できますか?

3D座標でカメラの位置を知っているときに3Dポイントを2D平面に投影する方法に関する多くの情報を見つけましたが、入力/出力に一致するように式を適応させることに失敗しました.

入力例は次のとおりです。

  • x: (0-100)、y: (0-100)、z: (0-100)
  • カメラは、オブジェクトが Z 軸を中心に 45°、X 軸を中心に 45°回転したようにオブジェクトを見ます。
  • 画面のサイズは 600x600 です

前もって感謝します!

4

1 に答える 1

1

次の回答では正射影を想定していますが、透視投影への拡張は簡単です。小さめのオブジェクトの場合、正射影は問題ないように見えます (遠近効果が見られないことに慣れているため)。

各点について、、をオブジェクトi空間の元の座標とします。x[i]y[i]z[i]

x'[i], y'[i],をカメラ空間に回転させz'[i]た点とします (これは、回転変換を各点に適用することで計算できます。この部分は簡単だと思います)。

正射影は次のようになります。

X[i] = f*x'[i] + Cx
Y[i] = f*y'[i] + Cy

ここfで、スケーリングを処理し、画像の中心Cxとなる数値を計算します。Cyこれは、透視投影、非ユニティ アスペクト比などを可能にするために、より複雑にすることができます。たとえば、この他の質問に対する私の回答を参照してください: ((画像を形成するために投影された 3D ポイント)) 透視投影を扱うこのようなものについて。

について解くのでf、次のように並べ替えます。

f = (X[i] - Cx)/x'[i]
f = (Y[i] - Cy)/y'[i]

MaxXを、ピクセル座標の最大の望ましいX点、ピクセル座標MaxYの最大の点YMinXおよびMinY最小の点 (ピクセルの中心をとります) とします。

例えば

MinX=0.5
MaxX=599.5
MinY=0.5
MaxY=599.5

f最も極端な点x'[i]またはy'[i]点がこれらのピクセルの 1 つにマッピングされるように、十分に小さいものを選択したいと考えています。

注: 私は、オブジェクトが既に中心にあると仮定しています: そうでない場合は、良いものも計算する必要がCxありCyます (そして、画像へのより緊密な適合はそのように達成できます)。

Xとの各Y方向で回転した最大点と最小点を計算します ( のすべての可能な値min_i(x[i])の最小値を意味します)。x[i]i

minx = min_i(x[i])
maxx = max_i(x[i])
miny = min_i(y[i])
maxy = max_i(y[i])

次に、極値ピクセルのそれぞれがこれらの極値点のそれぞれにマッピングするために必要な焦点距離を解きます。

f_1 = (MinX - Cx)/minx
f_2 = (MaxX - Cx)/maxx
f_3 = (MinY - Cy)/miny
f_4 = (MaxY - Cy)/maxy

そして、オブジェクト全体が画面に収まるように、これらのうち最小のものを選択します。

一番左の点(ポストローテーション)が

minx = -1.2

一番右のポイント:

maxx = 1.5

最も上向きのポイント (ピクセル座標が空間座標と一致していると仮定していることに注意してください):

miny = -1.3

最も悪い点 (ピクセル座標が空間座標と一致していると仮定していることに注意してください):

maxy = 1.3

画像の例を使用します600x600

これらのそれぞれについて、次のように解きfます。

f_1 = (0.5 - 300)/-1.2 = 249.6
f_2 = (599.5 - 300)/1.5 = 199.7
f_3 = (0.5 - 300)/-1.3 = 230.4
f_4 = (599.5 - 300)/1.3 = 230.4

最小のものを選択するfと、次のようになります。

f=199.7

正射影は次のようになります。

X[i] = 199.7*x'[i] + 300
Y[i] = 199.7*y'[i] + 300

注意: 透視投影を追加したり、別の画像中心を許可したり、スケーリングしたりなど、さまざまな方法でこれをより洗練されたものにすることができます。このアプローチは、開始するための最も簡単な方法になるように設計されています。

于 2013-01-29T09:25:32.330 に答える