私は仕事を得ました:
カメラが人間の頭の周りを半円するシステムが動作しています。カメラの行列と、すべてのフレームの回転/移動がわかっています。(歪みなど...しかし、これらのパラメーターなしで最初に動作したい)
私の仕事は、この動きに対して一定であるカメラ マトリックスと、画像 (100 以上) だけを持っていることです。ここで、フレームごとに移動と回転を取得し、それを実際の回転と移動と比較する必要があります (私が持っているシステムから、比較のためだけに、私もそれを証明しました!)
これまでに行った最初のステップ:
- OpenCVクックブックのrobustMatcherを使用してください - うまくいきます - 40-70 各フレームにマッチします - 目に見えるのはとても良いです!
- getFundamental() を使用して、基本的なマトリックスを取得します。私は、robustMatcher と RANSAC の堅牢な Point を使用しています。
- 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
これが私の現状です!
私の計画は次のとおりです。
- すべての点を三角測量して 3D 点を取得する
- フレーム i をフレーム i++ と結合する
- 私の3Dポイントを何とか視覚化してください!
今私の質問は次のとおりです。
- この堅牢なマッチャーは時代遅れですか? 他の方法はありますか?
- このポイントを 2 番目のステップで説明したように使用するのは間違っていますか? それらは歪みか何かで変換する必要がありますか?
- ここで抽出した R と t は何ですか? camera1 からの視点での camera1 と camera2 間の回転と平行移動ですか?
- 聖書や論文などを読むと、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の方が好きです。それについての経験はありますか?