0

OpenCV では、Charuco ボードを使用し、カメラを調整し、SolvePnP を使用して rvec と tvec を取得しています。(サンプルコードに似ています)。ボードを周回する円形リグにカメラを備えた固定ボードを使用しています。私はこれに慣れていないので、これが単純なものである場合はご容赦ください。

Rodrigues() を使用して rvec からボードの向きの 3x3 回転行列を取得できること、および -Rt() * tvec (c++) を使用して tvec 値をワールド座標に変換できることを理解しています。

しかし、私が理解しているように、この 3x3 回転 R はカメラに対するボードの向きを与えるので、それほど必要ではありません。カメラ空間の tvec と z 軸の間の角度 (だと思います) だけ R からオフセットされた、カメラ自体の回転が必要です。(カメラが常にボードの原点を指しているわけではなく、常にカメラ空間の z 軸を下に向けているため)。これは正しいです?

追加の回転オフセットを見つけて、R と組み合わせて実際のカメラの向きを取得できる 3x3 回転行列に変換するにはどうすればよいですか?

ありがとう!

4

1 に答える 1

1

カメラから Charuco ボードの N フレームをキャプチャするとします。次に、カメラ フレーム内のポイントを Charuco ボード フレーム内の同じポイントに移動する N 変換があります。これは、すべてのフレームのチャルコ ボードのポーズから取得されます。

ある座標フレームから別の座標フレームへの線形変換を次のように表すとします。

T 4x4 = [R 3x3 , t 3x1 ; 0 1x3 , 1]

ボード座標フレームから点 P を見て、それを Pボードと呼びます。同様に、カメラ 1 からその点を c 1、カメラ 2 を c 2などと呼びます。

したがって、次のように書くことができます。

ボードT1Pc1ボードT2Pc2_
_ _ _ _ _ . . Pボード=T・N・P・c・N



私が理解していることから、開始点からカメラの回転を言う必要があります(カメラがフレーム1でゼロ回転していると仮定します)。したがって、後続のすべてのフレームを P boardの代わりにP c 1で表すことができます。


したがって、 T 2 P c 2 = T 1 P c 1
または、P c 2 = T 2 -1 T 1 P c 1
同様に、P c N = T N -1 T 1 P c 1と言えます。

T N -1 T 1の回転部分を見ることで、カメラ位置 N からカメラ位置 1 にポイントを取るための R Nを復元できます。

于 2016-05-09T22:37:14.617 に答える