点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

本期我们将一起讨论如何将RGBD图像转换为3D空间中的点

我们将介绍什么是相机的内参矩阵,以及如何使用它将RGBD(红色、蓝色、绿色、深度)图像转换为3D空间。获取RGBD图像的方式有很多种,例如Kinect相机之类的系统,这些系统通过测量红外光的飞行时间来计算深度信息。但也有传闻称iPhone 12将LiDAR集成到其相机系统中。对于无人驾驶汽车而言,最重要的数据来源与汽车上的LiDAR以及标准RGB摄像头。在本文中,我们不会详细介绍如何获取数据。

图1 :(左)以u,v坐标表示的图像平面。每个像素都有指定的颜色和深度。(右)笛卡尔坐标x,y,z中的3D视图。

如果要了解3D环境中每个像素对应的内容,那么了解相机的属性就非常重要。相机的关键参数之一是焦距,它帮助我们将像素坐标转换为实际长度。大家可能看到过像“ 28 mm”这样的焦距,这其实是镜头与胶片/传感器之间的实际距离。

通过简单的几何关系(“相似的三角形”),我们可以轻松地从每个像素的u和d得出位置x。下图仅显示了x和u,但对y和v可以完全相同。对于针孔相机模型,x和y方向的焦距相同。对于带镜头的相机这个结论可能就不一定成立了,我们将在以后的文章中对此进行讨论。

图2:显示xz平面的投影(顶视图)。左侧是针孔照相机,镜头前有一个物体(从上方是相同的蓝色球),并在屏幕上显示。世界坐标系与照相机对齐,因此z轴延伸到照相机所看的方向。在右侧,从左侧开始的两个部分重叠的三角形分开以更加清楚。

从类似的三角方法中,我们立即获得:

通常fₓ和fᵧ是相同的。但是对于例如图像传感器的非矩形像素,镜头变形或图像的后处理,它们可能会有所不同。

综上所述,我们可以仅使用几何参数编写一段很短的Python代码,以将屏幕的坐标系转换为笛卡尔坐标系。

def convert_from_uvd(self, u, v, d):d *= self.pxToMetrex_over_z = (self.cx - u) / self.focalxy_over_z = (self.cy - v) / self.focalyz = d / np.sqrt(1. + x_over_z**2 + y_over_z**2)x = x_over_z * zy = y_over_z * zreturn x, y, z

在代码中(cₓ,cᵧ)是摄像机传感器的中心。请注意相机属性pxToMetre常数,利用这些参数可以在一定比例尺下以3D形式精确地显示图片。

当然,有一种更通用的方法可以完成所有这些操作。输入内参矩阵!这是一个包含先前讨论的相机属性(相机传感器的焦距和中心以及偏斜)的单个矩阵。在这里,我们要讨论如何使用它为我们完成上述转换。在下文中,我们将大写粗体字用于矩阵,将小写粗体字用于矢量,将普通脚本用于标量。

接下来,我们介绍齐次坐标。齐次坐标有助于我们将各种不同变换(平移,旋转和倾斜)编写为具有相同维数的矩阵。

以这种方式考虑它。在图2中,我们可以将图像平面移动到任何其他距离,例如从fₓ→2fₓ,并注意我们将其平移的因子h = 2。移位引入了简单的缩放比例,我们总是可以通过将u和v除以h作为返回值。

现在我们可以在齐次坐标上定义各种不同的操作,但是这些操作都保持最后一个维度值不变。

旋转矩阵R,平移矢量t和本征矩阵K组成了相机投影矩阵。它定义为从世界坐标转换为屏幕坐标:

注意[ R | t ]表示块符号,表示我们将R和列向量t = transpose {t₀,t₁,t 2}连接起来,或者换句话说,将其添加到R的右侧。如果我们想以另一种方式进行转换,则会遇到问题。我们对3x4矩阵求逆。但是大家会发现该矩阵的方阵扩展是可以求逆的。为此,我们必须在左侧增加1 / z(视差)才能满足方程式。4x4矩阵称为满秩本征/非本征矩阵。

让我们用最简单的情况验证上面所说的:相机原点和世界原点对齐,即Rt可以忽略,偏斜S为0,图像传感器居中。现在,相机矩阵的逆就是:

只看第一行就可以得出与开始时(方程1)完全相同的结论。使用等式的第二行和第三行对y和z同样适用。对于更复杂的内在矩阵,大家需要在进行此转换之前计算逆。由于它是一个上三角矩阵,因此有很多简单的办法可以处理这个问题:

现在,我们拥有了将深度图或RGBD图像转换为3D场景的所有工具,每个像素代表一个点(图3)。我们在此过程中有一些假设。其中之一是简化的相机模型:针孔相机。但是在现实世界中使用的相机会使用镜头,并且通常只能通过针孔模型进行估算。

图3:根据深度图(灰度)计算出的点云(绿色)

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

