OpenCV学习笔记(一)——旋转向量与旋转矩阵相互转化

处理三维旋转问题时,通常采用旋转矩阵的方式来描述。一个向量乘以旋转矩阵等价于向量以某种方式进行旋转。除了采用旋转矩阵描述外,还可以用旋转向量来描述旋转,旋转向量的长度(模)表示绕轴逆时针旋转的角度(弧度)。旋转向量与旋转矩阵可以通过罗德里格斯(Rodrigues)变换进行转换。

算法过程


式中,norm为求向量的模。反变换也可以很容易的通过如下公式实现


OpenCV实现Rodrigues变换的函数为

 int  cvRodrigues2(const  CvMat*  src,  CvMat*  dst,  CvMat*  jacobian=0);

src为输入的旋转向量(3x1或者1x3)或者旋转矩阵(3x3)。

dst为输出的旋转矩阵(3x3)或者旋转向量(3x1或者1x3)。

jacobian为可选的输出雅可比矩阵(3x9或者9x3),是输入与输出数组的偏导数。

可以用上述方式法验证以下例子

验证代码如下:

#include

#include

voidmain()

{

inti;

doubler_vec[3]={-2.100418,-2.167796,0.273330};

doubleR_matrix[9];

CvMatpr_vec;

CvMatpR_matrix;

cvInitMatHeader(&pr_vec,1,3,CV_64FC1,r_vec,CV_AUTOSTEP);

cvInitMatHeader(&pR_matrix,3,3,CV_64FC1,R_matrix,CV_AUTOSTEP);

cvRodrigues2(&pr_vec,&pR_matrix,0);

for(i=0;i<9;i++)

{

printf("%f\n",R_matrix[i]);

}

}

http://blog.sina.com.cn/s/blog_5fb3f125010100hp.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 作为备用知识,memo 学过矩阵理论或者线性代数的肯定知道正交矩阵(orthogonal matrix)是一个非常...
    HappyPieBinLiu阅读 11,213评论 0 5
  • 二维旋转矩阵(2D Rotation Matrix) 在欧几里得坐标系下,二维的旋转矩阵可以用一个旋转角 $\th...
    yfwz100阅读 10,961评论 1 2
  • 变换(Transformations) 我们可以尝试着在每一帧改变物体的顶点并且重设缓冲区从而使他们移动,但这太繁...
    IceMJ阅读 9,759评论 0 1
  • 干净利索不矫揉造作的你啊 相处的时候可以学到很多东西。
    得不到红玫瑰阅读 1,098评论 0 0
  • “奋斗” 为了那个等待告诫我的女孩,我步履走的稳重,因为那一声 “我爱你”,我从此便变得成熟自信。 我全身心的投入...
    吴居橍阅读 3,599评论 0 0