基本概念
当我们通过3D扫描设备对物体进行扫描后,会得到三维点云,通过表面建模,我们会重建出物体的3D模型。如果想得到完整的物体的3D模型,需要对物体进行多个角度的扫描并通过拼接算法重建。经过处理得到的3D模型,在很多场景中都有大量应用,下图是一些典型的应用。
几何处理管线
最低层级的处理如上图所示,这个阶段主要针对输入数据做处理,可以类比2D图像处理中的滤波降噪等过程。
中层级处理主要是对模型进行各种优化,比如由于初始得到的模型mesh数量过多,需要进行模型简化以便实时应用处理等。
最高层级的处理主要是针对具体的3D对象,主要包括模型的变形和修改编辑,提取形状结构,进行动画模拟等。
网格模型
和网格模型很类似的概念是图,可以参考数据结构中的Graph结构,它表达了顶点和边之间的关系。Mesh的数据结构中,常用的结构式三角形Mesh,它以三角形为一个面。在内存中,Mesh表示为三角形和顶点的集合。上图例子中,三角形面f1是由顶点2,3,1组成,对应顶点的位置在VERTICES中可以查到,三角形面f1的顶点顺序不同,所代表的三角形面是不同的,比如同样是这三个点,但是顶点顺序不同,可能对应的三角形面的正反面(法向量朝向)是不同的。
表面建模中,很多时候都是针对流形进行处理,比如找到局部法向量等操作。关于流形的说明,可以参考以下链接(翻译不太准确,但有较为直观的例子):
【Manifolds】#1流形是一个与 R^d 局部同胚的拓扑空间a topological space which is locally homeomorp_哔哩哔哩_bilibili
上图是一个显式和隐式建模的对比, 可以看到,当某些位置(图中红框标记)得到的点云不均匀或者有大量点丢失的情况时,使用显式建模效果并不好,而隐式建模能够避免这些问题。
显式建模
显式建模不会对数据点进行裁切操作,具体点的连接规则有很多种。这种方法不考虑法向量,如果点云较为稀疏,则得到的结果也较为稀疏。另外,对于处理靠的很近但很薄的两个表面,显式建模可能会得到错误的结果。
Voronoi图是连接Delaunay三角形中相邻的三角形对应的外接圆圆心之后形成的图。Voronoi图将平面或者空间划分成了较为均匀的小平面或空间。
下图是一个实际案例,地形表面重建。
隐式建模
显式建模相当于将离散点直接连接,隐式建模相当于是拟合出一个隐函数的方程,用这个函数表达物体表面。
如何找到这个函数f(x),可以看下图:
(a)点云S,里面有n个点。(b)我们认为点云是对等值面的一个采样,因此可以找到一个f的值域空间分布(前面提到的标量场),图中的红色表示在空间外,黑色表示在零等值面上,绿色表示负距离 (c) 要找到一个函数簇,它近似估计了零等值面。
基函数可以自行选择,比如上图中r的三次方,选定基函数后,实际我们想要得到的就是权重参数w。
如上图,黑色曲线上的点(蓝,红,绿,紫,橙)表示观测到的点(),我们认为这些观测到的点就是物体表面的点。设计一个基函数(比如r的三次方),以及权重参数(观测量有多少个就有多少个权重参数),得到标量函数F(x)。有了多个观测点的时候,就能得到多个线性方程组。解出权重后,可以通过F(x)找出零等值面的点。
关于径向基函数插值的更详细的说明,可以自行百度或参考下面的文章:
RBF插值详解文章浏览阅读5.8k次,点赞5次,收藏46次。对于rbf插值中,一般控制点数量越多越密集,插值精度也就越高,但是随之而来的插值矩阵Φ\PhiΦ增大,计算量增大,模型训练(权值系数计算)效率变低,正所谓“No Free Lunch”。其次,不同的基函数在同样的数据上插值的表现也有所差异,因此需要选择最优的基函数进行插值计算。_径向基函数插值https://blog.csdn.net/qq_39784672/article/details/127656592
总结隐式建模的过程如下: