精华内容
下载资源
问答
  • 罗德里格斯变换

    万次阅读 2016-11-26 13:47:23
    罗德里格斯变换   当处理三维空间的时候,常常需要用3X3矩阵表征空间旋转。   这种表示方法通常是最方便的,因为一个向量乘以该矩阵等价于该向量某种方式的旋转。不便之处是它不能直观显示3X3矩阵的旋转含义。...

    罗德里格斯变换

      当处理三维空间的时候,常常需要用3X3矩阵表征空间旋转。
      这种表示方法通常是最方便的,因为一个向量乘以该矩阵等价于该向量某种方式的旋转。不便之处是它不能直观显示3X3矩阵的旋转含义。
      另外一个容易可视化的表示方式是用向量形式表示旋转,而该旋转每次用单个角度来操作。这种情况下,最标准的方式是仅用一个向量来说明绕坐标轴的旋转,向量长度表示绕轴逆时针旋转的角度。这个很容易实现,由于方向可以用任意长度的向量表示,因此我们选择向量的长度表示旋转角度。两种表述方式的关系是矩阵和向量可以用罗德里格斯变换关联。
      设r为三维向量r=[rx,ry,rz],这个向量含蓄地定义 ,旋转量用r的长度表示。我们能够将这种以坐标轴-标量形式表示的旋转转换为一个旋转矩阵R:

    R=cos(θ).I+(1cos(θ)).rrT+sin(θ).0rzryrz0rxryrx0R=cos(θ).I+(1−cos(θ)).rrT+sin(θ).[0−rzryrz0−rx−ryrx0]

      我们也能反向从坐标轴表现形式得到旋转矩阵:

    sin(θ).0rzryrz0rxryrx0=RRT2sin(θ).[0−rzryrz0−rxryrx0]=R−RT2

       因此我们发现一种表示形式(矩阵表示)更方便地计算,而另一种表现形式(罗德里格斯)更易于理解。OpenCV为我们提供了相互转换的函数:
    这里写图片描述

       假定我们有向量r和对应的旋转矩阵R,设置src为3X1向量r,dst为3x3旋转矩阵R。相反,我们可以设置src为3x3旋转矩阵R,以及dst为3X1向量r.不论在哪种情况下,函数Rodrigues()都会正确执行。最后的参数是可选的。如果jacobian不为NULL,那么它应该是一个3X9或9x3矩阵的指针,其元素是对应输入数组元素的输出数组元素的偏微分。Jacobian输出主要用于函数cvFindExtrinsicCameraParameters()和cvCalibrateCamera2()的输出从罗德里格斯的1x3或3x1坐标轴角度向量格式转换为旋转矩阵。如果是这样,请将jacobian设置为NULL。
       以下是之前使用过的程序代码,里面有使用到罗德里格斯变换。

      void project2Ellipse(double &radius, double &Rx, double &Ry, double &Rz, double &Tz, int &sigma, vector<Point2f> &imgCenter, Mat &img)
    {
        /STEP-1:设定相机模型
        vector<Point2f>  in_pnts;
        vector<Point3f>  out_pnts;
        static vector<Point2f>  boundaryPnts;
        /STEP-1.1:设定相机内参数;
        double fx = 5769.518128499;
        double fy = 5769.304247163;
        /*double cx = 2575.315753418;
        double cy = 1695.067332223;*/
        double cx = 335;
        double cy = 255;
        Mat Camera_Matrix = (Mat_<double>(3, 3) << fx, 0, cx, 0, fy, cy, 0, 0, 1);
        /STEP-1.2:设定相机畸变参数
        /*double k1 = -0.124141797;
        double k2 = 0.197321413;
        double k3 = -0.000768697;
        double k4 = -0.001034843;*/
        double k1 = 0;
        double k2 = 0;
        double k3 = 0;
        double k4 = 0;
        vector<double> Distort_Coefficients;
        Distort_Coefficients.push_back(k1);
        Distort_Coefficients.push_back(k2);
        Distort_Coefficients.push_back(k3);
        Distort_Coefficients.push_back(k4);
        /STEP-1.3:设定相机外参数:R,T(旋转、平移)
        //double Tx = -189.425316;
        //double Ty = -156.421414;
        double Tx = 0;
        double Ty = 0;
        Mat NewProMatrix = (Mat_<double>(3, 1) << Tx, Ty, Tz);
        Mat RectTransformation = (Mat_<double>(3, 1) << Rx, Ry, Rz);
        /STEP-1.4:设定图像大小
        int length = 3456;
        int width = 5184;
        Mat srcImg = Mat::Mat(length, width, CV_8UC1, Scalar(0)) + 50;
    
        /STEP-2:使用 projectPoints 把理论圆心点影射到图像上,计算得到椭圆上的理论圆心。
        Mat _RectTransformation;
        RectTransformation.copyTo(_RectTransformation);
        if (RectTransformation.cols == 1 || RectTransformation.rows == 1)
        {
            Rodrigues(RectTransformation, _RectTransformation);
        }
        Point3f centerPnt = Point3f(0, 0, 0);
        vector<Point3f> centerPoint;
        centerPoint.push_back(centerPnt);
        projectPoints(centerPoint, _RectTransformation, NewProMatrix,
            Camera_Matrix, Distort_Coefficients, imgCenter);
        STEP-1.5:遍历图像中的每一个像素
    
        for (int i = 0; i < srcImg.rows; i++)
        {
            for (int k = 0; k < srcImg.cols; k++)
            {
                in_pnts.push_back(Point2f(k, i));
            }
        }
        /STEP-3:使用函数project2CalibrationBoard将图像的任意一个像素影射到标定板上
        CoreAlgorithm::project2CalibrationBoard(in_pnts, out_pnts,
            Camera_Matrix, Distort_Coefficients, RectTransformation, NewProMatrix);
        /STEP-4:根据标定板上的理论圆,计算该影射点是否在该圆内。  
        /若在,则为白色,否则为黑色。  采用到原点距离的方法设定,严格小于设定方法
        for (int i = 0; i < out_pnts.size(); i++)
        {
            double Dis = sqrt(pow((out_pnts[i].x - centerPnt.x), 2) + pow((out_pnts[i].y - centerPnt.y), 2) + pow((out_pnts[i].z - centerPnt.z), 2));
            if (Dis <= radius)
            {
                srcImg.at<uchar>(in_pnts[i].y, in_pnts[i].x) = 200;
            }
            else
            {
                srcImg.at<uchar>(in_pnts[i].y, in_pnts[i].x) = 50;
            }
        }
    }
    
    

     附:

    ///求出标定板特征点的三维点平面点
    ///@param R 3x1的旋转向量 或3x3的旋转矩阵
    void  project2CalibrationBoard(const vector<Point2f>& src, vector<Point3f>& pnts3d,
        const Mat& cameraMatrix, vector<double> distCoeffs, const Mat& R, const Mat& T)
    {
        vector<Point2f> pnts2d;
        Mat _R;
        R.copyTo(_R);
        if (R.cols == 1 || R.rows == 1)
        {
            Rodrigues(R, _R);
        }
        T.col(0).copyTo(_R.col(2));
        invert(_R, _R);///求逆矩阵
        undistortPoints(src, pnts2d, cameraMatrix, distCoeffs, _R);
        for (unsigned int i = 0; i < pnts2d.size(); i++)
        {
            pnts3d.push_back(Point3f(pnts2d[i].x, pnts2d[i].y, 0));
        }
    }

       文章进行到这里,你可能会产生一个疑问,罗德里格斯变换只是对于普通的3x1矩阵或3x3矩阵,那图形学中为什么常常会使用齐次坐标变化呢?这也是我自己心中的一个疑惑。

      4D向量是由3D坐标(x,y,z)和齐次坐标w组成,写作(x,y,z,w)。
      在3D世界中为什么需要3D的齐次坐标呢?简单地说明一下,在一维空间中的一条线段上取一点x,然后我们想转移x的位置,那我们应该是x’=x+k,但我们能使用一维的矩阵来表示这变换吗?不能,因为此时一维的矩阵只能让x点伸缩。但如果变成了一维的齐次空间[k 1]就很容易地做到。同样地,在二维空间中,某一图形如果不使用二维的齐次坐标,则只能旋转和伸缩,却不能平移。
       因此,我们在3D坐标中使用齐次坐标,是为了物体在矩阵变换中,除了伸缩旋转,还能够平移,如下运算:

    这里写图片描述

      既然了解了使用齐次坐标的意义,我们下一步就要了解一下齐次坐标w是什么意义。设w=1,此时相当于我们把3D的坐标平移搬去了w=1的平面上,4D空间的点投影到w=1平面上,齐次坐标映射的3D坐标是(x/w,y/w,z/w),也就是(x,y,z)。(x,y,z)在齐次空间中有无数多个点与之对应。所有点的形式是(kx,ky,kz,k),其轨迹是通过齐次空间原点的“直线”(其实每个点相当于3D的坐标世界)。
    当w=0时,有很大的意义,可解释为无穷远的“点”,其意义是描述方向。这也是平移变换的开关,当w=0时,
    这里写图片描述

      此时不能平移变换了。这个现象是非常有用的,因为有些向量代表“位置”,应当平移,而有些向量代表“方向”,如表面的法向量,不应该平移。从几何意义上说,能将第一类数据当作”点”,第二类数据当作”向量”。可以通过设置w的值来控制向量的意义。
      简单点来说,齐次矩阵,增加了一个维度,就能表示平移了。把所有变换都表示到一个矩阵中,方便进行矩阵连乘。

    这里写图片描述

    展开全文
  • 罗德里格斯公式

    2019-08-04 11:44:16
    罗德里格斯公式(Rodriguez formula)是计算机视觉中的一大经典公式,在描述相机位姿的过程中很常用。公式:R=I+sin(θ)K+(1−cos(θ))K2R=I+sin(θ)K+(1−cos(θ))K^2R=I+sin(θ)K+(1−cos(θ))K2 在三维空间中,...

    罗德里格斯公式(Rodriguez formula)是计算机视觉中的一大经典公式,在描述相机位姿的过程中很常用。公式:R=I+sin(θ)K+(1cos(θ))K2R=I+sin(θ)K+(1−cos(θ))K^2
    在三维空间中,旋转矩阵RR可以对坐标系(基向量组)进行刚性的旋转变换。
    (n)[rxx23456789] \left[ \begin{matrix} rxx​ &amp; 2 &amp; 3 \\ 4 &amp; 5 &amp; 6 \\ 7 &amp; 8 &amp; 9 \end{matrix} \right] \tag{n}
    R=⎣⎡​rxx​ryx​rzx​​rxy​ryy​rzy​​rxz​ryz​rzz​​⎦⎤​

    α\alpha
    Γ\Gamma
      在三维空间中,旋转矩阵R
    R可以对坐标系(基向量组)进行刚性的旋转变换。
    罗德里格斯公式 理解、推导

    罗德里格斯公式 理解、推导

    markdown中公式编辑教程
    CSDN-Markdown编辑器-数学公式编写

    展开全文
  • Web-费尔南多-罗德里格斯
  • 罗德里格斯公式推导

    2021-02-01 23:44:10
    罗德里格斯公式推导 我们可以用旋转矩阵,四元数,欧拉角,旋转向量来表示一个旋转,那么旋转矩阵与旋转向量的转换是如何得到的呢? 任何旋转由一个旋转轴与一个旋转角得到。旋转向量的方向与旋转轴一致,长度等于...

    罗德里格斯公式推导

    我们可以用旋转矩阵,四元数,欧拉角,旋转向量来表示一个旋转,那么旋转矩阵与旋转向量的转换是如何得到的呢?

    任何旋转由一个旋转轴与一个旋转角得到。旋转向量的方向与旋转轴一致,长度等于旋转角。我们可以通过推导罗德里格斯公式学习时如何转换的。
    在这里插入图片描述

    罗德里格斯公式推导

    我们取3个向量,uv与绕旋转轴u旋转Ѳ角后得到的v’。这里u为单位向量。
    在这里插入图片描述

    在这里我们将向量v进行分解,分解为平行与u的向量 v|| 与垂直与u的向量 v⊥
    在这里插入图片描述在这里插入图片描述
    并且由于v⊥u正交,v∥vu上的正交投影,可以得到:
    在这里插入图片描述在这里插入图片描述
    可得:
    在这里插入图片描述
    又由于 v’vu 旋转得到的向量,所以旋转时不变,得v’∥v∥相同。
    所以只需要计算v⊥就可以得到 v’ 关于 v 的表达式。由于 v⊥u 垂直所以我们将其转换到 u 的俯视图进行分析。
    在这里插入图片描述
    如图所示,w 为同时垂直与v⊥u 的向量,所以可得:
    在这里插入图片描述又由于 u 为单位向量,所以可以得到 ||w|| = ||v⊥||。

    所以可得
    在这里插入图片描述在这里插入图片描述
    带入可得在这里插入图片描述

    将其中的v∥v⊥vu替换,又由于v⊥垂直于u,所根据外积的含义(值为面积),可以得到u x v⊥ = u x v
    将这些带入可以得到:
    在这里插入图片描述在这里插入图片描述以上就完成了罗德里格斯公式的推导。
    用旋转矩阵表示为
    在这里插入图片描述

    引用
    https://blog.csdn.net/SKANK911/article/details/90056646

    展开全文
  • 罗德里格斯公式推倒

    2019-09-30 23:53:38
    罗德里格斯旋转公式是通过反对称矩阵求旋转矩阵的方法,起初我在看别人写的姿态解算分析文章里看到,他的推导如下:关于罗德里格斯公式的简单推导 请注意我做标记的地方,我刚开始一直不明白这种推导,这样会有误差...

    罗德里格斯旋转公式是通过反对称矩阵求旋转矩阵的方法,起初我在看别人写的姿态解算分析文章里看到,他的推导如下:关于罗德里格斯公式的简单推导
    1466148-20180929223100690-852146976.png

    请注意我做标记的地方,我刚开始一直不明白这种推导,这样会有误差的推导,难道罗德里格斯公式是对旋转矩阵R的近似?这样做并不好,反而会使解算的姿态更不准确,后来在群里讨论这个问题,有大神给我解惑了。
    首先我们明白这是一个SO(3)到SO(3)的李群的映射。不要担心自己不知道李群是什么,因为我们下面的推导会非常简单!首先我们来看什么是反对称矩阵,在这之前,先展示它和向量叉乘的关系:
    1466148-20180929223123722-133747478.png

    这是一个简单的叉乘运算,下面看看我们的反对称矩阵运算:
    1466148-20180929223141588-1635491948.png

    所以我们得出:
    1466148-20180929223156997-885610281.png

    我们知道我们的旋转矩阵R和我们的三角函数的关系,这里就不多说了,所以现在我们来看一个反对称矩阵的性质,首先定义一个反对称矩阵:
    1466148-20180929223211711-342236420.png

    同时我们有如下的约束:
    1466148-20180929223223274-20606209.png

    现在我们可以看到我们的反对称阵有如下性质:
    1466148-20180929223243300-1811317622.png

    现在可以进行我们的罗德里格斯公式推导了:
    关于罗德里格斯公式的简单推导
    1466148-20180929223256684-536580592.png

    1466148-20180929223406387-949817483.png

    引自:http://blog.sina.com.cn/s/blog_ea828d2a0102wlk6.html

    转载于:https://www.cnblogs.com/ymd12103410/p/9726977.html

    展开全文
  • 罗德里格斯变换,提供从旋转矩阵到角度的变换和从角度到旋转矩阵的变换。实现方式为Scilab经简单修改可用于Matlab代码或C语言。
  • 这篇文章是关于罗德里格斯的旋转公式,它与相关的欧拉罗德里格斯参数和欧拉罗德里格斯公式的3D旋转不同。 在三维旋转理论中,对于给定旋转轴和旋转角度,以Olinde Rodrigues命名的罗德里格斯公式是用于在空间...
  • 罗德里格斯旋转公式

    千次阅读 2018-09-20 10:03:45
    罗德里格斯旋转公式用于旋转三维空间的向量.它需要知道旋转轴和旋转角度. 推导:把需要旋转的向量v分解为与旋转轴k垂直和平行的两个向量v垂直和v平行,把v垂直转个θ角变成v垂直rot,加上v平行就能得到v_rot。稍微...
  • 罗德里格斯公式 理解、推导

    万次阅读 多人点赞 2017-12-29 16:55:19
    罗德里格斯公式(Rodriguez formula)是计算机视觉中的一大经典公式,在描述相机位姿的过程中很常用。公式:R=I+sin(θ)K+(1−cos(θ))K2R = I + sin(\theta)K + (1 - cos(\theta))K^{2}   从旋转矩阵RR讲起,在三...
  • 还已经表明,可以根据罗德里格斯表示来给出基于正交多项式的上自旋波函数。 还根据下自旋分量对正交多项式的Rodrigues表示进行了研究,因为根据Dirac方程获得的一阶微分方程,它们与上自旋分量相关。
  • 罗德里格斯公式使用示例 Ubuntu1804 旋转向量转矩阵 #include <iostream> #include <opencv2/calib3d/calib3d.hpp> #include <Eigen/Core> #include <opencv2/core/eigen.hpp> using ...
  • matlab开发-罗德里格斯仪表库块的空间工艺特性。用罗德里格斯参数模拟刚体姿态运动学的库块
  • 罗德里格斯旋转公式及其推导罗德里格斯(Rodrigues)旋转公式及其推导三维空间旋转矩阵罗德里格斯旋转方程(Rodrigues)*叉积矩阵**拉格朗日公式(向量三重积展开)**罗德里格斯旋转方程推导* 罗德里格斯(Rodrigues...
  • 1.三维空间中旋转的方法有多种,这里用轴角式(Axis-angle)的旋转。 2.旋转向量的分解 这里是罗德里格斯公式的推导:参考 https://editor.csdn.net/md/?articleId=107069789
  • 罗德里格斯(Rodrigues)旋转方程推导

    万次阅读 多人点赞 2018-05-26 15:20:00
    罗德里格斯旋转方程是从角度和向量计算出相应的旋转矩阵,这个旋转方程在很多方面有重要的应用,这里简要概述一下方程的推导过程。主要参考资料是维基百科,其实基本上就是对百科的翻译,自己走一遍这个推导过程,...
  • 5G开启移动网络新时代 ,罗德里格斯编著 ,Pg351 ,2016.01_13935638
  • 罗德里格斯旋转公式是通过反对称矩阵求旋转矩阵的方法,起初我在看别人写的姿态解算分析文章里看到,他的推导如下: 请注意我做标记的地方,我刚开始一直不明白这种推导,这样会有误差的推导,难道罗德里格斯公式...
  • 罗德里格斯公式推导(转载)

    千次阅读 2020-05-04 12:08:31
    由于PX4中姿态控制中用到了 罗德里格斯公式,且前阵子观看高翔的《视觉SLAM十四讲》中也提到该部分的内容, 故考虑应该对该部分进行较为准确的理解。查找了网上的相关知识,并进行了推导。其中有篇较为不错,故转载...
  • 罗德里格斯公式推导一,基础准备1. 旋转矩阵2. 旋转向量3. 向量叉积二,公式推导1.符号说明与图例2. 推导 一,基础准备 1. 旋转矩阵 R=[rxxrxyrxzryxryyryzrzxrzyrzz]R=\left[\begin{array}{lll}{r_{x x}} & {r_...
  • 罗德里格斯公式的推导过程

    千次阅读 2018-02-04 21:22:09
    最近在学高翔博士的《视觉SLAM十四讲》,看到第三章中的课后题中要求理解罗德里格斯公式的推导过程,所以在CSDN上搜了一篇文章,原文链接http://blog.csdn.net/q583956932/article/details/78933245 原文写的十分...
  • 旋转向量中V的单位向量代表方向,模代表角度,通过罗德里格斯方程可以将旋转向量转换成旋转矩阵。 罗德里格斯旋转方程是从角度和向量计算出相应的旋转矩阵,这个旋转方程在很多方面有重要的应用,这里简要概述一下...
  • 关于罗德里格斯公式的简单推导

    千次阅读 2018-01-08 19:31:20
    罗德里格斯旋转公式是通过反对称矩阵求旋转矩阵的方法,起初我在看别人写的姿态解算分析文章里看到,他的推导如下: 请注意我做标记的地方,我刚开始一直不明白这种推导,这样会有误差的推导,难道罗德里格斯公式...
  • ESPE202011-FP-GEO-3285 ESPE202011-FP-GEO-3285弗拉基米尔·罗德里格斯

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 318
精华内容 127
关键字:

罗德里格斯