简介
什么是点云?
点云是一组独立点的集合,每个点代表三维空间中表面的一部分样本,用 [x, y, z] 坐标表示。除了空间坐标外,这些点通常还带有其他属性,如法线、RGB 颜色、反照率和双向反射分布函数 (BRDF)。
这里,反照率是衡量表面反射多少光的指标。从本质上讲,它是反射光与照射到表面的入射光之比。简单来说,它描述了入射光有多少被反射回来。高反照率表示表面反射大量光,例如雪,而低反照率则表示表面吸收更多光,例如沥青。
BRDF 是一个函数,描述了光如何在不透明表面上散射或反射。它详细说明了光在表面交点处反射的方式,考虑了入射光方向和出射方向。它提供了表面反射特性的数学描述,包括光泽度、粗糙度和反射光在不同角度上的分布等因素。这些属性在各种应用中发挥着至关重要的作用,例如建模、渲染和场景理解。
虽然点云数据的概念并不新鲜,多年来一直是图形和物理模拟等领域的组成部分,但由于两个主要趋势,其重要性显著上升。首先,经济高效且用户友好的点云采集设备的广泛可用性大大提高了可访问性。
增强现实和自动驾驶汽车进一步突显了它们在当今技术领域中的相关性。
现在我们知道了什么是点云,我们可以用它们做什么呢?
3D 点数据主要用于自动驾驶功能,但现在其他使用计算机视觉的 AI 模型(如无人机和机器人)也使用激光雷达来获得更好的视觉感知。激光雷达是一种遥感过程,它收集用于创建物体和环境的 3D 模型和地图的测量数据。激光雷达使用紫外线、可见光或近红外光,通过测量信号从物体反射并返回到扫描仪所需的时间来测量空间关系和形状。
生成和数据表示
我们将使用 Python 库 point-cloud-utils 和 open-3d,可以通过以下方式安装:
pip install point-cloud-utils
我们还将使用 Python 库 open-3d,可以通过以下方式安装:
pip install open3d
或一个较小的仅限 CPU 版本
pip install open3d-cpu
现在,首先我们需要了解这些点云存储的格式,为此,我们需要查看网格云。
为什么?
point-cloud-utils
支持读取常见的网格格式(PLY、STL、OFF、OBJ、3DS、VRML 2.0、X3D、COLLADA)。- 如果它可以导入到 MeshLab,我们就可以读取它!(来自他们的自述文件)
文件类型根据其文件扩展名推断。支持的一些扩展名包括:
PLY(多边形文件格式)
- 一个简单的 PLY 对象由一组用于表示对象的元素组成。它包含一个顶点 (x,y,z) 三元组列表和一个面列表,这些面实际上是顶点列表中的索引。
- 顶点和面是元素的两个示例,PLY 文件的大部分由这两个元素组成。
- 还可以创建新的属性并将其附加到对象的元素,但应以在遇到这些新属性时不破坏旧程序的方式添加它们。
STL(标准细分语言)
- 此格式使用三角形逼近实体模型的表面。
- 这些三角形也称为面,其中每个面由一个垂直方向和三个代表三角形顶点的点来描述。
- 但是,这些文件没有颜色和纹理的描述。
OFF(对象文件格式)
- 对象文件格式 (.OFF) 文件用于通过指定模型表面的多边形来表示模型的几何形状。多边形可以具有任意数量的顶点。
- 它支持用于交换的对象的 ASCII 文本版本,以及用于提高读取和写入效率的二进制版本。
- 它也称为 .obj 格式。
3DS(3D Studio)
- 具有 .3ds 扩展名的文件表示 Autodesk 3D Studio 使用的 3D Studio 网格文件格式。
- 3DS 格式使用二进制文件结构,与基于文本的格式相比,它可以实现更快的速度和更小的文件大小,数据在文件中组织成块。
- 这些块存储形状、灯光和查看信息,这些信息共同表示三维场景。
X3D(可扩展 3D 图形)
- X3D 是一种基于 XML 的 3D 图形文件格式,用于呈现 3D 信息。它是一个模块化标准,并通过多个 ISO 规范定义。
- 该格式支持矢量和光栅图形、透明度、照明效果和动画设置,包括旋转、淡入淡出和摆动。
- X3D 的优势在于可以编码颜色信息(与 STL 不同),这在彩色 3D 打印机上打印模型时使用。
DAE(数字资产交换)
- 这是一个 XML 模式,它是一个开放标准的 XML 模式,DAE 文件由此构建。
- 此文件格式基于 COLLADA(协作设计活动)XML 模式,COLLADA 是一种用于在图形软件应用程序之间交换数字资产的开放标准 XML 模式。
- 该格式最大的卖点是其跨多个平台的兼容性。
- COLLADA 文件不受限于一个程序或制造商。相反,它们提供了一种存储 3D 资产的标准方法。