use*_*460 8 c++ opencv rotation
我正在使用solvePnP,我正在使用翻译向量.现在我需要将一些euler角度与solvePnP的结果进行比较.我希望/需要将欧拉角转换为"罗德里格斯";
solvePnP的平移向量是否等于欧拉角.翻译矩阵是唯一与Rodrigues有关的东西吗?或者是否有特殊的罗德里格角,它们与3个欧拉角完全不同?两者之间的数学如何?是否有OpenCV功能,我找不到?
dun*_*dar 61
首先,忘记翻译矢量,因为它与旋转无关:翻译会移动物体,旋转会改变它们的方向.
Rodrigues参数也称为轴角旋转.它们由4个数字组成[theta, x, y, z],这意味着您必须围绕单位矢量描述的轴旋转角度"theta" v=[x, y, z].看看cv :: Rodrigues函数引用,似乎OpenCV使用Rodrigues表示法的"紧凑"表示作为具有3个元素的向量rod2=[a, b, c],其中:
theta是输入矢量的模块theta = sqrt(a^2 + b^2 + c^2)v是标准化的输入向量:v = rod2/theta = [a/theta, b/theta, c/theta]因此,来自solvePnP的Rodrigues矢量与Euler角度符号甚至没有轻微关系,Euler角度符号表示围绕X,Y和Z轴组合的三个连续旋转.
如何比较两个旋转?这是一个很好的问题.Euler和Rodrigues表示都有奇点和其他问题.例如,如果比较两个Euler燕鸥或两个Rodrigues参数,它们看起来可能完全不同,但实际上代表几乎相同的旋转.如果您只需要检查两个旋转是否相同(或大约),您可以按照下一个方法: