問題タブ [projection-matrix]

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 投票する
0 に答える
833 参照

android - OpenGL: ModelView and Projection matrices

I want to use gluUnProject for 3D picking. It returns wrong values. I think the reason is that ModelView & Projection matrices are generated incorrectly. To grab them, I use MatrixGrabber, MatrixStack and MatrixTrackingGL classes from API demos:

Wherever I place the camera, Projection & ModelView matrices are the same all the way:

ModelView

Projection

Some code:

Thanks a lot for any advice!

0 投票する
0 に答える
339 参照

opencv - InterFrame ホモグラフィ エラー

フレーム間ホモグラフィを使用して、シーン ホモグラフィを計算し、グラフィックスを純粋な回転およびズーム カメラでキャプチャされたビデオに視覚化しています。最終的なシーン ホモグラフィ (Hscene) は次のように計算されます。OpenCVを使用して。部分的なフレーム間ホモグラフィ エラーが原因で累積エラーが発生する可能性があることはわかっています。しかし、別のエラーが発生するいくつかのビデオ シーケンスがあります。このエラーは、視覚化されたグラフィックスのドリフトとしても現れます。グラフィックスが画像の境界に投影されると、ドリフトがより目立ちます。最初のアイデアはレンズの歪みでしたが、ビデオには歪みは含まれていません。初期フレームからターゲット フレームへのダイレクト ホモグラフィを計算すると、射影にもドリフトがありません。

このドリフトの原因とそれを解消する方法を知っていますか?

[2012 年 5 月 9 日編集] 原因はレンズの歪みです。フレーム間の特徴点対応から推定できる?

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

3d - カメラを長方形に合わせる

長方形 (3D であるため、平行六面体の面) をできるだけ近くに表示するために、カメラの位置を合わせようとしています。ここで検討しているビューポートの縦横比と揃える四角形が一致しません。

私達がすること:

私たちのシーンでは、この長方形です。カメラはその前に位置しています。カメラの構成は次のとおりです。

float Fov = PI/4;

float AspectRatio = device.Viewport.AspectRatio;

Vector3 Target長方形の中心に設定されます。

Vector3 Position私たちが探している値です。

そして、カメラを初期化します: oat width = (float)GraphicsDevice.Viewport.Width; float の高さ = (float)GraphicsDevice.Viewport.Height;

( VS ソリューション)

もう 1 つの精度: ビューを作成するMatrix.CreateLookAtために、射影に と を使用していMatrix.CreatePerspectiveFieldOfViewます。これらが完璧な選択であるかどうかはわかりませんが、そのように聞こえます.

得られるもの:

いくつかの基本的な三角法の後、高さ > 幅のときに機能するカメラの位置を取得しました。として: ここに画像の説明を入力 ここに画像の説明を入力

ただし、幅>高さの場合はそうではありません: ここに画像の説明を入力

あなたは...

...何が間違っているのか分かりますか? これを達成するための他の方法またはより良い方法はありますか?

0 投票する
0 に答える
1888 参照

opencv - 三角測量、calibrateCameras()のtvecおよびrvecから

私の質問に対する答えを正確に見つけるのは難しいので、他の場所で十分に説明されていなくても、ここで質問したいと思います。誰もが私の結果に戻れるように、コードにソリューションを追加しようとしています。しかし、最初にそれを解決する必要があります。

OpenCVによる三角測量についてcv::triangulatePoints()です。私はその貧弱な文書を知っていますが、ウィローガレージ(現在)で見つけることができます(文書2.4.9を検索してください)

  1. チェス盤のキャリブレーションには、角度の異なる22のステレオ画像(2つのカム)を使用します。安定した固有パラメータの場合。
  2. チェス盤のコーナーを手に入れましたcv::findChessboardCorners()
  3. オプション-cv::cornerSubPix()
  4. すべてのチェス盤ポイントにobjectPointscv::Point3f( k*m_squareSize, j*m_squareSize,0.0f)を作成します(k-チェス盤の幅、jチェス盤の高さ、またはその逆、squareSize =実世界のサイズ)
  5. 2.-4を実行します。すべての画像に対して
  6. ここにすべてを入れてください:cv::calibrateCamera(object_points1, image_points1, image.size(), intrinsic1, distCoeffs1, rvecs1, tvecs1);この機能は私が望んでいたように完璧に機能します、私は2番目のカメラ画像でもそれをやっています。長い調査の結果、私はこれを見つけました。
  7. cv::Mat R12 = R2*R1.t(); cv::Mat T12 = T2-R*T1;これは、cam1とcam2の関係(R | T)用です。これはかなりうまく機能します。の結果でテストしましたcv::stereoCalibrate()
  8. このステップでは、tvecsとrvecsを使用して、2Dも3D、3Dも2Dを再投影したいと思いました。最後に、cv::projectPoints(object_points1[i],rvecs1[i],tvecs1[i],intrinsic1, distCoeffs1, imagePoints1);->正常に動作します-たった1つのポイントで2Pixelの差から最大48 * 2*22ポイントを取得しました。しかし、2Dから3Dへの三角測量をこれ以上進めることはできません。私は持っています!あまりにも使用しますcv::triangulatePoints()。どうすればこの作品を手に入れることができますか?

