[Point Cloud] 点云&深度学习专题(1):点云数据的基本概况

点云&深度学习专题(1):点云数据的基本概况

前言:

点云是一种常见的3D形状的表达方式,我们可以通过点云来表示一个物体或者一个场景。通过不同角度的观察点云,我们通过人眼可以分辨出点云所代表的物体的类别、猜测物体可能蕴含的功能以及通过不完整的点集来还原出物体本来的形状。近些年来,科研工作者对点云的分析甚至延伸到了时间维度,有一些文章通过分析点云流(Point Cloud Flow)来判断街道上车辆的行驶方向。总而言之,点云是一种方便的3D表达方式,而且还包含着大量值得挖掘的信息。

点云获取和点云数据缺陷:

目前比较流行且方便的点云获取方式主要有两种,RGBD深度相机和LiDAR激光雷达。二者的优劣在这里就不多讨论了,因为这个专题我们只关注点云本身。对于一些做室内SLAM和物体&场景点云任务的小伙伴应该对Kinect2深度相机比较了解,而更加关注自动驾驶的同学应该对LiDAR感兴趣。毕竟“钢铁侠”曾经表过态,纯靠视觉就可以无敌,但是……LiDAR真香。
深度相机 激光雷达
如同相片中会有许多噪点一样,点云数据也存在着不可避免的误差。这种数据上的误差可以分成两种:第一种为测量误差:每一种传感器都会在传输数据上产生“噪声”,导致在获得的点云中存在本来不该出现的点,或者由于量程的问题导致本来应该出现的点却捕捉不到;另一种为本质误差:无论是深度相机或者是激光雷达都无法穿透物体,换句话说,就是因为测量介质不能穿透物体因此才可以获得深度信息。这种本质将会导致每一帧点云都是不完整的,因为物体无时无刻都在进行自遮挡或者物体间的相互遮挡,这种原因导致的点云不完整我把它称为本质误差。

几何表达是为了什么?:

虽然初始获得的点云(Raw Point Cloud)是包含了众多缺陷的,但是这并不影响点云这类数据的优势。相对于体素(Voxel)表达方式来说,点云的储存空间占用更加小,而且在旋转之后仍然可以很好的表达几何信息。相对于网格(Mesh)表达方式来说,点云更加容易获取,而Mesh没有比较直接的获取方式。另外一方面,点云和其他3D格式之间的转换也是相当方便的,做过SLAM的小伙伴应该非常熟悉啦。除此之外还有一种隐式的表达方式,就是通过函数来表示一个点是否落在物体表面上。以上这四种方式在EG 2020会议上的“Learning Generative Models of 3D Structures”中都有提及,这篇文章应该是ZHANG Hao老师他们组里关于三维生成模型的综述和总结,可以在这篇文章里学到不少有用的知识,感兴趣的小伙伴可以深究。
在这里插入图片描述
点云,它的本意是一群点的集合,也可以把它叫做一个点集。每一个点都是集合里的基本元素,把它携带的信息抽象为 x x x,这里的 x x x是一个矢量,代表着一个点中所包含的特征。一般情况下 x x x中所包含的信息包括两类:坐标和颜色。换言之, x x x是一个6维的向量。在可视化的时候,一般将坐标渲染成一个点,按照数值放在世界坐标系下,并且把该点着色为其相对应的颜色。这样人眼就能通过这个6维向量来分辨这个点云代表着什么物体(Classification&Detection)?它的细分结构是什么样子的(Segmentation)?它可能执行的功能是什么(Function)?它完整的样子可能是什么(Reconstruction)?如果它动起来,下一秒这些点会在哪里(Registration&Prediction)?总之,我们通过这些坐标和颜色做的其实只是一件事,叫做对点云的“理解”(Understanding)。这也是我们希望从低等几何表达向更加智能化的任务迈进的必经过程。

在这里插入图片描述
我们人眼和大脑可以不是那么费力的完整这些工作,但是科研工作者们希望创造一个非常棒的东西来代替我们实现这些功能,并且服务于社会的方方面面。就目前而言,科研大佬们开始用深度学习的方法初步探索这些可能性。相对于2012年在CV领域上的爆炸性成果,对于点云而言,这个时间晚了5年。也就是从2017年开始(PointNet发表年份),点云+深度学习的可能性才真正开始被挖掘出来。这些内容,会结合我自己的研究方向在之后的专题慢慢梳理。

点云分析的工具:

针对点云这种成熟的数据格式,自然存在着一些可以直接利用的工具。PCL(Point Cloud Library) 是基于C++的点云运算库。其中包含着非常多且成熟的运算,包括:滤波、特征提取、点云配准、点云搜索、点云分割、RanSaC算法、平面提取、点云识别、点云格式转换以及点云可视化。可以说这个库,除了难装,没别的缺点。 全平台都是支持的。
PCL
另外需要提到的就是一个轻量级的可视化工具,就是vtkplotter,这是一个python的库。用来做点云可视化是绰绰有余的,它也有许多其他的强大功能。详情可以在github上搜到,这里就不多说了。

当然啦,点云本质上是点,处理起来并不是什么难事。基本想要做的变换和算法在各个博客里都写的很详细了,手撸代码的难度也没有那么困难。numpy和pytorch对于用矩阵表示的点云处理起来更是得心应手。所以,也可以自己积累一些工具,毕竟自己的代码用起来比较熟悉。

结语:

这篇是点云专题的第一篇文章。自从入学就一直在用深度学习方法和点云打交道,也算是比较熟悉的一个领域了。接下来的点云专题主要写一写点云+深度学习的东西,这篇只是一个开始,介绍一下点云的基本盘。目的就是总结一些常识性的东西以后复习起来方便,也可以和小伙伴们交流。如果有错请指正,如果没写错也可以讨论一下开阔思路。

  • 9
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值