从深度图到点云的构建方式相关推荐

  1. ORB-SLAM2系统的实时点云地图构建

    ORB-SLAM2系统的实时点云地图构建 这篇博客 点云地图构建的流程 代码介绍 点云地图构建类对象 小调整 获取关键帧 点云地图构建与叠加 在地图中设置当前相机位置 点云地图到Octomap的转换 ...

  2. 第二讲 从图像到点云 笔记

    本讲中,我们将带领读者,编写一个将3D图像转换为3D点云的程序.该程序是后期处理地图的基础.最简单的点云地图即是把不同位置的点云进行拼接得到的. 当我们使用RGB-D相机时,会从相机里读到两种数据:彩 ...

  3. 使用Azure云原生构建博客是怎样一种体验?(下篇)

    点击上方蓝字关注"汪宇杰博客" 接上篇<使用Azure云原生构建博客是怎样一种体验?(上篇)> DNS Azure DNS 是一套分布全球的域名解析服务.具有超高可用性 ...

  4. 阿里云刘强:无影云电脑构建云上安全办公室

    简介:无影云电脑提供触手可及的算力,在云办公.外企办公.分支机构办公.软件开发.人力外包等场景构建云上安全办公室. 2021年12月21日,阿里云弹性计算年度峰会在上海正式举行,并通过全实景进行直播. ...

  5. 基于阿里云 MaxCompute 构建企业云数据仓库CDW

    在本文中阿里云资深产品专家云郎分享了基于阿里云 MaxCompute 构建企业云数据仓库CDW的最佳实践建议. 本文内容根据演讲视频以及PPT整理而成. 大家下午好,我是云郎,之前在甲骨文做企业架构师 ...

  6. 如何在阿里云上构建一个合适的Kubernetes集群

    摘要: 声明 本文主要介绍如何在阿里云上构建一个K8S集群的实践,只是作为参考,大家可以根据实际情况做出调整. 集群规划 在实际案例中发现,有不少同学使用了很多的小规格的ECS来构建K8S集群,这样其 ...

  7. “云联邦”构建连云成片、无缝混合的一朵云

    摘要:华为云Stack通过联邦认证.联邦目录.联邦流程构建云联邦技术,帮助企业以较低的成本实现混合云,企业内连云成片,资源共享,达成降本增效的目的. 本文分享自华为云社区<[华为云Stack][ ...

  8. 多传感器融合定位五-点云地图构建及定位

    多传感器融合定位五-点云地图构建及定位 1. 回环检测 1.1 基于Scan Context 1.2 基于直方图 2. 后端优化 2.1 后端优化基本原理 2.2 李群.李代数基本知识 2.3 李群. ...

  9. EMQ 助力阿里云洛神云网络构建新一代“亿级并发、百万级吞吐”NLB 网络型负载均衡系统

    万物智联的数字化时代,我们正走在从"数据量变"到"连接质变"的道路上.在日益丰富的物联网应用场景中,实现海量设备与云端之间双向通信连接,分析并从中获得实时洞察成 ...

最新文章

  1. matlab 求解黄金分割率
  2. hdu4810 Cn中取i异或和
  3. 核心概念——节点/边/Combo——内置节点——Triangle
  4. 【转】符串搜索工具及XenoCode字符串自动解密工具
  5. java –cp_Java –缺少字体–崩溃的应用程序!
  6. 使用explain查询select查询语句执行计划
  7. LIRe 源代码分析 7:算法类[以颜色布局为例]
  8. 让你彻底明白什么叫游戏引擎(2)
  9. 数据库链接池c3p0的配置
  10. 台式计算机可以发射无线网络,台式电脑无线网卡怎么发射WIFI信号!
  11. 中级计算机证书知识,计算机中级考哪些内容
  12. ASCII码、Unicode和UTF-8之间的转换
  13. 电脑无法获取服务器信息,电脑无法获取IP地址怎么办?原来只需四招就搞定
  14. 人工智能-机器学习-特征工程
  15. 小米手机刷android one,小米手机(Mi One)刷机教程详解完整版 (刷MIUI官方刷机包)...
  16. 奥西tds300服务器维修,奥西Océ TDS300 驱动
  17. STM32之ADC的学习心得(std+HAL)
  18. Meting-JS APlayer丨网页音乐播放器
  19. EA周报 | 字节跳动上线搜索引擎;电影《哪吒之魔童降世》累计综合票房破15亿;鸿蒙系统首发设备欲屏蔽开机广告...
  20. c盘所有的html文件全删,电脑c盘program files(x86)文件夹可以删除吗

热门文章

  1. 到底是什么特征影响着CNN的性能?
  2. 人类间谍快“混”不下去了,CIA 打算用 AI 替代他们
  3. 资源 | 想用Python学机器学习?Google大神替你写好了所有的编程示范代码
  4. 一款高颜值的 MySQL 管理工具
  5. 为什么汉字不能当密码,假如用汉字做密码,又会怎样?
  6. 并发测试神器,模拟一次超过 5 万的并发用户
  7. 这是我见过最通俗易懂的 装饰者模式 讲解了!
  8. JAVA多线程之volatile 与 synchronized 的比较
  9. Java:如何更优雅的处理空值?
  10. 深度学习框架盘点和实践!