计算机视觉的数学基础

本文转载高博士的博客
主要介绍了在计算机视觉中关于3D变换矩阵的数学方法。

  1. 旋转矩阵是一种3×3的正交矩阵,
    这里写图片描述
    这里R为3D的旋转矩阵,同样的,t为3D的平移矢量。
    由于3D旋转都可以归结成按照某个单位向量n进行大小为θ的旋转。所以,已知某个旋转时,可以推导出对应的旋转矩阵。该过程由罗德里格斯公式表明,由于过程比较复杂,我们在此不作赘述,只给出转换的结果: 
    这里写图片描述
    这里这里写图片描述 公式虽然较为复杂,但实际写成程序后,只需知道旋转方向和角度后即可完成计算。另一件有趣的事是,如果用
    这里写图片描述
    表示与n对应的一个反对称矩阵,那么有:
    这里写图片描述 (李代数会对后面的指数形式做出解释)
    根据此式,我们也可以从任意给定的旋转矩阵,求出对应的转轴与转角。关于转角θ,我们对上式两边求矩阵的迹,可得:
    这里写图片描述
    可得 这里写图片描述
    关于转轴n,由于旋转轴上的向量在旋转后不发生改变,说明
    这里写图片描述
    因此,只要求此方程的解向量即可。这也说明n是R特征值为1的一个特征向量。
    总之,读者应当明白在3D时,旋转和平移仍可用转移矩阵T来描述,其结构也与2D类似。而T4×4构成了三维欧氏变换群SE(3)。注意到T虽然有16个变量,但真正的自由度只有6个,其中3个旋转,3个位移。
    欧拉角是一种广为使用的姿态描述方式,以直观见长。在最常用的欧拉角表达方式中,我们把旋转分解成沿三个轴转动的量:滚转角-俯仰角-偏航角(roll-pitch-yaw)。它的好处是十分的直观,且只有三个参数描述。缺点是会碰到著名的万向锁问题:在俯仰为±90∘时,表达某个姿态的形式不唯一。此外,它也不易于插值和迭代。一般不怎么用,只有在验证结果是否正确时,方便使用。

  2. 四元数
    相比欧拉角,四元数(Quaternion)则是一种紧凑、易于迭代、又不会出现奇异值的表示方法。它在程序中广为使用,例如ROS和几个著名的SLAM公开数据集、g2o等程序都使用四元数记录机器人的姿态。
    四元数仅是3D姿态的一种表达方式,我们用一个单位四元数表达原本用旋转矩阵表示的三维旋转。这样做一个直接的好处是省空间。一个旋转阵有9个分量,但只有三个自由度。那么,能不能用三个数来描述呢?可以是可以的,但不可避免会出现奇异的情况,欧拉角就是一个例子。而四元数,比三维向量多了一个分量,从而可以无奇异地表示各种姿态。
    四元数是Hamilton找到的一种扩展的复数。一个四元数拥有一个实部和三个虚部(故事上说他原先找了很久带两个虚部的,结果怎么也找不到,最后豁然开朗找到了三虚部的四元数):
    这里写图片描述
    其中i,j,k为四元数的三个虚部。这三个虚部满足关系式:
    这里写图片描述
    由于它的这种特殊表示形式,有时人们也用一个标量和一个向量来表达四元数:
    这里写图片描述
    这里,标量s称为四元数的实部,而向量v称为它的虚部。如果一个四元数虚部为0,称之为实四元数。反之,若它的实部为0,称之为虚四元数。该定义和复数是相似的。
    四元数可以表示三维空间中任意一个旋转。与旋转矩阵中类似,我们仍假设某个旋转是绕单位向量这里写图片描述 进行了角度为θ的旋转,那么这个旋转的四元数形式为:
    这里写图片描述
    事实上,这还是一个模长为1的四元数,称为单位四元数。反之,我们亦可通过任意一个长度为1的四元数,计算对应旋转轴与夹角:
    这里写图片描述
    若某个四元数长度不为1,我们可以通过归一化将它转换为一个模长为1的四元数。对旋转角的四元数形式的θ加上2π,我们得到一个相同的旋转,但此时对应的四元数变成了−q。因此,在四元数中,任意的旋转都可以由两个互为相反数的四元数表示。同理,取θ为0,则得到一个没有任何旋转的四元数:
    这里写图片描述
    四元数和通常复数一样,可以进行一系列的运算。常见的有四则运算、内积、求逆、共轭、求指数/对数等等。表示姿态时,它还可以进行插值。
    3D空间也可以用单位四元数表示旋转。假设一个空间三维点v=[x,y,z]∈R3 ,以及一个由旋转轴和夹角n,θ指定的旋转,首先,我们把三维空间点用一个虚四元数来描述:
    这里写图片描述
    然后,参照旋转角的四元数表示,用另一个四元数q表示这个旋转:
    这里写图片描述
    那么,旋转后的点p′p′即可表示为这样的乘积:
    这里写图片描述
    可以验证,计算结果的实部为这里写图片描述,故计算结果为纯虚四元数。其虚部的三个分量表示旋转后3D点的坐标。
    由于任意单位四元数都可表示为一个3D旋转,即SO(3)中的元素,我们可以找到一个旋转矩阵与之对应。最简单的方式是由四元数q解出旋转角θ和旋转轴n,但那样要计算一个arccos函数,代价较大。实际上这个计算是可以通过一定的计算技巧绕过的。为省略篇幅,我们直接给出四元数到旋转矩阵的转换方式。
    设四元数q=q0+q1i+q2j+q3k,对应的旋转矩阵R为:
    这里写图片描述
    反之,由旋转矩阵到四元数的转换如下。假设矩阵为R={mij},i,j∈[1,2,3],其对应的四元数q由下式给出:
    这里写图片描述

  3. 其他几种变换
    1). 相似变换比欧氏变换多了一个自由度,7个自由度,它允许物体进行自由地缩放。
    这里写图片描述
      注意到旋转部分多了一个缩放因子s,它在x,y,z三个坐标上形成均匀的缩放。类似的,相似变换的乘法也构成群,称为Sim(3)。由于含有缩放,相似变换不再保持图形的面积不变。
    2). 仿射变换的矩阵形式如下:
    这里写图片描述
      与欧氏变换不同的是,仿射变换只要求A是一个可逆矩阵,而不必是正交矩阵。在仿射变换下,直线的夹角会发生改变,但平行性质不变。这即是说,仿射变换把平行四边形变为平行四边形。有12个自由度。平行行和体积比不变。
    3). 射影变换是最一般的变换,它的矩阵形式为:
    这里写图片描述
      它左上角为可逆矩阵A,右上为平移t,左下缩放aT。由于采用齐坐标,当v≠0时,我们可以对整个矩阵除以v得到一个右下角为1的矩阵; 否则,则得到右下角为0的矩阵。因此,这个矩阵在2D中一共有8个自由度,而在3D中一共有15个自由度,是现在提到的变换中最为一般的。接触平面的相交和相切。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值