問題タブ [projective-geometry]

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.

0 投票する
2 に答える
382 参照

math - 投影と z 距離の検索

投影を表す画像があります。例を挙げて問題を説明します。

画面には、ある点 E(100,200) から別の点 H (150,100) への線があります。A は実世界で 200 cm の距離にある 1 つのポイントを表し、B は実世界で 300 cm の距離にあるポイントを表します。

私が知りたいことはこれです:

これらの 2 点を通過する直線の 1 点が与えられた場合、必要な z 距離データを計算する方法はありますか?

z 距離が線形関数ではなく対数関数である場合はどうなりますか?

わからないことがあれば何でも聞いて、

深度距離投影

乾杯

0 投票する
1 に答える
936 参照

actionscript-3 - 2d to 3d - 円柱に図面を巻き付ける方法

3D 空間で回転する図面 (x 座標と y 座標を持つ点の配列) があります: http://www.motiondraw.com/md/as_samples/Testing/_mindreader/main.html

現在のように、図面は立方体を包み込んでいるかのように見え、角が 90 度という厄介な角度になっています。代わりに、円柱に巻き付いているように見えるはずです。回転を開始する前に、(ActionScript で) 関数 'bendDrawing' を呼び出して、各ポイントの初期 Z 値を設定します。

for (var j = 0; j < numPoints; j++ ) {
// 描画は中央揃え – 中央より左側の点は < 0 var distFromCenter = Math.abs(shape[i].points[j].x);

}

私はこれに頭を包むことはできません;-)ポインタは大歓迎です!

アンドレアス・ウェーバー

0 投票する
3 に答える
3795 参照

kinect - 2 つの Kinect 深度マップから射影ホモグラフィを抽出する

Kinect 深度マップから取得した 2 つの連続した 3D ポイント クラウド 1 および 2 (クラウド全体ではなく、OpenCV の GoodFeaturesToMatch を使用してクラウドから選択された 100 ポイントなど) を指定して、1 から 2 までのカメラのホモグラフィを計算したいと考えています。ここ (スライド 12)ここ (スライド 30)、そして古典的な論文のように見えるのはここです。私の問題は、私は有能なプログラマーですが、これらのメソッドの 1 つをコードに変換するための数学や三角関数のスキルがないことです。これは簡単な問題ではないため、次の問題を解決するコードに大きな報奨金を提供します。

カメラは原点にあり、Z 方向を見て、不規則な五面体 [A、B、C、D、E、F] にあります。 カメラ位置 1

カメラは左に -90mm (X)、上に +60mm (Y)、前方に +50mm (Z) 移動し、下に 5°、右に 10°、反時計回りに -3° 回転します。 カメラ位置 2

カメラが元の位置に戻るようにシーン全体を回転させると、2 の頂点の位置を特定できます。 ここに画像の説明を入力

これを準備するために使用される 3DS Max ファイルは、 max 1max 2およびmax 3です。

前後の頂点の位置、組み込み関数などは次のとおりです。 頂点と組み込み関数

camera2 の頂点は 100% 正確ではないことに注意してください。意図的なノイズが少し含まれています。

ここにExcelファイルの数値があります

私が必要とするコードは、必要に応じて EMGUCV と OpenCV を使用して、VB.Net または C# に容易に変換できる必要があり、2 セットの頂点と組み込み関数を取得し、次の出力を生成します。

同次座標のホモグラフィが 3X3 なのか 3X4 なのかはわかりませんが、頂点を 1 から 2 に変換できるはずです。

また、a1、a2 などの値もわかりません。それはあなたが見つけなければならないものです>;-)

500 報奨金の提供は、私がこの非常によく似た質問に提供した報奨金を「置き換え」ます。この質問を指すコメントを追加しました。

EDIT2: この質問の仕方が誤解を招くものかどうか疑問に思っています。問題は、カメラ ジオメトリよりもポイント クラウド フィッティングにあるようです (A を B に変換および回転する方法を知っている場合は、カメラの変換とその逆を知っています)。もしそうなら、おそらく解はカブシュのアルゴリズムまたは同様のもので得られる可能性があります

