AI学习笔记之坐标变换与视觉测量

  • 左右手坐标系即转换
    • 左手坐标系、右手坐标系、笛卡尔坐标系
    • 左手旋转规则、右手旋转规则
    • 左手坐标系和右手坐标系相互转换
  • 旋转矩阵
  • 欧拉角与万向锁
    • 欧拉角
    • 万向锁
  • 四元数
    • 四元数的定义
    • 四元数的几何意义
    • 四元数求旋转矩阵
    • 旋转矩阵求四元数

左右手坐标系即转换

左手坐标系、右手坐标系、笛卡尔坐标系

左手坐标系:伸开左手,大拇指指向X轴正方向,食指指向Y正反向,其他三个手指指向Z轴正方向。
右手坐标系:伸开右手,大拇指指向X轴正方向,食指指向Y正反向,其他三个手指指向Z轴正方向。

在高等数学中使用的三维空间是笛卡尔坐标系:
笛卡尔坐标系其实就是右手坐标系,OpenGL中使用右手坐标系,Direct3D使用的是左手坐标系。

左手旋转规则、右手旋转规则

左手坐标系和右手坐标系相互转换

位置(location)与位移(Translation)
位置与位移的转换是相同的,都是顶点位置,转换也比较简单,将X、Y、Z中任意一个取反即可。
旋转
右手坐标系下旋转RR,那么左手坐标系下的旋转应为:
M=[10000−10000100001]LR=M⋅RR⋅MM=\begin{bmatrix}1&0&0&0\\0&-1&0&0\\0&0&1&0\\0&0&0&1\end{bmatrix}\;\;\;\;LR=M\cdot RR\cdot MM=⎣⎢⎢⎡​1000​0−100​0010​0001​⎦⎥⎥⎤​LR=M⋅RR⋅M
注意,一定要和Location,Translation取反的值一致,也就是说Location是y轴取反,那么矩阵M一定要第二行为-1,其他两个周同理,要对应起来。

旋转矩阵

对于两个三维点P1(x1,y1,z1),P2(x2,y2,z2)P_1\left(x_1,y_1,z_1\right),P_2\left(x_2,y_2,z_2\right)P1​(x1​,y1​,z1​),P2​(x2​,y2​,z2​),由点P1P_1P1​经过旋转矩阵RRR旋转到P2P_2P2​,则有:
R=[r11r12r13r21r22r23r31r32r33][x2y2z2]=R[x1y2z2]R=\begin{bmatrix}r_{11}&r_{12}&r_{13}\\r_{21}&r_{22}&r_{23}\\r_{31}&r_{32}&r_{33}\end{bmatrix}\;\;\;\;\;\;\;\;\;\;\;\begin{bmatrix}x_2\\y_2\\z_2\end{bmatrix}=R\begin{bmatrix}x_1\\y_2\\z_2\end{bmatrix}R=⎣⎡​r11​r21​r31​​r12​r22​r32​​r13​r23​r33​​⎦⎤​⎣⎡​x2​y2​z2​​⎦⎤​=R⎣⎡​x1​y2​z2​​⎦⎤​
旋转矩阵为正交矩阵,满足RRT=ERR^T=ERRT=E

  • 绕x轴旋转:
    Rx(θ)=[1000cos⁡θ−sin⁡θ0sin⁡θcos⁡θ]R_x\left(\theta\right)=\begin{bmatrix}1&0&0\\0&\cos\theta&-\sin\theta\\0&\sin\theta&\cos\theta\end{bmatrix}Rx​(θ)=⎣⎡​100​0cosθsinθ​0−sinθcosθ​⎦⎤​
  • 绕y轴旋转:
    Rx(θ)=[cos⁡θ0sin⁡θ010−sin⁡θ0cos⁡θ]R_x\left(\theta\right)=\begin{bmatrix}\cos\theta&0&\sin\theta\\0&1&0\\-\sin\theta&0&\cos\theta\end{bmatrix}Rx​(θ)=⎣⎡​cosθ0−sinθ​010​sinθ0cosθ​⎦⎤​
  • 绕z轴旋转:
    Rx(θ)=[cos⁡θ−sin⁡θ0sin⁡θcos⁡θ0001]R_x\left(\theta\right)=\begin{bmatrix}\cos\theta&-\sin\theta&0\\\sin\theta&\cos\theta&0\\0&0&1\end{bmatrix}Rx​(θ)=⎣⎡​cosθsinθ0​−sinθcosθ0​001​⎦⎤​
    任何一个旋转可以表示为依次绕着三个旋转轴旋转三个角度的组合。这三个角度称为欧拉角。三个轴可以指固定的世界坐标系轴,也可以指被旋转物体坐标系的轴,三个旋转轴次序不同,会导致结果不同。
    Rx(−θ1)Ry(−θ2)Rz(θ)Ry(θ2)Rx(θ1)R_x\left(-\theta_1\right)R_y\left(-\theta_2\right)R_z\left(\theta\right)R_y\left(\theta_2\right)R_x\left(\theta_1\right)Rx​(−θ1​)Ry​(−θ2​)Rz​(θ)Ry​(θ2​)Rx​(θ1​)

