6

私は仕事を得ました:

カメラが人間の頭の周りを半円するシステムが動作しています。カメラの行列と、すべてのフレームの回転/移動がわかっています。(歪みなど...しかし、これらのパラメーターなしで最初に動作したい)

私の仕事は、この動きに対して一定であるカメラ マトリックスと、画像 (100 以上) だけを持っていることです。ここで、フレームごとに移動と回転を取得し、それを実際の回転と移動と比較する必要があります (私が持っているシステムから、比較のためだけに、私もそれを証明しました!)

これまでに行った最初のステップ:

  1. OpenCVクックブックのrobustMatcherを使用してください - うまくいきます - 40-70 各フレームにマッチします - 目に見えるのはとても良いです!
  2. getFundamental() を使用して、基本的なマトリックスを取得します。私は、robustMatcher と RANSAC の堅牢な Point を使用しています。
  3. F を取得したら、次のように CameraMatrix K を使用して Essentialmatrix E を取得できます。

cv::Mat E = K.t() * F * K; //Found at the Bible HZ Chapter 9.12

ここで、SVD を使用して E から R と t を抽出する必要があります。ちなみに、どこかから開始する必要があるため、camera1 の位置はゼロです。

cv::SVD svd(E);
cv::SVD svd(E);

cv::Matx33d W(0,-1,0,   //HZ 9.13
          1,0,0,
          0,0,1);

 cv::Matx33d Wt(0,1,0,//W^
        -1,0,0,
        0,0,1);

 cv::Mat R1 = svd.u * cv::Mat(W)  * svd.vt; //HZ 9.19
 cv::Mat R2 = svd.u * cv::Mat(Wt) * svd.vt; //HZ 9.19

 //R1 or R2???
 R = R1; //R2

 //t=+u3 or t=-u3?
 t = svd.u.col(2); //=u3

これが私の現状です!

私の計画は次のとおりです。

  1. すべての点を三角測量して 3D 点を取得する
  2. フレーム i をフレーム i++ と結合する
  3. 私の3Dポイントを何とか視覚化してください!

今私の質問は次のとおりです。

  1. この堅牢なマッチャーは時代遅れですか? 他の方法はありますか?
  2. このポイントを 2 番目のステップで説明したように使用するのは間違っていますか? それらは歪みか何かで変換する必要がありますか?
  3. ここで抽出した R と t は何ですか? camera1 からの視点での camera1 と camera2 間の回転と平行移動ですか?
  4. 聖書や論文などを読むと、R と t の可能性が 4 通りあることがわかります。´P' = [UWV^T |+u3] oder [UWV^T |−u3] oder [UW^TV^T |+u3] oder [UW^TV^T |−u3]´ P´ は、 2番目の画像。つまり、t が - または + で、R がまったく異なる可能性があるということです。1 つのポイントを 3D で計算し、このポイントが両方のカメラの前にあるかどうかを調べる必要があることがわかりました。正しい行列が見つかりました! cv::Mat R1 = svd.u * cv::Mat(W) * svd.vt 私はインターネットでこのコードのいくつかを見つけましたが、彼はこれ以上計算しないと 言っただけです: t = svd.u.col(2); //=u3 なぜこれが正しいのですか?そうでない場合-OpenCVでこの三角形分割を行うにはどうすればよいですか? 私はこの翻訳を、私に与えられた翻訳と比較しました。(最初に camera1 との関係で平行移動と回転を転送する必要がありましたが、これを取得しました!) しかし、同じではありません。私のプログラムの値は、プラスからマイナスへのジャンプと呼びましょう。ただし、カメラは一定の円で移動しているため、より一定である必要があります。いくつかの軸が切り替わる可能性があると確信しています。変換が -1 から 1 までしかないことはわかっていますが、結果から比較値に係数を抽出できると考えたので、それは類似しているはずです。

誰かが以前にこのようなことをしたことがありますか?

多くの人がチェス盤を使用してカメラのキャリブレーションを行っていますが、この方法を使用して外部パラメーターを取得することはできません。

ビジュアル sfm で何とかできることはわかっています。(YouTube では、誰かが木の周りを歩き回り、ビジュアル sfm を使用してこれらの写真からこの木の再構成を取得するビデオがあります) これは、私がしなければならないこととほとんど同じです。

最後の質問:

誰かが私の 3D ポイントを視覚化する簡単な方法を知っていますか? 私はMeshLabの方が好きです。それについての経験はありますか?

4

2 に答える 2

2

多くの人がチェス盤を使用してカメラのキャリブレーションを行っていますが、この方法を使用して外部パラメーターを取得することはできません。

チェス ボードまたはチェッカー ボードは、外部パラメーターではなく、内部/内部マトリックス/パラメーターを見つけるために使用されます。あなたはすでに内部マトリックスを持っていると言っていますが、それがあなたの意図したものだと思います

私たちはカメラ行列を知っていて...

YouTube で見たビデオでも同じことが行われています。カメラは既にキャリブレーションされています。つまり、内部マトリックスが既知です。

この堅牢なマッチャーは時代遅れですか? 他の方法はありますか?

私はその本を持っていないので、コードを見てこれに答えることができません。

このポイントを 2 番目のステップで説明したように使用するのは間違っていますか? それらは歪みか何かで変換する必要がありますか?

最初に放射状の歪みをキャンセルする必要があります。 undistortPointsを参照してください。

ここで抽出した R と t は何ですか? camera1 からの視点での camera1 と camera2 間の回転と平行移動ですか?

R は、最初のカメラの座標系における 2 番目のカメラの向きです。T は、その座標系における 2 番目のカメラの位置です。これらにはいくつかの用途があります。

聖書や新聞などを読むと、4つの可能性があることが分かります....

聖書の関連セクションを読んでください。これはそこで非常によく説明されています。三角測量は単純な方法であり、より良いアプローチがそこで説明されています。

誰かが私の 3D ポイントを視覚化する簡単な方法を知っていますか?

Meshlab でそれらを見るための非常に簡単な方法は、3D ポイントの座標を PLY ファイルに保存することです。これは非常に単純な形式であり、Meshlab および他のほとんどすべての 3D モデル ビューアでサポートされています。

于 2012-08-17T11:09:05.423 に答える
1

この記事「5 点相対ポーズ問題の効率的な解決策」で、Nistér は、4 つの構成のうちどれが正しい構成であるかを判断するための非常に優れた方法を説明しています (R と T について説明しています)。

堅牢なマッチャーを試してみましたが、静かで良いと思います。このマッチャーの問題点は、SURF を使用しているため非常に遅いことです。速度を改善するには、他の検出器と抽出器を試してみてください。基本行列を計算する OpenCV の関数は、Ransac パラメータを必要としないと考えています。メソッド rate と symmetry は外れ値を取り除くのに優れた仕事をします。8 ポイント パラメータを試してみてください。

OpenCV には関数 triangulate があります。これには、最初と 2 番目の画像にある点である 2 つの射影行列のみが必要です。calib3d モジュールを確認してください。

于 2012-08-23T13:22:01.530 に答える