0 投票する
1 に答える
457 参照

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ページ)。

0 投票する
2 に答える
1660 参照

matlab - 同じ射影行列からの異なる基礎行列

2 つの射影行列 P1 と P2 を使用し (たとえば、恐竜データセットを使用しています)、基礎行列 F を計算する必要があります。したがって、2 つの Matlab 関数を使用します。

  • Peter Kovesi の関数: www.csse.uwa.edu.au/~pk/Research/MatlabFns/Projective/fundfromcameras.m
  • ジッサーマン: www.robots.ox.ac.uk/~vgg/hzbook/code/vgg_multiview/vgg_F_from_P.m

これらの関数は同じことを行うはずですが、私は異なる F 値を持っています! それはどのように可能ですか?適切な関数はどれですか?

X1 と X2 の 2 点が 2 つの異なる画像で "同じ" である場合、X2^T*F*X1 = 0 ... そこで、SURF を使用して 2 つの回転した画像 (5 度) から 2 つの対応する点を見つけましたが、X2^T *F*X1 は、この 2 つの関数でゼロになることはありません。何か案は?

代わりに、一致するポイントから F を計算するこの関数を使用すると、次のようになります。

私はそれを持っています X2^T*F*X1 = 0 ....明らかに、Fは他の2つの関数で持っていた2つのFIとは異なります...

0 投票する
3 に答える
1091 参照

math - 2D 発射体のトレース パスの明確化

2D ゲームでの発射体のトレース パスの問題:

予測:

重力は一定で、風や抗力がないという単純化した仮定を行います。発射体の運動は、次の式で与えられます。

x = x0 + v0t cos(シータ)

y = y0 + v0t sin(シータ) + .5 gt^2

ここで、(x0, y0) は初期位置、v0 は初期速度 (大きさのみ)、theta は放出角度、g は重力加速度です。v0t の最初の方程式を解き、2 番目の方程式に代入すると、方程式 [1] が得られます。

y = y0 + (x-x0) tan(シータ) + .5 (g/v0^2) (x-x0)^2 / cos(シータ)^2

較正:

キャリブレーションは、実際の発射体から g の値を決定するプロセスです。そのために、ランダムな発射体を発射してキャプチャします。

  1. 開始点 (x0, y0)
  2. 照準ベクトル (v0、シータ)
  3. 曲線上のランダムな点 (x1, y1)

式 [1] に値を代入し、g について解くと、次のようになります。

g = (v0^2) * {[2 cos(シータ)^2 (y1-y0) / (x1-x0)^2] - [sin(2シータ) / (x1-x0)]}

応用:

g が得られたので、それを式 [1] に代入できます。これを使用して、任意の開始点と初期速度から発射体の経路を追跡できます。(ここがよく分からない部分です)

g=5.89

(x0,y0) 開始位置 = 0,0

初速度 = 1 ~ 100

放出角度 = 0-360

重力による加速度が 5.89 (このゲーム) である場合、1 ~ 100 の間の任意の初期速度、および 0 ~ 360 の間の任意の放出角度に対して、放物線の完全なプロットされたパスを取得する方法を誰か説明してください。位置は 0,0?

私は数学の完全な初心者であり、他の場所で見つけた太字の文字ではないこのすべてのものは、頭を悩ませてきました。私は何も知らないと仮定してください。

0 投票する
5 に答える
5095 参照

matlab - 四角形を 2D の別の四角形に変換する行列の計算

下の図の目標は、点 a1 a2 a3 a4 を対応する点 b1 b2 b3 b4 に変換するホモグラフィ行列 H を計算することです。あれは:

