zoukankan      html  css  js  c++  java
  • 【计算机视觉】双目测距(四)--罗德里格斯变换

    原文:
    http://blog.sina.com.cn/s/blog_5fb3f125010100hp.html
    从今天开始,把自己学习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=0i<9i++)
        {
            printf("%f ",R_matrix[i]);
        }
    }

  • 相关阅读:
    hdu--2578--与女孩约会
    hdu--2588--欧拉函数||容斥原理
    hdu--2586--lca_tarjan<证明tarjan这个人很流弊>
    hdu--3743--归并排序<自顶向下&&自底向上>2种写法
    hdu--4911--归并排序||树状数组
    hdu--2639--01背包第K解<不同决策的不同解法>
    hdu--2642--二维BIT
    hdu--3833--4000ms才能过的O(N^2)算法
    hdu--3835--最简单的数学..
    hdu--3836--tarjan+缩点
  • 原文地址:https://www.cnblogs.com/huty/p/8517663.html
Copyright © 2011-2022 走看看