计算机视觉中的李代数与李群

在计算机视觉领域的文献里经常会见到李代数和李群的概念,在此说说我个人对李代数与李群的理解。


本人第一次遇见李代数与李群的概念是在研一时必修课《非线性控制系统理论与应用》上,在该课程中是使用李群与李代数来解决非线性控制系统精确线性化这一任务的。之后在计算机视觉课程中深入学习了双视几何,期间了解到三维旋转的不同表示方法。三维旋转的自由度为3,可以使用旋转矩阵、欧拉角、四元和旋转向量来表示。


旋转矩阵即是行列式等于1的正交矩阵,行列式等于-1的正交矩阵为镜面反射变换;

欧拉角就是绕三个坐标轴转动个角度,会存在万向锁的情况使得三维旋转的自由度降为2;

四元数和复数概念比较像,有实部和虚部的概念,实部表示旋转的角度,虚部表示旋转轴;

旋转向量与四元数也比较像,旋转向量是一个三维向量,其方向表示旋转方向,其模表示旋转角度。


三维旋转比较紧凑的表示方法是使用旋转向量来表示,其次是四元数。


旋转向量与旋转矩阵之间的相互转换是通过罗德里格斯公式建立起来的:

计算机视觉中的李代数与李群_第1张图片

其中r为旋转向量,R为旋转矩阵。其反过程可有下式确定:

计算机视觉中的李代数与李群_第2张图片


简单提下关于罗德里格斯公式的证明,由理论力学关于刚体的三维旋转矩阵R随时间的变化与角速度w之间满足欧拉公式:

该矩阵微分方程的解为


下标x表示向量对应的反对称阵。为了简化,假设角速度为常量,则积分号可以去掉;R0为单位阵,则旋转矩阵Rt为:


从这可以看出旋转矩阵可以通过一个三维向量来确定,三维向量与旋转矩阵之间通过矩阵指数函数建立映射关系,不过该映射不是一一映射,即存在若干个旋转向量对应一个旋转矩阵,任何一个旋转矩阵都可以找到若干个旋转向量与之对应,但是只要把旋转角度限制在一个圆周内,则为一一映射。矩阵指数函数可以按照矩阵级数展开,而凯莱-哈密顿定理告诉我们可以把该矩阵级数化为有限项的线性组合,于是有了罗德里格斯公式。这就是一个典型的李群SO(3)及其对应的李代数so(3)的实例,且李群的自由度与其对应的李代数具有相同的自由度。李群SO(3)叫三维旋转群,李代数so(3)为其对应的正切向量空间,它们之间满足微分方程,该微分方程差分化后用于计算机迭代求解。


从使用角度看,机器视觉里面用到的李代数与李群,归根结底就是罗德里格斯公式,用旋转向量来表示三维旋转。开源库sophus里的api基本上就是四元数、旋转向量和旋转矩阵的相互转化和对点施行变换的功能。


除此之外,还有凯莱公式(Cayley formula)可以将旋转向量转化为旋转矩阵,该公式也有说是欧拉发现的:


其中A为旋转向量对应的反对称阵。

值得一提的是,同一个旋转向量用凯莱公式和罗德里格斯公式转化得到的旋转矩阵通常并不相等,但都是旋转矩阵。凯莱公式还可以化简为:


其中


凯莱公式的逆变换为:


或者



使用凯莱公式计算旋转矩阵,计算量会比罗德里格斯公式小很多。

参考:http://researchopen.lsbu.ac.uk/92/1/CayleyMap(corrected).pdf



小例子:

https://github.com/jah10527/rot3d







你可能感兴趣的:(标定,VR,slam)