文章目录

  • 概要
  • 刚体空间旋转的描述
    • 旋转矩阵
    • 欧拉角
    • 四元数
  • 刚体空间平移的描述
  • 总结

概要

  Kinect2.0是微软推出的一款RGB-D相机,它即支持普通相机的拍摄,也支持脉冲测量深度信息。本系列文章基于该传感器给出基本的环境搭建、原理讲解、点云数据捕捉、三维点云拼接等开发源码,当然也会总结经验帮大家排雷避坑。本小节介绍相机外部参数相关的理论,为后续文章打基础。

刚体空间旋转的描述

  在深度相机Kinect2.0三维点云拼接实验(一)的式(6)中,PPP是在相机坐标系下的坐标,由于拼接的两幅图像是相机不同的姿态进行获取的,所以在进行拼接的时候需要通过相机的姿态信息把图像变换到同一坐标系下进行处理,所以需要一种数据格式用来描述相机坐标系的变换。描述相机在三维空间运动的数据格式有很多种比如:旋转矩阵、旋转向量、欧拉角、四元数等。这里讨论计算机易于存储的四元数格式和易于计算的旋转矩阵格式以及它们之间的相互变换,为之后的点云拼接作铺垫。

旋转矩阵

  旋转矩阵是在乘以一个向量的时候有改变向量的方向但不改变大小的效果并保持了手性的矩阵。由于推导过程比较繁琐,这里我们直接给出三维空间内绕xyz三个轴旋转时的旋转矩阵,如下图所示:

如果是反向旋转,就是相应旋转矩阵的逆矩阵,由于旋转矩阵是正交矩阵,也就是相应的旋转矩阵的转置矩阵。坐标系的正向旋转实际就是该坐标系里的向量绕相应的轴做反向旋转,根据上面的结论,也就是三个向量的旋转矩阵的转置矩阵。坐标系的反向旋转时正向旋转下的转置,与向量绕轴正向旋转一样。

PS: 旋转矩阵的推导,推荐3维旋转矩阵推导与助记这篇文章讲的很棒!

欧拉角

欧拉角也是一种表示三维旋转的描述方法,欧拉角的计算需要借助旋转矩阵,它的描述方式是按照绕三个轴的旋转的角度进行表示,设绕x,y,zx,y,zx,y,z轴的旋转角度分别为α,β,γ\alpha,\beta,\gammaα,β,γ,假设描述一个刚体旋转按照XYZXYZXYZ次序的一组欧拉角为(α0,β0,γ0)T(\alpha_{0}, \beta_{0}, \gamma_{0})^T(α0​,β0​,γ0​)T,同理,别的次序也一样,一共有六种次序,即:XYX、XYZ、YXZ、YXY、ZXY、ZYX。一般我们确定下描述的次序,那么就可以用三个角度来描述刚体的旋转。

四元数

旋转矩阵用矩阵的方式描述旋转便于计算机运算,但是如果按照旋转矩阵存储则会显得冗余,考虑到单位复数可以描述二维平面的旋转,那么在三维空间中可以用类似于复数的形式描述旋转,即单位四元数,它只有四个数即可描述刚体的旋转信息,所以非常适合计算机存储。四元数的格式为:
q⃗=w+xi+yj+zk\vec{q} = w+xi+yj+zk q​=w+xi+yj+zk

假设某个旋转绕单位向量n⃗=(x0,y0,z0)T\vec{n}= (x_0,y_0,z_0)^Tn=(x0​,y0​,z0​)T进行了角度为 的旋转,那么用四元数可以表示为:

q⃗=(cosθ2,nxsinθ2,nyssinθ2,nzsinθ2)T\vec{q} = (cos\frac{\theta}{2},n_xsin\frac{\theta}{2},n_yssin\frac{\theta}{2},n_zsin\frac{\theta}{2})^T q​=(cos2θ​,nx​sin2θ​,ny​ssin2θ​,nz​sin2θ​)T

刚体空间平移的描述

刚体空间的平移可以用方向+距离的方式进行描述,在O−xyzO-xyzO−xyz空间中,用一个向量n⃗=(x0,y0,z0)\vec{n}= (x_0,y_0,z_0)n=(x0​,y0​,z0​)的方向表示平移的方向,用它的模长表示平移的距离,即距离L=x02+y02+z02L=\sqrt{{x_0}^2+{y_0}^2+{z_0}^2}L=x0​2+y0​2+z0​2​。

