2016-08-09 14 views
1

Ich habe versucht, ein paar Fotos mit genauen Quaternions für Wochen ohne Glück zu verzerren. Die unten stehende Gleichung scheint die Kameraposition nicht so gut zu drehen, wie ich es von exakten Positionen erwarten würde. Mache ich das richtig? Gibt es etwas, das mir fehlt?Umwandlung von Quaternion in Kamera-Rotationsmatrix - OpenCV

Ich verstehe, dass ein Quaternion einfach nicht reicht, um ein Foto zu sticken, aber es sollte ausreichen, um die Fotos auszurichten?

Hier ist die Formel:

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) ); 

Antwort

1

OpenCV nicht direkt quaternions unterstützen. Anstatt Ihre Berechnungen zu fixieren, würde ich mit einer einfacheren Konvertierung gehen. Das nächste, was es hat, sind Achsenwinkelvektoren, um 3D-Rotationen darzustellen (auch Rodrigues-Winkel genannt). Ich würde convert to axis-angle, dann multiplizieren Sie die Achse um den Winkel, um Rodrigues Winkel zu erhalten. Danach können Sie die integrierten Funktionen von OpenCV verwenden, zum Beispiel cv::Rodrigues, um in eine 3x3-Rotationsmatrix zu konvertieren.

+0

Korrigieren Sie mich, wenn ich falsch liege, aber der Link, auf den Sie verwiesen haben, scheint das Gegenteil von dem zu tun, was Sie sagen. Es scheint Winkelgeschwindigkeit in eine Quaternion umzuwandeln? –

+0

Ahh, tut mir leid. Ja, ich korrigiere meine Antwort. – SpamBot

+0

Perfekt, danke! Eine letzte Frage, (Entschuldigung im Voraus, wenn es eine noob Frage ist), aber - nachdem ich die quaternion -> rodrigues Winkel umwandelt, verwende ich die Rückkehr von rodrigues zu camera_global [0] .R? Oder was mache ich mit den Winkeln? –