H(3x3) を計算するための最良の方法を提案してください。a1...b4 は、同次座標系 ([a1_x a1_y 1]', ...) で表される 2D の点です。 編集:これらのタイプの問題については、SVDを使用します。そのため、Matlabでこれを簡単に実行できる方法を知りたいです。

編集

Maltlab で svd (H=Q/P) を使用して最初に解決しようとした方法を次に示します。与えられた例の次のコードを検討してください

答えがnull行列になることを期待していますが、そうではありません!...そして、StackOverflowでこの質問をしたのはそのためです。さて、私たちは皆、それが明らかにユークリッド的ではない射影変換であることを知っています. ただし、一般的なケアでは、4 つのポイントのみを使用してこのような行列を計算できるかどうかを知っておくとよいでしょう。

行列計算

0 投票する
1 に答える
309 参照

intersection - 無限平面との交点

3D ラインと無限遠平面との交点を計算したいと思います。線の 3D 方向を取り、4 番目のベクトル座標を 0 に設定するのと同じだと思います。

しかし、これでは十分ではありません。線が変換され、透視カメラによって投影された後の画面座標での交点の 2D 位置を知りたいです。

この問題は、2D 画像で消失点を見つけることと同じです。

0 投票する
3 に答える
4146 参照

projection - 2D ポイントを 3D プラッカー ラインに逆投影する

私はトラッカー (ハンド トラッキングの個人的なプロジェクト) を構築しようとしています。このため、プラッカー座標を使用して、2 次元の点を 3 次元の線に逆投影する必要があります。(レイ トレーシングのような)

入力として、点の 2 次元座標と射影行列があります。

プラッカー座標に関する Web 上の情報は、それらが役立つ理由の概要を示していますが、上記の手順を分析的に説明している論文はありません。(彼らは、それ以上の説明なしに、プラッカーラインに逆投影すると言及しているだけです)

誰かが正しい方向に私を特定できますか?

0 投票する
1 に答える
1125 参照

opengl - OpenGLで「ポイントオンハイトマップ」ピッキングを効率的に実装するにはどうすればよいですか?

高さマップとしてモデル化された世界の地面にあるOpenGLシーンのマウス座標を追跡したいと思います。現在、ハードウェアテッセレーションのような派手なものはありません。この質問はオブジェクトの選択に関するものではないことに注意してください。

現在、私は次のことを行っていますが、リードバック操作のためにパフォーマンスが明らかに低下しています。

  • 世界をレンダリングする(地面)
  • マウス座標での深度値を読み戻します
  • シーンの残りの部分をレンダリングします
  • バッファを交換して次のフレームをレンダリングします

地面の前にオブジェクトがない状態で地面の深さの値が必要なため、リードバックは2つのレンダリングステップの間にあります。これは、次のコマンドを使用して実行されます。

私のアプリケーションでは、フレームレートを1秒あたり60フレームに制限しています。リードバック操作なしでシーンをレンダリングすると、CPU使用率は5%未満になりますが、リードバックを実行すると、シーンのレンダリングやゲームモデルの更新にはあまり力を入れていませんが、約75%に増加します。またはそのようなもの。

一時的な解決策は、マウスの下のピクセルの深度値をキャッシュし、5フレームまたは10フレームごとにのみ更新することです。これにより、CPU使用率が10%未満に戻ります。しかし、明らかに問題の最善の解決策になることはできません。

ピッキング(サーフェス上の(浮動小数点)座標が必要なため、オブジェクトピッキングではない)を効率的に実装するにはどうすればよいですか?

バックバッファの代わりにフロントバッファの深度値を読み戻すことをすでに考えていましたが、その方法をグーグルで調べると、glRead*メソッドについて不満を言う人だけが最善の方法であることがわかります。しかし、(glRead *を使用して)何かを読まずに(ピッキングを行う)何かを読むにはどうすればよいですか?

よくわかりません。他の人はどのようにピッキングを実装しますか?


まったく異なるアプローチは、ソフトウェアで世界表面ピッキングを実装することです。カメラから「深さまで」3D光線を再構築することは大したことではありません。これは、ターゲットピクセルでレンダリングされる空間内のポイントを表します。次に、交差アルゴリズムを実装して、サーフェスの最前面のポイントを見つけることができます。