总结

   获取相机外部参数的传感器有很多,如里程计、陀螺仪等,只有获取相机外参我们才知道拍摄的角度,这在后面的图像拼接非常重要。

深度相机Kinect2.0三维点云拼接实验(三)相关推荐

  1. 深度相机Kinect2.0三维点云拼接实验(二)

    文章目录 摘要 Linux系统下的环境搭建 Ubuntu系统安装 ROS-Melodic安装 Kinect2.0驱动安装 PCL库安装 Open-CV库安装 注意事项 Windows10系统下的环境搭 ...

  2. Intel Realsense D435 python 从深度相机realsense生成pcl点云

    引用文章:python 从深度相机realsense生成pcl点云 从深度相机realsense生成pcl点云 一.通过realsense取得深度信息和彩色信息 二.获取坐标和色彩信息 三.通过pcl ...

  3. 三维点云质心与三角化 — python open3d

    1 质心介绍 质心概念与重心的计算方式相同.如下所示:                                          (1) 即                           ...

  4. python 从深度相机realsense生成pcl点云

    简单说下步骤: 一.通过realsense取得深度信息和彩色信息 二.获取坐标和色彩信息 三.通过pcl可视化点云 一.通过realsense取得深度信息和彩色信息 ubuntu下intel real ...

  5. 哪些深度相机有python接口_python 从深度相机realsense生成pcl点云

    简单说下步骤: 一.通过realsense取得深度信息和彩色信息 二.获取坐标和色彩信息 三.通过pcl可视化点云 一.通过realsense取得深度信息和彩色信息 ubuntu下intel real ...

  6. PCL三维点云拼接融合技术

    转自:https://blog.csdn.net/dcba2014/article/details/71859375?locationNum=2&fps=1 本例使用pcd格式点云文件进行配准 ...

  7. 三维点云拼接 标记点拼接 SVD分解法

    在三维重建的过程中每次只能测量有限的区域,那么拼接的操作就再所难免了,最终拼接的效果往往觉得了你做的产品是否真的有价值.很多市面上的产品在比较的时候首先看的是整体的重建效果,而整体的效果就是拼接决定的 ...

  8. 深度相机(五)--Kinect v2.0

    原文:http://blog.csdn.net/qq1175421841/article/details/50412994 ----微软Build2012大会:Kinect for Windows P ...

  9. 利用深度图建立三维点云地图笔记

      前言:这几天在独立地研究对RGBD图像序列,建立其三维点云地图.这是我研究生期间,毕业论文中的一点小工作.由于我并没有借鉴像RTAB-MAP等SLAM方法,所以本文仅仅能够帮助学习和理解是三维建图 ...

最新文章

  1. pillow模块批量 读取图像、旋转、放缩、裁剪图片等操作
  2. jvm学习笔记(三)
  3. 【JS面试向】深入原型链之class的继承
  4. APP打开直接显示图片,去掉中间的白屏时间
  5. extjs Grid(一)
  6. 少数以太坊矿池正在联合抵制EIP-1559提案的实施
  7. [贪心|字符串] leetcode 3 无重复字符的最长子串
  8. ReentrantLock 源码解析
  9. juc包下四大并发工具
  10. 300 页干货!李宏毅《一天搞懂深度学习》(附下载)
  11. 目标检测(二):OverFeat
  12. 基于OPENCV的图像识别(JAVA版本)
  13. 人们常说的扩充计算机内存,电脑加大内存条有什么好处
  14. cve_2019_0708复现踩坑
  15. html勾选标签,html怎么勾选框
  16. 看完你就知道原因了,这3类人不适合做自媒体,看看是不是你自己
  17. 在本地安装使用-LTP
  18. kafka的isr理解
  19. 我的工训:加强沟通、加深理解、扩大分享!
  20. centos7在线安装英伟达显卡驱动的方法

热门文章

  1. 有道翻译 翻译功能的功能实现
  2. Hazelcast本地安装
  3. 空格变成问号的怪问题
  4. 华为交换机三种模式的理解
  5. 回归云平台的本质,通过平台+应用模式实现软件资源线上共享
  6. Windows 10与微软公有云Azure
  7. IEEE Access 算法 伪代码排版出错
  8. 计算机开不了机反复重启,电脑一直重启就是开不了机怎么样解决
  9. “D语言风采不再”的说法言过其实
  10. 什么是H5页面及又该如何制作?