3dgs 知识解析
3DGS(3D gaussian splatting)
一言以蔽之:3DGS是将三维空间用3D高斯椭球建模,并且通过splatting的方式映射到一个二维平面上。

一 sfm初始化稀疏点云
SfM初始化稀疏点云是重建三维场景的第一步,其目的是从一组无序的二维图像中,恢复相机的姿态以及场景中稀疏的三维点集(云)
1. 特征点检测与描述
在每张输入图像中检测具有代表性和可重复性的2D特征点(用SIFT和SURF)
为每个检测到的特征点生成一个描述符,这是一个紧凑的数值向量,用于唯一标识该特征点
2. 特征点匹配
对于每一对图像,通过比较它们各自的特征点描述符来找出匹配点对,即在两张图像中对应于场景中同一物理点的2D特征点
- 最近邻匹配:找到描述符距离最近的匹配点
- 比率测试:如果最近邻与次近邻之间的距离比率低于某个阈值,则认为该匹配有效,以消除歧义
- RANSAC:使用RANSAC算法来剔除错误的匹配点,并估计图像间的几何关系
3. 两视图几何
在至少两张图像之间建立几何关系
计算本质矩阵或基础矩阵:
对于一对匹配的图像,通过这些匹配点可以计算出本质矩阵
这些矩阵编码了两幅图像之间的相对旋转和平移信息
如果计算得到本质矩阵
可以在下面极线几何部分找到具体说明
4. 三角测量
一旦确定了两张图像的相对相机姿态,就可以对匹配的2D特征点进行三角测量,从而恢复它们在三维空间中的坐标
三角测量利用了两个相机中心和匹配的2D点构成的光线在三维空间中相交的原理,计算出对应三维点的准确位置
详细可参考下面的详解三角检测方法部分
极线几何
对于场景中的一个三维点
三维点

这个约束可以用以下两个矩阵表示:
在不考虑相机内参的情况下:
基础矩阵
在考虑向量内参的情况下:
本质矩阵
说明
以左侧相机为参考系:设此时
那么右侧相机坐标系中,
那么左右两点,分别在图像上面的投影为:
代入上文关系得到:
我们可以将上式重新整理为:
为了消除等式右边的加法项
观察等式左侧的向量
因此,我们用向量
这个等式在几何上被称为共面性约束。它表明向量
为了得到矩阵的表达式,我们将上述点积和叉乘运算转换为矩阵运算。
一个向量
我们可以立即得出结论:
本质矩阵 的分解
本质矩阵
详解三角检测方法
有如下已知条件和待求目标:
已知
通常,我们将第一个相机设置在世界坐标系的原点,其姿态是单位矩阵和零向量
第二个相机的位姿是相对于第一个相机的,由旋转矩阵
为了简化推导,我们直接在归一化相机坐标下进行,忽略相机内参
匹配的图像点: 一对匹配好的、归一化后的齐次坐标点
待求
三维点坐标
几何直观
第一个相机的光心
直接线性变换 (DLT) 方法
我们从相机的投影方程入手。一个三维点
这里的
对于相机1
投影矩阵是
对于相机2
投影矩阵是
现在,我们将相机1得到的关系
这个方程中有两个未知数(深度
构建方程组
由投影方程
代入投影矩阵
将两个相机的投影矩阵
点
代入得到矩阵
求解
我们理想状态下,方程
然而,由于实际数据中存在噪声和误差,通常
奇异值分解
当奇异值按降序排列时,矩阵
较大的奇异值对应的
最小的奇异值对应的
当一个奇异值非常接近于零时,它对应的
即对矩阵
解
最后,将解出的齐次坐标
优化方法
DLT方法虽然直接,但它最小化的是一个代数误差,不具有明确的几何意义,因此对噪声比较敏感。更精确的方法是最小化重投影误差 (Reprojection Error)。
- 以DLT的解作为初始值。
- 将这个三维点
分别投影回两个相机,得到投影点 和 。 - 计算投影点与观测点之间的距离(误差):
- 使用Levenberg-Marquardt等非线性优化算法,调整三维点
的坐标,使得这个总误差最小
手性约束检查
一个物理上有效的重建点必须位于两个相机的前方。这意味着该点在两个相机坐标系下的深度(Z坐标)都必须为正。
检查条件:
- 对于相机1,要求
。 - 对于相机2,点在相机2坐标系下的坐标是
。要求 的第三个分量为正。
在计算出
二 基于点云生成3D高斯椭球集
何为3D高斯椭球
给定一个三维高斯分布(三维正态分布):
给定中心:
这个公式即可以用来表示概率,也可以用来定义一个“软体积”或者说“模糊体积”的感知范围
我们知道:
且
令
设
那么有约束关系:
也就是说,
为何在三维空间中使用3D高斯椭球建模
1. 3D高斯在仿射变换下仍为3D高斯(仿射不变性)
定义
设有三维高斯分布的随机向量:
对其进行仿射变换:
则
证明
对于仿射变换后的随机变量
均值:
协方差:
因此:
该变换作用于高斯分布后,不会改变其指数函数的结构,因为:
几何解释
三维高斯分布可以看作一个由中心
仿射变换:
在 3D Gaussian Splatting 中的意义
在 3D Gaussian Splatting
中,每个高斯分布表示一个椭球形状的体素,其协方差矩阵常构造为:
该构造可视为对单位高斯施加仿射变换,但其本质仍为高斯分布
2. 3D高斯降维为2D后仍然为高斯
特殊形式
设三维高斯随机向量如下:
其中:
我们现在想要求二维边缘分布,需要一个比较复杂的矩阵运算:
为了积分,我们可以借助联合高斯的标准分块逆公式,写成:
这是联合高斯的分解公式。对
联合高斯的标准分块逆公式推导(*)
我们令:
则联合协方差矩阵为:
若
则联合高斯密度的二次型项为:
整理成关于
由此我们读出条件高斯分布的均值与协方差为:
最终我们得到条件分布:
球谐函数
球谐函数是一组定义在球面上的正交基函数
球谐函数通常用
这些函数与像
随着
相机与球心的连线向量的方向向量则是上文提到的
不透明度
定义
那么投影到2D高斯的不透明度
数据结构:一个高斯椭球集里面都有些什么
高斯椭球集以椭球为单位
每个椭球包含:
- 中心点坐标(3个参数)
- 法向量信息(3个参数)
- 颜色信息(3(基础0阶)+ 45(1,2,3阶)=48个参数)
- 不透明度
- 缩放矩阵(协方差矩阵中的S)(3个参数)
- 四元数(对应协方差矩阵中的R)(4个参数)
三 Splattiing过程
总的而言,就是三维高斯椭球体被投影到二维图像空间椭圆形,进行渲染。

而这种三维高斯分布,投影到二维平面后,我们可以想象到这是一个二维的高斯分布,形象一点就是这样——

具体的Splatting过程推导
1. 从世界坐标系到相机坐标系(仿射变换)
设一个3d高斯:中心(均值)为
在相机坐标系,有视图矩阵和平移向量
变换后
2. 从相机坐标系到光线空间(投影变换)
标准的透视投影公式是
定义投影变换
前两项是标准的透视除法。它将相机空间中的一个点投影到成像平面上。所有在同一条从相机原点出发的光线上的点,经过这个变换后,前两个坐标值都是相同的。这正是我们想要的“投影”效果
第三项用了点到相机中心的欧几里得距离,可以使得在任意一条光线上等距采样的点,在变换后的空间里,它们之间的距离(由第三维决定)也是等间隔的
我们可以假设,对于一个高斯椭球,在其中心
在 2D 屏幕上,直接关心
中心点坐标则直接使用
即:
3. 视口变换
在上一阶段,通过包含雅可比矩阵
这个2D高斯椭圆由两部分描述:
一个2D的均值(中心点)
一个
重要的是,此时的坐标是标准化的,与最终屏幕的分辨率无关。这个标准化的空间通常被称为NDC
在2D情况下,NDC空间通常被定义为:
x 坐标范围:
y 坐标范围:
视口变换的任务就是将NDC空间中的坐标,映射到最终要显示的屏幕像素坐标上。
例如,我们需要将NDC中
假设:
从NDC的
对于我们的高斯椭圆,我们就是用这个公式来变换它的中心点
视口变换不仅移动了椭圆的中心,还拉伸了它的形状。平移不影响协方差,但缩放会。
视口变换的缩放部分可以被一个缩放矩阵
根据仿射变换的性质,变换后的协方差矩阵
4. 光栅化

光栅化的核心任务是根据几何信息,确定最终图像中哪些像素被覆盖,并计算这些像素的最终颜色贡献
光栅化器会计算出2D高斯椭圆的轴对齐包围盒 (AABB),并计算出包围盒内的每一个像素
四、渲染过程
准备过程
首先这个准备过程并非是像素级精度的,而是将精度降到了patch级。
会进一步识别出哪些patch与特定的高斯投影相交,投影的 2D 高斯被按照其深度值进行排序,以便在后续的渲染过程中正确地处理遮挡关系
即:
对于给定的一个patch


alpha-blender
根据上面不透明度的排序,有如下计算过程:
最终不透明度 的计算:
解释了如何计算每个高斯对像素的最终不透明度贡献
五、loss比对过程

其中:
SSIM 指数将图像质量评估分解为三个主要组成部分:
(1)亮度比较:
(2)对比度比较:
(3)结构比较:
最终的 SSIM 值是这三个分量的乘积:
六、基于梯度自适应的点云分布方式
点密集化
视图空间中具有较大位置梯度的高斯
在未充分重建的区域克隆小高斯
过度重建的区域分裂大高斯
点的剪枝
移除冗余或影响较小的高
几乎是透明的高斯(
低于指定阈值)在世界空间或视图空间中过大的高斯







