問題タブ [reverseprojection]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
3d - 2D ポイントを 3D に逆投影するにはどうすればよいですか?
画面空間に 4 つの 2D ポイントがあり、それらを逆投影して 3D 空間に戻す必要があります。4 つの点のそれぞれが 3D 回転した剛体の四角形の角であることはわかっており、四角形のサイズもわかっています。これから3D座標を取得するにはどうすればよいですか?
特定の API を使用しておらず、既存の射影行列もありません。これを行うための基本的な数学を探しています。もちろん、単一の 2D ポイントを他の参照なしで 3D に変換するのに十分なデータはありませんが、4 つのポイントがある場合、それらはすべて同じ平面上で互いに直角であることがわかっていると思います。それらの間の距離がわかれば、そこからそれを把握できるはずです。残念ながら、私はその方法を完全に理解することはできません。
これは写真測量の傘下にある可能性がありますが、Google で検索しても役立つ情報は得られませんでした。
3d - 2D ポイントを 3D に逆投影する
任意の方程式 ax+by+cz+d=0 を持つ平面を持つ 3D 空間があるとします。次に、その平面上の 3 つのランダムな点を選択するとします: (x0,y0,z0) (x1,y1,z1 ) (x1,y1,z1)
今、私はこの飛行機の別の視点 (カメラ) を持っています。つまり、この飛行機を別の視点から見る別のカメラを持っているということです。そのカメラの視点から見ると、これらのポイントは異なる場所にあります。たとえば、(x0,y0,z0) は (x0',y0') になり、(x1,y1,z1) は (x1',y1') になり、(x2,y2,z2) は (x2',y2) になります。 ') 新しいカメラの視点から。
では、ちょっと難しい質問です!たとえば、新しいカメラの視点から (X,Y) の点を選び、その平面上のどこにあるかを伝えたいと思います。私が知っているのは、3 点とその 3D 空間上の位置、および新しいカメラ ビュー上のそれらの投影位置だけです。
平面方程式の係数とカメラの位置を (射影とともに) 知っていますか、それとも 6 つの点だけを持っていますか? - ニルス
最初の 3 点の位置を知っています。したがって、平面の係数を計算できます。そのため、(0,0,0) の視点から平面がどこにあるかを正確に知ることができます。そして、ポイントだけを見ることができるカメラがあります!そのため、カメラが見るのは 3 点だけであり、3 次元空間での位置も認識しています (2 次元カメラ ビュー プレーンでの位置も確実に認識しています)。結局、カメラ ビューを見て、ポイント (たとえば (x1,y1)) を選択し、その平面上のそのポイントがどこにあるかを伝えます。(確かに、この(X、Y、Z)ポイントは平面方程式に適合する必要があります)。また、カメラの位置については何も知りません。
math - 逆透視投影
私は使用しています
画面空間座標をワールド空間座標に変換します。私はそれを仮定しました
遠平面上の点に変換されますが、
近い平面上の点に変換し、線を接続すると、線と交差する視錐台内のすべてのオブジェクトを照会できます。変換後、結果のポイントをそれぞれの .w コンポーネントで割ります。これはファー プレーンでは機能しますが、ニア プレーン上のポイントはどういうわけかワールド空間の原点に変換されます。
これは、逆投影に入力している 1 の w コンポーネントに関係していると思います。通常、投影後ではなく投影前の 1 であり、逆投影を行っているためです。私は何を間違っていますか?
math - 逆 3D (三角形) 投影
解決できないように見える 3D 数学の問題があります。
3点のデータがあります。データは平面上の (2D) 座標であり、3D 空間のどこかに浮かんでいます。投影の(2D)座標も知っています。その結果、次のデータ配列が得られます。
法線 (x1 など) の座標は平面上の座標を表し、もう一方 (px1 など) は投影された座標を表します。
私がやりたいことは、新しい2D 座標 ([x4,y4]) を投影することです。
.
私がこれまでに試したこと:
もちろん、投影用の目が必要なので、[xe,ye,-1] に設定します。xeとyeは知られています。(写真参考なので、目は写真中央に合わせました。)
目の下に投影面 (z=0) を配置しました。これにより、次の投影座標が得られます。
私はその平面について何も知らないので、平面上の座標に対して同じことを行うことはできません。
また、目から投影座標を通る線のパラメーター化された式を作成できることもわかりました。line1 の場合は次のようになります。
3D での点間の距離もわかっています。それは2Dでも同じです。つまり、point1 と point2 の間の距離は sqrt((x1-x2)^2+(y1-y2)^2) になります。
また、線 (line1 と line2) の間の距離もいつでもわかります。つまり、sqrt((line1x-line2x)^2+(line1y-line2y)^2+(line1z-line2z)^2) です。
しかし、ここから先の行方はよくわかりません... あるいは、これが正しいルートなのかどうかさえもわかりません。
.
私がやりたいことを理解していただき、私を助けていただけることを願っています。
前もって感謝します!
image-processing - 遠近法で変形した長方形の比率
遠近法によって歪んだ四角形の 2D 画像が与えられた場合:
形がもともと長方形だったことは知っていますが、元の大きさはわかりません。
この画像の角のピクセル座標がわかっている場合、元の比率、つまり長方形の商 (幅/高さ) を計算するにはどうすればよいですか?
(背景: 目標は、長方形のドキュメントの写真を自動的に歪ませることです。エッジ検出はおそらくハフ変換で行われます)
アップデート:
与えられた情報で幅と高さの比率を決定できるかどうかについて、いくつかの議論がありました。たとえば、上に示した四角形に 1:4 の長方形を投影する方法が思いつかないので、それは可能であるに違いないと私の素朴な考えでした。比率は明らかに 1:1 に近いので、数学的に決定する方法があるはずです。しかし、私の直感的な推測を超える証拠はありません。
以下に示す議論をまだ完全には理解していませんが、ここで欠落しているという暗黙の仮定がいくつかあるに違いないと思います。
しかし、何時間も検索した後、ようやく問題に関連するいくつかの論文を見つけました。そこで使用されている数学を理解するのに苦労していますが、これまでのところ成功していません。特に最初の論文では、残念ながらコード例と非常に緻密な数学がなく、私がやりたかったことを正確に説明しているようです。
Zhengyou Zhang、Li-Wei He、「ホワイトボード スキャンと画像処理」 http://research.microsoft.com/en-us/um/people/zhang/papers/tr03-39.pdf p.11
「遠近歪みのため、長方形の画像は四角形に見えます。しかし、空間では長方形であることがわかっているため、カメラの焦点距離と長方形の縦横比の両方を推定できます。」
ROBERT M. HARALICK 「四角形の透視投影からのカメラ パラメータの決定」 http://portal.acm.org/citation.cfm?id=87146
「3D 空間でサイズと位置が不明な長方形の 2D 透視投影を使用して、長方形の平面図に対するカメラのルック アングル パラメータを決定する方法を示します。」
image-processing - 式を理解するのに助けが必要
これはピンホール カメラ モデル:
(わかりません、[R t] または (R, t) はありますか) この式は、点の 3 次元座標を、ピンホール カメラで取得した画像の 2 次元座標に変換しています。
投影図:
ベクトル上のチルダは、要素としてそのベクトルに「1」が追加されることを意味します。M は 3 次元空間内の点の座標、m は画像内の点の座標、f はカメラの焦点距離、s はピクセル アスペクト比です。(R, t) は、四角形が記述されるワールド座標系とカメラ座標系の間の 3D 変換を記述します。
A の後の [R t] (または (R, t)) の意味と、角の 3D 座標 (ピクセル アスペクト比 = 1) を式に挿入することで、次のようになることは、私にはわかりません。
そして、「t」文字はどういう意味ですか?
この式はここにあります(13ページ)。
language-agnostic - ビュー/投影マトリックスに直接アクセスせずに、遠近法を考慮して 2D 画像平面から 3D 座標を計算します
スタック交換について初めて質問しますが、これが適切な場所であることを願っています。
私は 3D 数学の点で正確に最高ではないので、自分の状況に十分に近い近似アルゴリズムを開発できないようです。
カメラを含む任意のオブジェクトの位置と回転にアクセスできるだけでなく、任意の 2 点からトレース ラインを実行して、点と衝突点の間の距離を取得できる 3D 環境があります。カメラの視野もあります。ただし、ワールド/ビュー/プロジェクション マトリックスにアクセスする方法はありません。
また、基本的にカメラからの 3D 環境のスクリーンショットのセットである 2D 画像のコレクションもあります。各コレクションは同じポイントと角度からのもので、平均セットは、地平線。
2D イメージのコーナーを表す 3D 世界に配置できる「登録点エンティティ」を使用するポイントに到達できました。次に、2D イメージでポイントが選択されると、座標として読み取られます。範囲は 0 ~ 1 で、レジストレーション ポイントの 3D 位置間で補間されます。これはうまく機能しているように見えますが、画像が完全なトップダウン アングルである場合に限ります。カメラが傾いて別の次元の遠近法が導入されると、この遠近法は補正されないため、結果はさらに不正確になります。
スカイスクレーパーの窓などのポイントの高さを計算できる必要はありませんが、少なくとも画像平面のベースの座標、または画像から線を延長した場合の座標指定された画像空間のポイント 少なくとも、途中に何もない場合にラインが地面と交差するポイントが必要です。
これについて私が見つけたすべての資料は、ワールド/ビュー/投影マトリックスを使用してポイントを逆投影するだけであると述べています。これらのマトリックスにアクセスできないことを除けば、それ自体は簡単です。スクリーンショットの時間などに収集できるデータだけです。アルゴリズムは、私がまだ理解していない複雑な数学を使用しています。
これの最終目標の 1 つは、ユーザーが画像をクリックした 3D 環境にマーカーを配置できるようにすることですが、ユーザーの視点から単純な逆投影を実行することはできません。
どんな助けでも感謝します、ありがとう。
編集: Herp derp、私の状況の制限により、そうするための私の実装は少し奇妙ですが、ソリューションは基本的に、ビュー/投影行列を単に再計算することに関する ananthonline の答えに要約されます。
c# - XNAの3Dクワッドとのレイ交差?
これで、世界に投影されていないマウスを表す光線を正常に作成できました。次に、その光線がクワッド オブジェクトと交差できるかどうかを確認する必要があります。光線を取得するために使用するコードは次のとおりです。
同様に、これは 3D 空間で「立方体の世界」を描画するために使用する私の quad 構造体です。public struct Quad { public Vector3 Origin; public Vector3 アッパーレフト; public Vector3 LowerLeft; パブリック Vector3 右上; public Vector3 LowerRight; public Vector3 通常。パブリック Vector3 アップ; public Vector3 左。
ray クラスには、平面構造体をパラメーターとして取るメソッド intersects() があり、平面構造体はコンストラクターで法線と原点からの距離を取ることがわかりましたが、私の平面には、原点からの距離だけでなく、位置と法線があります、だから私はそれらを変換することはできません。光線が quad 構造体と交差しているかどうかを検出するにはどうすればよいですか?
編集: クワッドのように有限サイズではなく、コーナーが含まれていないため、平面構造体を使用できないことに気付きました。このレイが作成したクワッドと交差しているかどうかを検出する方法を見つける必要があります...
読んでくれてありがとう。この質問は少し長いと思います。よろしくお願いします。
3d - How do I reverse-project 2D points on a plane into 3D?
So, I have a plane P.
I've got the 3 coordinates of the plane P normal vector n(n1, n2, n3) and I've got the 3 coordinates of a given point A(a1, a2, a3) which belongs to P. So from that, I can easily get the plane equation.
Now, if the 3D projection of A onto the plane gives the coordinates (x, y), what I want is to find the 3D coordinates of a B point (belonging to the plane), assuming that the 3D projection of B onto the plane gives the coordinates (x + x', y + y'). Of course, x' and y' are known.
I'm sure this must not be hard, but I fail to find the solution..
math - 2D 座標から 3D ポイントを計算するには?
最近、DirectX11 と 3D 座標の計算に関する苦境に陥りました。マウス座標をこの 3D 座標に変換したいと考えています。ポリゴンモデル(デフォルト立方体など)やメッシュオブジェクトを空きスペースに挿入するとき、MayaやUnityと同じように動作させたいです。この座標を計算するには、どのような手順と計算が必要ですか?