加载中…
正文 字体大小:

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

(2011-10-20 13:48:53)
标签:

宋体

旋转矩阵

向量

雅可比矩阵

罗德里格斯

分类: 软件编程
从今天开始,把自己学习OpenCV的心得记录下来,以系列的形式贴到博客中,以期交流与备查之用,笔记内容主要偏向于算法的理解。
    处理三维旋转问题时,通常采用旋转矩阵的方式来描述。一个向量乘以旋转矩阵等价于向量以某种方式进行旋转。除了采用旋转矩阵描述外,还可以用旋转向量来描述旋转,旋转向量的长度(模)表示绕轴逆时针旋转的角度(弧度)。旋转向量与旋转矩阵可以通过罗德里格斯(
Rodrigues)变换进行转换。

     算法过程如下:

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

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

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

OpenCV实现Rodrigues变换的函数为

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

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

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

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

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

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


验证代码如下:

#include <stdio.h>
#include <cv.h>

void main()
{
    int i;
    double r_vec[3]={-2.100418,-2.167796,0.273330};
    double R_matrix[9];
    CvMat pr_vec;
    CvMat pR_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]);
    }
}



0

阅读 评论 收藏 转载 喜欢 打印举报
已投稿到:
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 不良信息反馈 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有