社区计算机视觉课程文档

3D 数据表示

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

3D 数据表示

根据应用的不同,可能会使用多种 3D 数据表示形式中的一种。这里我们将概述其中一些更常见的形式。

点云

点云通过三维空间中的点列表来表示数据,其中包含点的坐标以及可能存在的其他相关特征。这些点可以分布在物体的表面,也可以散布在物体的内部。点云通常通过 3D 扫描技术(例如 LIDAR)生成。它们缺乏连接信息,这使得确定物体的表面及其拓扑结构变得困难。

网格

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

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 上更新