問題タブ [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.
matlab - Matlabのtriangulate関数で再投影誤差はどのように計算されますか? 悲しいことに、ドキュメントには数式がありません
Matlabのtriangulate関数で再投影誤差はどのように計算されますか?
悲しいことに、ドキュメントには数式がありません。
それは言うだけです:The vector contains the average reprojection error for each M world point.
このエラーを計算するときにMatlabが使用する手順は何ですか?
SOF を検索しましたが、この IMHO の重要な質問については何も見つかりませんでした。
更新: このエラーを使用して、ここで悪い一致を除外する方法: http://se.mathworks.com/help/vision/examples/sparse-3-d-reconstruction-from-two-views.html
algorithm - 8 点アルゴリズムにおけるエピポーラ制約
私は 2 台のカメラを使用してシステムを開発しています。エピポーラ制約が必須行列のセットの一部ではない行列によって満たされる可能性があることを知りたいですか? もしそうなら、どのような状況でこのマトリックスを処理する必要がありますか?
c++ - エッセンシャル マトリックスからポーズを復元すると、平行移動ベクトルの符号が矛盾する
点対応のある 3 つのビューがあり、2 番目と 3 番目のビューでカメラのポーズを計算したいと考えています。したがって、最初のビューに対する 2 番目と 3 番目のビューでのカメラの既知の回転と平行移動を使用して、さまざまなビューのポイントを含むランダム データセット (ノイズなし) を生成します。まず最初のビューでランダムな 2D ポイントを生成し、次にランダムな (正の) 深度を割り当てて対応する 3D ポイントを取得し、最後にランダムに生成された回転と平行移動を使用して、これらの 3D ポイントを 2 番目と 3 番目のビューに投影します。
最初に、3 焦点テンソルを計算します (Hartley & Zisserman、Multiple View Geometry Chapter 15 を参照)。次に、この回答で説明されているアプローチに従って、 2 番目と 3 番目のビューの回転R_i
と平行移動を取得しt_i
ます。
計算では常に正しい回転が得られますが、残念ながら、並進ベクトルの符号は常に正しいとは限りません。t2
とt3
正しいスケールを持っていますが、ランダムに生成された新しいデータセットを使用すると、グラウンドトゥルースの翻訳に対して符号が反転することがあります (!)。
グラウンド トゥルース:
私のアルゴリズムの出力(翻訳は最大スケールで決定されます):
グラウンド トゥルースと と の私の出力を比較するとt2
、t3
それらがスケールアップして同一であることがわかります (この例では、符号によって反転されていますt2./t3
)。アルゴリズムの利回り:
私の最初の質問は、翻訳ベクトルの符号の不一致の原因は何でしょうか? (特に、そうでなければ結果が正しいという事実を考えると)。
私の2番目の質問は、上記のリンクされた回答のステップ4で与えられたこれらの式はどこから来たのですか? Hartley & Zisserman による「Multiple View Geometry」という本を持っていますが、記載されているアルゴリズムが見つかりませんでした。
上記のリンクのアルゴリズムのステップ 4 の実装のコード スニペットを次に示します ( Eigenライブラリを使用しR
ます。OpenCV は使用したくありません) 。 -一様な 2D 点対応を表示、、および:t
E
p1
p2
p3
opencv - OpenCV で共役回転変換を行う
画像に特定の回転を適用しようとしていますが、期待どおりに機能しません。私が持っているローテーションは次のとおりです。
これは、カメラの中心 (または必要に応じて Z 軸) を中心に ~78 度回転する必要があります。ホモグラフィを作成するには、翻訳コンポーネントがないため、次の式を使用します: K * R * K^-1
(無限ホモグラフィ)。
画像 (320x240) を変換するために使用するコードは次のとおりです。
ここで、K は次のとおりです。
結果の行列K * R * K.inv()
は次のとおりです。
結果は画像の回転だけになるはずですが、画像は次のように「ズームアウト」されます。
私は何を間違っていますか?
3d - なぜこの予測は間違っているのですか?
3D 立方体が画像の正しい場所に投影されない理由を理解しようとしています。
カメラを原点に、立方体の中心を から始め(0,0,1)
ます。
R
次に、Y 軸を中心に 45 度の 3D 回転を作成します。
そして、 (これらはカメラからワールドへの変換です)R^-1
の翻訳で、回転を使用するようにカメラを設定します。R * (0,0,1)
カメラは立方体を中心に反時計回りに 45 度回転しているはずです ( 0.707106781
x と z が平行移動していることを確認できます)。
この時点で、立方体は同じ縮尺で中央に配置され、エッジの 1 つが画像の真ん中にあると思います。しかし、これは私が得るものです:
3D ポイントを投影するために使用する手順X
は (疑似コード) です。
- カメラ座標に取り込む:
Xc = R^-1 * X - R^1 * translation
- 画像座標に変換:
x = Xc * focal length / Xc.z + principal point
私はさまざまなソースから理論を読みましたが、ルールに従っているようです.
これは人工的なデータにすぎないので、焦点距離と主点が影響するかどうかわかりませんか? 私は何を間違っていますか?立方体が中心にないのはなぜですか?
matlab - 複数の4点セットに最適な射影変換行列を作成する方法は?
通常、私はこの種の matlab コードを使用して、参照点の単一セットで射影変換を行います。
今、私は何枚か (たとえば 10 枚) のごちゃごちゃした紙のシートを写した写真を持っています。それぞれのサイズは既知で、無地の大きなテーブルの上に置かれています。これらのシート間の距離は不明です。
したがって、射影変換行列を取得するために 10 個の 4 基準点セットがあり、後で 2 次元テーブル サーフェスの投影画像が得られます。
最適化された変換行列 (および後で投影された画像) を生成するにはどうすればよいですか?
前もって感謝します。