私がこれまでに行ったことは、良い結果が得られずに試みました。最初に、射影行列P1とP2が必要です。

申し訳ありませんが、これは重く見えますが、回転行列(rodrigues(rvecs1、R1))とtranslationvectortvecs1のみです。これは間違っていますか?回転行列R1を逆にする必要がありますか?

次のステップ:左右の画像にimagePoints(Corners)が必要です。これらのimagePointsは、findChessboardCorners()から取得した歪みのないコーナーです。

cv::triangulatePoints(P1, P2, cv::Mat(undisPt_set1).reshape(1,2), cv::Mat(undisPt_set2).reshape(1,2), point3d);point3dを使用した後は、4番目のパラメータが次のように削除された「4D」ポイントです。convertPointsHomogeneous(point3d.reshape(4, 1), point3dCam1);

これは私がこれまでに行ったことですが、機能していません。誰かが私が間違っていることを知っていますか?最後のステップで何か間違った考えはありますか?計算を試しましたが、projectionMatrixP1とP2についてはよくわかりません。[R | t]のように構築されていることは知っていますが、それは私のtvecsとtvecsですか?それは転置ですか、それとも逆ですか?どんな助けでも素晴らしいですが、plsはいくつかのコードや明確な手順で私を助けてくれます-私が読んで考える必要があるより多くのリンクではなく、私は本当に研究をしました、私は学習OpenCV本、Op​​enCV2クックブック、そしてここにハートリーとジッサーマンを持っています私の目の前で。しかし、私はそれに到達することはできません。

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

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

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

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

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

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

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

opencv - 正しい射影行列を作成する方法は?

誰かがtriangulatePointsの射影行列がどのように見えるか教えてもらえますか?それほど簡単ではありません。いくつかの可能な射影行列を見つけましたが、どれが正しいかを今では理解できませんでした。

Robust Matcher /または他のマッチング方法からKeyPointを使用している場合、Eから回転と変換を取得しました。これにより、P0 = [I|T]やP1=[R | T]のような行列が生成されます。ここで、RとTは抽出され、変更されません。値。私は正しいですか?calibrateCamera()(stereoCalibrateではないことを明示してください!!)またはSolvePnPを使用するステレオリグがある場合、camera1とcamera2からRとTを取得します。これらの行列は次のようになりますか?:P0 = [R0|t0]およびP1=[R1|t1]またはP0=[R0 | R0*t0]およびP1=[R1 | R1 * t1]またはそれは別のものですか?

私は「修正」について何かを見つけました。KeyPointsを取得する前に修正しすぎているのか、それともtiangulatePoints()に必要な唯一の必要な関数であるのかを知っていますか?

手伝ってくれてありがとう

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

svd - SVD行列調整-元の空間から調整された空間に投影する方法は?

データのノイズ除去の一般的な方法は、行列を作成し、SVDを実行し、小さな特異値をゼロに設定してから、分解された行列部分を乗算して新しい行列を作成することです。これは、入力データを「調整」または「正則化」する1つの方法です。

元の行列空間にベクトルがある場合、そのベクトルを新しい条件付き空間にどのように投影しますか?

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

c - OpenGLで使用するためのモデルとビューのマトリックスを正しく計算していますか?

GL3.2の行列に少し問題があります。できればマトリックス表記で、モデルとビューマトリックスを生成するにはどうすればよいですか?モデル/ビューマトリックスを設定するにはどうすればよいですか?私はすでに射影行列を持っています。それは次のように定義されます:

この正投影行列にはモデルとビューの行列を掛ける必要があり、それらには点を掛ける必要があることを理解しています。これらのマトリックスを設定するにはどうすればよいですか?

編集:それらが1つに連結されていてもかまいません(modelview)。

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

ios - OpenGLのGL_PROJECTIONを変更して、画面の回転を補正します

画面の回転を補正するためにOpenGLでGL_PROJECTIONを設定することは可能ですか?

たとえば、拡張現実や立体視など、これには多くの用途があると思います。

特に、モバイル機器を傾けたときに「偽の」視点を変えたいと思います。

この効果は画像に示されていますここに画像の説明を入力してください