欧拉角与万向锁

欧拉角

欧拉角有两种:
1、静态:即绕世界坐标系三个轴的旋转,由于物体旋转过程中坐标轴保持静止,所以称为静态;
2、动态:即绕物体坐标系三个轴的旋转,由于五一旋转过程中坐标轴随着物体做相同的转动,所以称为动态。
使用动态欧拉角会出现万向锁现象,静态欧拉角不存在万向锁问题。
对于在三维空间里的一个参考系,任何坐标系的取向,都可以用三个欧拉角来表现。
参考系又称为实验室参考系,是静止不动的。
而坐标系则固定于刚体,随着刚体的旋转而旋转。
设定xyz-轴为参考系的参考周。称xy-平面与XY-平面的相交为交点线,用英文字母(N)代表。
zxz的欧拉角可以静态地这样定义:

  • α\alphaα是x-轴与交点线的夹角;
  • β\betaβ是z-轴与Z-轴的夹角;
  • γ\gammaγ是交点线与X-轴的夹角;

    图中三个欧拉角分别为:(α,β,γ)(\alpha,\beta,\gamma)(α,β,γ)
    蓝色的轴为:xyz轴;红色的轴为:XYZ轴;绿色的线为交线:N
    实际上,有许多方法可以设定两个坐标系的相对取向。欧拉角方法只是其中的一种。此外,不同的作者会用不同组合的欧拉角来描述,或用不同的名字表示同样的欧拉角。因此,在使用欧拉角之前,必须先做好明确的定义。
    欧拉角的基本思想是将角位移分解为绕三个互相垂直的三个旋转组成的序列。所以,欧拉旋转的三个角,可以对应于三个旋转矩阵:
    1、Yaw(偏航):欧拉角向量的y轴
    2、Pitch(俯仰):欧拉角向量的x轴
    3、Roll(翻滚):欧拉角向量的z轴
    欧拉角的缺点
    1、欧拉角的表示方式不唯一。给定某个其实朝向和坐标朝向,基石戈丁yaw、pitch、roll的顺序,也可以通过不同的yaw、pitch、roll的角度组合来表示所需的旋转。这其实主要是由于万向锁(Gimbal Lock)引起的;
    2、欧拉角的插值比较难(以实现“平滑”旋转);
    3、计算旋转变换时,一般需要转换成旋转矩阵,这时候需要计算很多sin,cos计算量较大。
    由欧拉角求旋转矩阵
    设三个轴x,y,z的欧拉角分别为θx,θy,θz\theta_x,\theta_y,\theta_zθx​,θy​,θz​,正弦值、余弦值分别为R(θx,θy,θz)=Rz(θz)Ry(θy)Rx(θx)=[cyczczsxsy−cxszcxsz+cxszsycyczcxsz+sxsyszcxsysz−czsz−sycysxcxcy]R(\theta_x,\theta_y,\theta_z)=R_z(\theta_z)R_y(\theta_y)R_x(\theta_x)=\begin{bmatrix}c_yc_z&c_zs_xs_y-c_xs_z&c_xs_z+c_xs_zs_y\\c_yc_z&c_xs_z+s_xs_ys_z&c_xs_ys_z-c_zs_z\\-s_y&c_ys_x&c_xc_y\end{bmatrix}R(θx​,θy​,θz​)=Rz​(θz​)Ry​(θy​)Rx​(θx​)=⎣⎡​cy​cz​cy​cz​−sy​​cz​sx​sy​−cx​sz​cx​sz​+sx​sy​sz​cy​sx​​cx​sz​+cx​sz​sy​cx​sy​sz​−cz​sz​cx​cy​​⎦⎤​
    由旋转矩阵求欧拉角
    R=[r11r12r13r21r22r23r31r32r33]=[cyczczsxsy−cxszcxsz+cxszsycyczcxsz+sxsyszcxsysz−czsz−sycysxcxcy]R=\begin{bmatrix}r_{11}&r_{12}&r_{13}\\r_{21}&r_{22}&r_{23}\\r_{31}&r_{32}&r_{33}\end{bmatrix}=\begin{bmatrix}c_yc_z&c_zs_xs_y-c_xs_z&c_xs_z+c_xs_zs_y\\c_yc_z&c_xs_z+s_xs_ys_z&c_xs_ys_z-c_zs_z\\-s_y&c_ys_x&c_xc_y\end{bmatrix}R=⎣⎡​r11​r21​r31​​r12​r22​r32​​r13​r23​r33​​⎦⎤​=⎣⎡​cy​cz​cy​cz​−sy​​cz​sx​sy​−cx​sz​cx​sz​+sx​sy​sz​cy​sx​​cx​sz​+cx​sz​sy​cx​sy​sz​−cz​sz​cx​cy​​⎦⎤​
    解方程得:
    {θx=atan⁡2(r32,r33)θy=atan⁡2(−r31,r322+r332θz=atan⁡2(r21,r11)\left\{\begin{array}{l}\theta_x=a\tan2(r_{32},r_{33})\\\theta_y=a\tan2(-r_{31},\sqrt{r_{32}^2+r_{33}^2}\\\theta_z=a\tan2(r_{21},r_{11})\end{array}\right.⎩⎨⎧​θx​=atan2(r32​,r33​)θy​=atan2(−r31​,r322​+r332​​θz​=atan2(r21​,r11​)​

万向锁

正常状态:三个独立的旋转轴
万向锁:一旦选择±90°作为pitch角,就会导致第一次旋转和第三次旋转等价,整个旋转表示系统被限制在只能绕竖直轴旋转,表示丢失了一个维度。

  • pitch是围绕x轴旋转,也叫做俯仰角;
  • yaw是围绕y轴旋转,也叫做偏航角
  • roll是围绕z轴旋转,也叫做翻滚角。

    万向锁含义:当两个旋转轴重合时,导致只剩下2个旋转,2个旋转不能将所有情况进行描述,其产生的根本原因是绕三个轴的旋转不是同事进行的。

四元数

  • 除了知名的数集(自然数、整数、实数、分数)之外,复数系统引入了一个新的数集——虚数。虚数的发明是为了解决一些特定无解的方程,例如x2+1=0x^2+1=0x2+1=0
  • 虚数有这样的形式:i2=−1i^2=-1i2=−1
  • 复数的集合是一个实数和一个虚数的和,形式:z=a+bi(a,b∈R,i2=−1)z=a+bi(a,b\in R,i^2=-1)z=a+bi(a,b∈R,i2=−1)(可以认为所有实数都是b=0的复数、所有虚数都是a=0的复数
  • 拓展—复数的运算
  • 四元数是简单的超复数。
  • 四元数都是由实数加上三个虚数单位i、j、k组成,而且他们有如下联系:i2=j2=k2=−1,i0=j0=k0=1i^2=j^2=k^2=-1,i^0=j^0=k^0=1i2=j2=k2=−1,i0=j0=k0=1
  • 每个四元数都是1、i、j和k的现行组合,及四元数一般表示为:
    z=a+bi+cj+dkz=a+bi+cj+dkz=a+bi+cj+dk,其中a、b、c、d是实数。

四元数的定义

q=q0+q1i+q2j+q3k=[s,v]q=q_0+q_1i+q_2j+q_3k=\lbrack s,v\rbrackq=q0​+q1​i+q2​j+q3​k=[s,v]

  • 其中,q0,q1,q2,q3q_0,q_1,q_2,q_3q0​,q1​,q2​,q3​均为实数,s=q0,v=[q1,q2,q3],i2=j2=k2=−1s=q_0,v=[q_1,q_2,q_3],i^2=j^2=k^2=-1s=q0​,v=[q1​,q2​,q3​],i2=j2=k2=−1
  • 对于i、j、k本身的几何意义可以理解为一种旋转,其中i代表x轴与y轴相交平面中x轴正方向向y轴正向的旋转,j旋转代表z轴与x轴相交平面中z轴正向向x轴正向的旋转,k旋转代表y轴与z轴相交平面中y轴正向向z轴正向的玄幻,-i、-j、-k分别代表i、j、k的反向旋转。

四元数的几何意义

  • 三维空间的任意旋转,都可以用绕三维空间的某个轴旋转过某个角度来表示。
  • 这种表示方法里,axis可用一个三维向量(x,y,z)来表示,θ\thetaθ可以用一个角度值来表示。
  • 直观来讲,一个思维向量(θ,x,y,z)(\theta,x,y,z)(θ,x,y,z)就可以表示三维空间任意的旋转。
  • 注意,这里的三维向量(x,y,z)只是用来表示axis的方向朝向,因此更紧凑的表示方式是一个单位向量来表示axis,而用该三维向量的长度来表示角度值θ\thetaθ.
  • 这样一来,可以用一个三维向量(θ∗x,θ∗y,θ∗z)(\theta*x,\theta*y,\theta*z)(θ∗x,θ∗y,θ∗z)就可以表示三维空间任意的旋转,前提是其中(x,y,z)是单位向量。
  • 这就是旋转向量(Rotation Vector)的表示方式。
    (cos⁡θ2,x∗sin⁡θ2,y∗sin⁡θ2,z∗sin⁡θ2)\left(\cos\frac\theta2,x\ast\sin\frac\theta2,y\ast\sin\frac\theta2,z\ast\sin\frac\theta2\right)(cos2θ​,x∗sin2θ​,y∗sin2θ​,z∗sin2θ​)

四元数求旋转矩阵

  • 已知四元数:$ q=q_0+q_1i+q_2j+q_3k=\lbrack s,v\rbrack$
  • 利用Rodrigues公式可以由四元数求得旋转矩阵R:
    R=[1−2q22−2q322q1q2−2q0q32q1q3+2q0q22q1q2+2q0q31−2q12−2q322q2q3−2q0q12q1q3−2q0q22q2q3+2q0q11−2q12−2q22]R=\begin{bmatrix}1-2q_2^2-2q_3^2&2q_1q_2-2q_0q_3&2q_1q_3+2q_0q_2\\2q_1q_2+2q_0q_3&1-2q_1^2-2q_3^2&2q_2q_3-2q_0q_1\\2q_1q_3-2q_0q_2&2q_2q_3+2q_0q_1&1-2q_1^2-2q_2^2\end{bmatrix}R=⎣⎡​1−2q22​−2q32​2q1​q2​+2q0​q3​2q1​q3​−2q0​q2​​2q1​q2​−2q0​q3​1−2q12​−2q32​2q2​q3​+2q0​q1​​2q1​q3​+2q0​q2​2q2​q3​−2q0​q1​1−2q12​−2q22​​⎦⎤​

旋转矩阵求四元数

R=[1−2q22−2q322q1q2−2q0q32q1q3+2q0q22q1q2+2q0q31−2q12−2q322q2q3−2q0q12q1q3−2q0q22q2q3+2q0q11−2q12−2q22]R=[r11r12r13r21r22r23r31r32r33][x2y2z2]=R[x1y1z1]⇒{q0=1+r11+r22+r332q1=r32−r234q0q2=r13−r314q0q2=r21−r124q0R=\begin{bmatrix}1-2q_2^2-2q_3^2&2q_1q_2-2q_0q_3&2q_1q_3+2q_0q_2\\2q_1q_2+2q_0q_3&1-2q_1^2-2q_3^2&2q_2q_3-2q_0q_1\\2q_1q_3-2q_0q_2&2q_2q_3+2q_0q_1&1-2q_1^2-2q_2^2\end{bmatrix}\;\\R=\begin{bmatrix}r_{11}&r_{12}&r_{13}\\r_{21}&r_{22}&r_{23}\\r_{31}&r_{32}&r_{33}\end{bmatrix}\;\;\;\;\;\;\;\;\;\;\begin{bmatrix}x_2\\y_2\\z_2\end{bmatrix}=R\begin{bmatrix}x_1\\y_1\\z_1\end{bmatrix}\\\Rightarrow\left\{\begin{array}{l}q_0=\frac{\sqrt{1+r_{11}+r_{22}+r_{33}}}2\\q_1=\frac{r_{32}-r_{23}}{4q_0}\\q_2=\frac{r_{13}-r_{31}}{4q_0}\\q_2=\frac{r_{21}-r_{12}}{4q_0}\end{array}\right.R=⎣⎡​1−2q22​−2q32​2q1​q2​+2q0​q3​2q1​q3​−2q0​q2​​2q1​q2​−2q0​q3​1−2q12​−2q32​2q2​q3​+2q0​q1​​2q1​q3​+2q0​q2​2q2​q3​−2q0​q1​1−2q12​−2q22​​⎦⎤​R=⎣⎡​r11​r21​r31​​r12​r22​r32​​r13​r23​r33​​⎦⎤​⎣⎡​x2​y2​z2​​⎦⎤​=R⎣⎡​x1​y1​z1​​⎦⎤​⇒⎩⎪⎪⎪⎨⎪⎪⎪⎧​q0​=21+r11​+r22​+r33​​​q1​=4q0​r32​−r23​​q2​=4q0​r13​−r31​​q2​=4q0​r21​−r12​​​

AI学习笔记(五)坐标变换与视觉测量相关推荐

  1. Halcon 学习笔记五:几何定位+仿射变换+测量

    Halcon 学习笔记五:几何定位+仿射变换+测量 定位流程 例子一 例子二(药片的定位) 例子三(充电宝定位) 例子四(车牌定位) 其他 定位流程 blob分析 模板匹配 (仿射变换成标准的形状) ...

  2. AI学习笔记(十五)自然语言处理基本概念

    目录 AI学习笔记之自然语言处理 自然语言处理(Natural Language Processing) 自然语言简介 自然语言处理的难点 自然语言处理的现状 基于深度学习的自然语言处理 NLP的处理 ...

  3. AI学习笔记(十二)物体检测(上)

    AI学习笔记之物体检测(上) 物体检测简介 常见检测网络 IOU TP.TN.FP.FN precision(精确度)和recall(召回率) 边框回归 边框回归具体方法 Selective Sear ...

  4. AI学习笔记(七)图像滤波器、OpenCV算法解析

    AI学习笔记之图像滤波器.OpenCV算法解析 图像滤波器 图像噪声 噪声的产生 信噪比 高斯噪声 椒盐噪声 其他噪声 图像滤波 滤波的目的 滤波的要求 各种滤波器 均值滤波 中值滤波 最大最小值滤波 ...

  5. AI学习笔记(六)三维计算机视觉与点云模型

    AI学习笔记之三维计算机视觉与点云模型 立体视觉 立体视觉的概念 立体视觉的原理 单目系统 双目系统和视差 对极几何约束 SIFT sift特征的特点 sift算法总体介绍 sift特征提取和匹配具体 ...

  6. 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-三角测量和实践

     专栏汇总 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第 ...

  7. 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-对极几何和对极约束、本质矩阵、基础矩阵

    专栏系列文章如下:  专栏汇总 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLA ...

  8. AI学习笔记(十四)CNN之图像分割

    AI学习笔记之CNN之图像分割 图像分割 问题引入 实现技术手段及分类 语义分割-FCN(Fully Convolutional Networks) FCN--deconv 反卷积的具体步骤 Unpo ...

  9. AI学习笔记(十三)CNN之人脸检测

    AI学习笔记之CNN之人脸检测 人脸检测 人脸检测概念 人脸检测的难点 人脸检测的主要用途 mtcnn 主要步骤 构建图像金字塔 P-Net(Proposal Network) R-Net(Refin ...

最新文章

  1. IPv6的一些特殊地址
  2. find name 模糊匹配_MYSQL关于find_in_set()函数的使用详解和like的区别之处
  3. 安卓SQLiteOpenHelper使用说明
  4. 基于WebStorm, React和Ant.Design开发WebAppDemo
  5. 基于ZooKeeper实现HA高可用性以及自动主备切换
  6. QT出现“d:\Program Files (x86)\SogouInput\Components\”的错误分析
  7. python语言基础与应用 mooc答案_Python语言基础与应用_中国大学 MOOC_章节考试选修课答案...
  8. 【Nginx】Nginx 工作原理
  9. 制作 Eset Nod32 离线升级包
  10. 计算机启动时默认输入法设置,怎么把输入法设置成默认(怎么设置首选输入法)...
  11. 浅谈(零火)智能开关和(单火)智能开关的工作原理和优势区别
  12. 论信贷企业信用评级与债券信用评级的关系
  13. gcc: libc: __ASSEMBLER__; Kernel: __ASSEMBLY__
  14. 好用的企业邮箱怎么选择?可用邮箱大全
  15. CVTE 2022届实习生 Web后台开发笔试
  16. qt对excel的基本操作
  17. 人脸检测库libfacedetection使用方法
  18. Microsoft PowerToys
  19. 【知识小集】☞Excel之VBA编程语句集300句
  20. 红米note9 android10,红米note9尺寸大小_红米note9手机尺寸

热门文章

  1. 一起来梳理JVM知识点
  2. Java Nested Classes(内部类~第一篇英文技术文档翻译)
  3. Redis单机搭建主从复制以及哨兵机制
  4. SQL练习之两个列值的交换
  5. Linux文本编辑器vim
  6. koa访问mysql数据库操作
  7. 师傅带徒弟 但是不能 教会徒弟饿死师傅!
  8. WOW工会DKP管理系统
  9. idea 快速导入实现父类方法_网站seo优化方法,实现快速排名!
  10. fastjson maven依赖_Spring Boot 使用 Maven 定制一个 parent 简化开发