文章标题:
本周三维重建前沿:3D高斯溅射算法解析
文章内容:
大家好,欢迎来到《本周所学分享》的第十二期。我是一名刚读完大二的人工智能爱好者,前不久自学了3D Gaussian Splatting(3DGS),觉得颇为新奇。撰写此文的缘由是网上多数关于3DGS的文章较为晦涩,我自己学习时也查阅了大量论文、博客与视频,所以想结合自身学习过程,写一篇让所有人都能理解的文章。我不会预设你具备任何机器学习或数学基础,即便你是刚涉足人工智能领域的新手,也能看懂此文。若你觉得文中有任何不对、欠佳或不清楚之处,欢迎在评论区指出,这对我帮助极大。
此处先放上原论文:
" />https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/3d_gaussian_splatting_low.pdf并且本文内容参考了一个B站视频,文中诸多内容借鉴该视频,感谢这位大佬。
https://www.bilibili.com/video/BV1cz421872F/本周三维重建前沿:3D Gaussian Splatting算法解读
目录
一、何为三维重建啊
-
三维重建的定义
-
三维模型的表示方式
1.1 点云
1.2 体素
1.3 神经网络
1.4 3D高斯
二、何为3D高斯啊
-
位置
-
协方差矩阵
-
透明度与球谐系数
三、如何获取3D高斯的信息啊
四、何为Splatting啊
-
2D高斯的位置
-
2D高斯的协方差矩阵
-
2D高斯的颜色
五、自适应密度调控
六、下期预告
上期文章链接:
https://blog.csdn.net/weixin_48978134/article/details/132740002本周三维重建前沿:3D Gaussian Splatting算法解读

一、何为三维重建啊
本章将介绍三维重建的基础知识,若你已对三维重建有一定了解,可直接跳转至下一章。
1. 三维重建的定义
三维重建通常指借助一些二维数据(像照片、视频等)来还原三维场景。具体而言,可类比人眼来看。人眼能看见东西,是因为外部光线投射到视网膜上,视杆和视锥细胞将光线强度、颜色等信息传递给大脑,可眼睛只能获取二维画面,无法感知物体的三维结构。那为何我们看东西会有立体感觉呢?主要有两点原因。
其一,人有两只眼睛,看场景时,两只眼睛看到的画面存在细微差异,此差异称为“视差”。这两幅画面经大脑处理后会合成一幅,让人感觉画面是立体的。对于计算机来说,要合成物体的3D模型,需从至少两个不同角度拍摄物体照片来模拟视差。通常,为获良好重建效果,仅用两张照片远远不够,常需几十张甚至几百张不同角度的照片来还原场景。
其二,远处物体看起来较小,近处物体看起来较大。同一物体,离我们远的一端看起来较小,近的一端看起来较大,此现象叫“透视”。我们能依据透视关系判断物体与我们的距离,这种距离感会让画面显得立体。三维重建时也有专门算法处理透视,后文会提及。
综上,三维重建主要有两个关键:一是多张不同角度的照片,二是对图片中透视关系的处理。但三维重建涉及的不止这些,还有三维模型的表示方式等……
2. 三维模型的表示方式
三维重建中表示三维模型的方式与三维建模软件(如3ds Max、Maya、AutoCAD等)有很大不同。做过建模、动画或设计的朋友应知晓,三维建模软件里的模型由大量顶点、边和面构成。比如Maya官网宣传片中展示的《霍格沃茨之遗》里某角色的模型:

仔细看绿色物体,会发现布满的绿色线是构成物体的边。三维建模软件将物体表示为面数极多的多面体,面数越多,物体表示越精细。
在三维重建中,用顶点、边和面表示三维模型是可行的,此表示方式称为“多边形网格”。其优点是能让重建的三维模型与诸多建模软件无缝衔接,便于后续编辑应用。但它也有很大缺陷。多面体的一个面由多条边组成,每条边依赖两个顶点,面数多的场景中,点、边、面间的依赖关系极为庞大复杂。为更好还原场景并降低计算量,我们期望用简洁方式表示三维模型,让每个元素相互独立。所以,这种多边形网格表示方式如今极少用于三维重建,取而代之的是以下几种更常见的表示方式……
1.1 点云
点云说白了就是一大堆点。把三维场景表示为一大堆点,并记录每个点的位置、颜色和透明度等信息。

