2016-08-09 102 views
1

私は、正確なクォータニオンといくつかの写真を運のない数週間にわたって歪ませようとしてきました。以下の式は、カメラの位置を回転させるようには見えないし、正確な位置から期待していると思われる。私はそれを正しくしていますか?私は行方不明のものがありますか?クォータニオンをカメラの回転行列に変換する - OpenCV

Quaternionを渡すだけでは写真をステッチするには不十分ですが、写真を整列させるには十分であると思いますか?

は、ここで式です:

double divmult = 2.0/lsq; 
double xx = divmult * x * x; 
double yy = divmult * y * y; 
double zz = divmult * z * z; 

double wx = divmult * w * x; 
double wy = divmult * w * y; 
double wz = divmult * w * z; 
double xy = divmult * x * y; 
double xz = divmult * x * z; 
double yz = divmult * y * z; 

cameras_global[imageCounter].R = (Mat_<float>(3, 3) << (1 - yy - zz), -(xy - wz), -(xz + wy), 
            (xy + wz),  -(1 -xx -zz), -(yz - wx), 
            (xz - wy),  -(yz + wx), -(1 -xx -yy) ); 

答えて

1

OpenCVのは、直接四元数をサポートしていません。あなたの計算を修正するのではなく、私はより簡単な変換を行うでしょう。それに最も近いものは、3D回転を表す軸角ベクトル(Rodrigues角とも呼ばれます)です。私はconvert to axis-angleとし、角度を取得するために角度で軸を掛けます。その後、OpenCVの組み込み関数、例えばcv::Rodriguesを使って3x3回転行列に変換することができます。

+0

私が間違っている場合は私を修正してください。あなたが参照したリンクは、あなたが言っていることの反対をしているようです。角速度を四元数に変換しているようですね? –

+0

ああ、申し訳ありません。ええ、私は答えを修正しました。 – SpamBot

+0

パーフェクト、ありがとう!最後の質問が1つあります(あらかじめご迷惑をおかけして申し訳ありません)。しかし、四分円 - >ロッド角を変換した後、rodriguesからcamera_global [0] .Rへのリターンを使用しますか?または、角度とは何ですか? –

関連する問題