社区计算机视觉课程文档

3D 数据的表示

Hugging Face's logo
加入 Hugging Face 社区

并获得增强文档体验

开始吧

3D 数据的表示

根据应用的不同,可能会使用多种不同的 3D 数据表示方法。这里我们将概述一些最常见的表示方法。

点云

点云通过 3D 空间中的点列表表示数据,包含它们的坐标,以及其他相关的特征。这些点可以分布在物体的表面上,也可以分布在物体的内部。点云通常通过 3D 扫描技术生成,例如激光雷达。它们缺乏关于连接的信息,这使得难以确定物体的表面及其拓扑结构。

网格

网格在计算机图形学中很常见,它将物体的表面表示为 (通常为) 三角形面的集合,连接三维空间中的顶点。其他信息,如法线、颜色或纹理坐标,可以与顶点或面相关联。特别是当使用纹理时,它们为存储实体对象提供了一种非常有效的方法,并且通常用于游戏和其他计算机图形应用程序。

Python 的 trimesh 包包含许多用于处理网格数据的有用函数,特别是加载和保存常见数据格式。

体积数据

体积数据通常用于编码有关透明物体的信息,如云和火。从根本上说,它采用函数的形式f(x,y,z) f(x,y,z) 将空间中的位置映射到密度、颜色以及其他可能的属性。一种简单的表示这种数据的方法是体积网格,其中每个点的在数据通过包含它的体素的八个角进行三线性插值找到。

正如将在后面的 NeRF 章节中看到的那样,体积表示也可以有效地用于表示实体对象。还可以使用更复杂的表示,例如小型 MLP 或复杂的哈希网格(如 InstantNGP 中使用的)。

隐式曲面

有时,体积表示的灵活性是可取的,但物体的表面本身是感兴趣的。隐式曲面就像体积数据,但其中函数f(x,y,z) f(x,y,z) 将空间中的每个点映射到一个数字,而表面是该函数的零点。为了计算效率,要求该函数实际上是一个带符号的距离函数 (SDF) 是有益的,其中该函数f(x,y,z) f(x,y,z) 指示到表面的最短距离,物体外部的值为正,内部的值为负(此符号是一个约定,可能会有所不同)。保持此约束更难,但它允许使用称为球体追踪的算法更快地计算直线与表面的交点。

< > 在 GitHub 上更新