上图是百度百科中用点云重建建筑的图片,因点数量密集,难看出单个点。
点云相较多边形网格的优势在于每个点独立,不依赖其他东西,无庞杂依赖关系。但缺点是数据量大。要表达精细模型,常需大量点,且相邻点间差别不大。比如用点云表示一面墙,墙上很多点的颜色、透明度等信息几乎相同,造成大量冗余。
1.2 体素
大家知图片由像素构成,将图片划分为许多小格子,每个格子有颜色值,有些图片格式还为格子设透明度值。体素与像素类似,把三维场景划分为大量小正方体,每个正方体有颜色和透明度等信息。体素存在的问题是,场景中大部分空间可能无任何物体,会产生大量完全透明、无信息含量的冗余体素。也有解决办法,如用稀疏体素,只记录场景中非空体素信息,忽略完全透明体素。
1.3 神经网络
神经网络是较先进现代的表示方式。大家可能听说过NeRF,即神经辐射场。NeRF用八层全连接神经网络(MLP)表示三维模型,输入是三维空间中某点坐标及观察角度,输出是该点颜色和透明度。NeRF发明者考虑到光照、材质等影响,不同角度观察物体颜色可能不同,故将观察角度作为输入一部分传递给神经网络。
神经网络一大优势是占用空间小,八层MLP占用空间比点云中几十万个点小得多。此外,重建效果也不错。
1.4 3D高斯
这是本文主角。3D高斯与点云类似,都记录位置、颜色和透明度信息,只是把点换成3D高斯。将三维场景表示为一系列3D高斯,记录其位置、协方差矩阵、透明度和球谐系数。这些具体是什么,看下一章……
二、何为3D高斯啊
想必大家听说过高斯分布。高斯分布也叫正态分布,是很常见的概率分布。若熟悉一维高斯分布,可直接跳至本章第1节。若不了解,看下图(图片来自搜狗百科):

这是高斯分布的图。图中,本周三维重建前沿:3D Gaussian Splatting算法解读





















若感兴趣,可看高斯分布公式,但无需记住或看懂:

了解一维高斯分布后,看3D Gaussian即3D高斯。描述3D高斯需四个属性:位置、协方差矩阵、透明度和球谐系数。讲解中着重分析三维与一维高斯分布的区别。
1. 位置
这是3D高斯在三维空间中的位置,对应1D高斯的均值本周三维重建前沿:3D Gaussian Splatting算法解读




2. 协方差矩阵
3D高斯的协方差矩阵对应1D高斯的标准差本周三维重建前沿:3D Gaussian Splatting算法解读

有朋友会问,1D高斯用一个数本周三维重建前沿:3D Gaussian Splatting算法解读

图中越黄越亮处概率越高,越紫越暗处概率越低。两张图均值都在原点,左图x、y、z轴方差均为1,右图x、z轴方差为1,y轴方差为2。明显右图3D高斯在垂直方向更分散,呈椭圆状。可见,单独一个数值无法表达3D高斯分散程度,需至少三个数表示三个方向不同分散程度,这三个数构成协方差矩阵对角线上的数。
此时又有朋友问,若x、y、z轴有不同方差,仅用三个数能否表达3D高斯分散程度?遗憾不能。看两张图,3D高斯关于x、y轴对称。若要创建不关于x、y轴对称的3D高斯,仅三个变量不够,需引入协方差。
协方差可看作表示两个变量相关性的数值。两变量协方差为正则正相关,一变量增加另一也增加;为负则负相关,一变量增加另一减少。上述两张图中3D高斯各方向协方差均为0。为看出协方差作用,看下图:
![9c5d893ca8344b629c2fd904593fdc75.png](https://i-blog.csdnimg.cn/direct/9c5d89