3D视觉(二)四元数简要说明
在知乎里有个帖子叫:如何形象地理解四元数?
四元数的历史来源:
爱尔兰数学家Hamilton有段时间致力于寻求一种将复数从2D转换到3D中的方法,苦思不得,有一次在去演讲的路上,突发灵感,将复数引入三个虚部,并将定义这种新的复数类型的等式写在了Broome桥上,等式如下:
上面的公式跟三维向量中的叉乘计算很像,有木有!
什么是四元数:
四元数本质上是一种在四维空间高阶复数,一般复数为二维空间。四元数的虚部包含了三个虚数单位:i、j、k,即一个四元数可以表示为:
x = a + bi + cj + dk。
由于i,j,k的性质和笛卡尔坐标系三个轴叉乘的性质很像,所以可以将四元数写成一个向量和一个实数组合的形式:
q=(v⃗ +w)=((x,y,z),w)
四元数的运算性质包括:
四元数的点积
∗q)
四元数与欧拉角、旋转矩阵:
既然四元数被创造出来了,那它一定是用来解决实际问题的,否则数学家岂不是被人怼吃饱了没事干吗?其中,四元数的应用之一就是解决3D视觉中的旋转问题。
旋转的表示方法有:矩阵旋转法和欧拉角旋转法。其中矩阵旋转是使用了一个4*4大小的矩阵来表示绕任意轴旋转的变换矩阵,而欧拉角方法是按照一定的坐标轴顺序(例如先x、后y、最后z)、每个轴旋转一定角度来变换坐标或向量。那为什么还需要四元数呢?肯定现有的方法有不足呗。。。
旋转矩阵:
旋转矩阵乘以点P的齐次坐标,得到旋转后的点P',因此旋转矩阵可以描述旋转,
⎡⎣⎢⎢⎢x′y′z′1⎤⎦⎥⎥⎥=R⋅⎡⎣⎢⎢⎢xyz1⎤⎦⎥⎥⎥
绕x,y,或z轴旋转θ的矩阵为:
Rx(θ)=⎡⎣⎢1000cosθsinθ0−sinθcosθ⎤⎦⎥
Ry(θ)=⎡⎣⎢cosθ0sinθ010−sinθ0cosθ⎤⎦⎥
Rz(θ)=⎡⎣⎢cosθsinθ0−sinθcosθ0001⎤⎦⎥
- 优点:旋转轴可以是任意向量;
- 缺点:
- 旋转其实只需要知道一个向量+一个角度信息,但矩阵法却使用了16个元素;
- 做乘法操作时会增加计算量,造成了空间和时间上的浪费;
欧拉角旋转
欧拉角也可以描述三维刚体旋转,它将刚体绕过原点的轴(i,j,k)旋转θ,分解成三步(蓝色是起始坐标系,而红色的是旋转之后的坐标系。)。
1. 绕z轴旋转α,使x轴与N轴重合,N轴是旋转前后两个坐标系x-y平面的交线
2. 绕x轴(也就是N轴)旋转β,使z轴与旋转后的z轴重合
3. 绕z轴旋转γ,使坐标系与旋转后的完全重合
按照旋转轴的顺序,该组欧拉角被称为是“zxz顺规”的。对于顺规的次序,学术界没有明确的约定。
欧拉角的旋转矩阵为:
Rz(α)⋅Rx(β)⋅Rz(γ)
- 优点:
- 很容易理解,形象直观;
- 表示方便,只需要3个对应x、y、z轴的旋转角度值;
- 缺点:
- 按照一个固定的坐标轴的顺序旋转,不同的顺序会造成不同的结果;
- 会造成万向节锁(Gimbal Lock)的现象。这种现象的发生就是由于上述固定坐标轴旋转顺序造成的。理论上,欧拉旋转可以靠这种顺序让一个物体指到任何一个想要的方向,但如果在旋转中不幸让某些坐标轴重合就会发生万向节锁,这时就会丢失一个方向上的旋转能力,也就是说在这种状态下我们无论怎么旋转都不可能得到某些想要的旋转效果。这里有个视频可以直观的理解下,或者参见:http://www.ceeger.com/Unity/Doc/2011/Gimbal_Lock.html
- 由于万向节锁的存在,欧拉旋转无法实现球面平滑插值;
四元数旋转:
四元数可用来刻画三维空间中的旋转,例如坐标系中的点p(P,0)(写成四元数的形式)绕单位向量(x,y,z)表示的轴旋转θ:
q=((x,y,z)sinθ2,cosθ2)
旋转后的坐标p'为:
p′=qpq−1
具体推导可以查看参考1,2,4。另外,在参考5里给出了C++的四元数类实现。
转换关系:
参考:
- https://www.3dgep.com/understanding-quaternions/
- http://www.qiujiawei.com/understanding-quaternions/
- http://blog.csdn.net/silangquan/article/details/50390570 (C++四元数类)
- http://blog.csdn.net/youngpan1101/article/details/71086851
- http://www.mi2think.com/2017/01/%E6%88%91%E6%89%80%E7%90%86%E8%A7%A3%E7%9A%84%E5%9B%9B%E5%85%83%E6%95%B01/
- http://blog.csdn.net/youngpan1101/article/details/71086851
3D视觉(二)四元数简要说明相关推荐
- 3D视觉(二):单目摄像头的标定与校正
3D视觉(二):单目摄像头的标定与校正 文章目录 3D视觉(二):单目摄像头的标定与校正 一.相机模型 1.机器车坐标系到相机坐标系 2.相机坐标系到归一化平面坐标系 3.归一化平面坐标畸变 4.归一 ...
- 3D视觉概述与立体成像原理
3D视觉概述 一.何为3D视觉 二.双目成像原理(ZED系列) 三.TOF时间飞行法(Kinect系列) 四.结构光成像原理(D435系列) 一.何为3D视觉 二.双目成像原理(ZED系列) 三.TO ...
- 3D 视觉 相关知识-SLAM框架-常见方案对比
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:新机器视觉 点云数据 通过测量仪器获得 物体外观 的点数 ...
- 3D视觉应用开发--机器人3D互动四大技术难点分析
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 先回顾一下需要达成的应用场景:简单说就是利用3D视觉传感技术实现人 ...
- 科普| 3D视觉技术正在改变我们的生活
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 用双眼观察世界是人类与生俱来的.最为核心的生物功能之一,也是人类认 ...
- 3D视觉检测的未来:光度立体技术
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 利用3D表面定向,特别是它对反射光的影响,工业应用的光度立体产生对 ...
- 基于结构光测量技术和3D物体识别技术开发的机器人3D视觉引导系统
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|新机器视觉 基于结构光测量技术和3D物体识别技术开发的机器 ...
- 强化学习与3D视觉结合新突破:高效能在线码垛机器人
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 转自 | 机器之心 国防科技大学.克莱姆森大学和视比特机器人的研究 ...
- 20~40K | 迁移科技招3D视觉、深度学习算法工程师等十大岗位
一.公司介绍 北京迁移科技有限公司成立于2017年,是一家以3D视觉和机器人智能控制为核心技术,以高精度3D相机和极易用的智能抓取软件为核心产品的高科技企业.公司聚焦无序抓取与无序拆垛场景,打造了低学 ...
- 1000人证明过的3D视觉系统学习教程
写在前面 我们在「3D视觉从入门到精通」星球里已经为大家梳理了以下一些内容: (一) 3D视觉学习路线 (二)线上视频课程 (三)3D视觉顶会|期刊 (四)精华github资源 (五)往期帖子与问答汇 ...
最新文章
- React 项目--设置根目录(8)
- C++继承时的名字遮蔽(二)
- 三个activity之间跳转 数据传递_第二百四十二回:Android中Fragment之间的数据传递概述...
- C# ConcurrentBag实现
- Windows下MySQL 5.6.19 general_log的设置(亲测)
- 如何修改Chrome默认字体
- 微服务精华问答 | 微服务有什么优点和不足呢?
- perl学习笔记(8)
- 制作自己的特色PE----Mr.Zhang
- GCD学习(五) dispatch_barrier_async
- Shell实现MySQL分库备份
- 网页内容爬取:如何提取正文内容
- 将OSM地图转化成OpenDRIVE
- 安卓手机误删文件恢复
- linux dot命令,linux绘图工具之dot
- 交换机 tagged 与 untagged 的关系
- 韩国WA15-6819B高性能DSP数字功放芯片
- ppt 里插入html,如何在PPT中插入html网页.ppt
- Windows10或11 update服务禁用之后又变成手动
- 每日一练--世纪难题
热门文章
- KETTLE集群搭建
- mysql的三种安装方式
- 在Mac OS X中配置Apache + PHP + MySQL 很详细
- 用Java操作Office 2007
- sleep实现原理(转载)
- 48. Be aware of template metaprogramming
- 全国高校安徽考区计算机,关于做好2021年上半年全国高校(安徽考区)计算机水平考试报名工作的通知...
- oracle 调整缓存大小,设置数据缓冲大小_oracle
- 短信转移到另一个手机接收_如何将iPhone手机接收短信同步到另外一台设备上?...
- python输出命令_Python中的命令输出解析