前言

网上的关于体素(Voxel)、网格(Mesh)和点云(Point Cloud)的资料比较分散,而它们又是三维重建中很基础且重要的内容。故写了一篇文章总结了一下网上的相关资料。

什么是体素(Voxel)?

一个三维空间中的物体在计算机中可以有不同的表达形式,图a是用点云(Point Cloud)表达,图b是用体素(Voxel)表达,图c是用网格(Mesh)表达

体素

二维的图片可以用一个个像素来表示,将二维图片看成一个$n\times n$的矩阵,则矩阵中存储的每一个数就是一个像素。如果这个矩阵仅存储0和1,那就有一张黑白的图片;如果这个矩阵每个数都是8位无符号数,那么就有了一张灰度图像。

三维中的物体也可以用同样的思想来表示,即将一个三维的物体看成$n\times n\times n$的矩阵,矩阵中存储的每一个数就是一个体素。同样的,这个体素可以只有1位,也可以是8位或32位数。

image-20240808143801248

网格

多边形网格,也被称为“Mesh”,这里简称为网格,是计算机图形学中用于为各种不规则物体建立模型的一种数据结构。现实世界中的物体表面直观上看都是由曲面构成的,而在计算机里,曲面是由无数个小的多边形面片去组成的。Mesh既可以由三角形组成,也可以由其他平面形状如四边形,五边形等组成。而三角网格是最常用的一种。下面是几个由三角形网格表示的三维模型:

img

img

三角面片在计算机中存储的时候只需要存储其的三个顶点就可以了,一般是将所有顶点的$(x,y,z)$坐标存为一个数组,然后每个面片就可以用三个数组索引来表示。

假设有这样的一个顶点数组:

索引 1 2 3 4
坐标 $(1,2,3)$ $(4,5,6)$ $(7,8,9)$ $(10,11,12)$

那么一个由点$(1,2,3)、(4,5,6)、(10,11,12)$的面片就可以以索引$1、2、4$来表示。

点云

点云就是点的集合,在最基础的形式中,它是一个包含多个三维坐标点$(x,y,z)$的集合。当然,也可以给这些点加上颜色信息、强度信息等附加信息。但它们本质都是一组点的集合,可以表示为$(\text{point}_1,\text{point}_2,\text{point}_3,\cdots)$。

《三维点云处理》学习笔记(5)Deep Learning for Point Cloud - 知乎