1、简介
2、算法流程
2.1、sfm初始化稀疏点云
优化从稀疏SfM点云开始,创建一组三维高斯分布。 这里通过colmap先创建出一个初始化点云。通过一组照片就能进行估算。保持连续体积辐射场的理想特性,用于场景优化,同时避免了空白空间中不必要的计算
2.2、3D高斯椭球集的创建——位置与形状
位置信息:点云位置信息优化(x,y,z),即高斯椭球的中心点(即均值,类比于一维高斯分布(正态分布)中的均值μ)
形状信息:高斯椭球的协方差矩阵
Σ
\Sigma
Σ—-包含高斯椭球的旋转矩阵R和在各个轴缩放矩阵S。
其中
Σ
=
R
S
S
T
R
T
\Sigma=RSS^TR^T
Σ=RSSTRT,保证半正定的性质,几何意义是先将椭球旋转到与椭球世界平齐,然后沿着轴缩放,再旋转还原回去。这样处理的好处是:由于
Σ
\Sigma
Σ不能进行随机初始化,能保证
Σ
\Sigma
Σ仍保持半正定的性质,并且在一定程度也减少运算量。
2.3、3D高斯椭球集的创建——颜色与不透明度
颜色信息:点云颜色(r,g,b)—-使用球谐函数来表示,使得点云在不同角度呈现不同颜色,并有利于提高迭代效率(代码中采用4阶)。
不透明度信息:点云不透明度,密度优化
α
\alpha
α。
3、球谐函数
4、伪代码分析
M
M
M是通过SFM得到的初始化稀疏点云,也就是位置(x,y,z)。
S
S
S是协方差,决定形状;
C
C
C是颜色;
A
A
A是不透明度。
当没有收敛时进入迭代循环:
从数据集中抽取相机位姿
V
V
V和图片
I
^
\hat{I}
I^,
I
^
\hat{I}
I^是ground true。
通过光栅化的操作,输入
M
、
S
、
C
、
A
、
V
M、S、C、A、V
M、S、C、A、V得到预测的图片
I
I
I。
将预测的图片与原始图片计算loss值
L
L
L。
使用Adam优化
M
、
S
、
C
、
A
M、S、C、A
M、S、C、A。
IsRefinementIteration(𝑖)判断是否要对点的位置进行优化,避免点的数量过多,显存吃不下。
如果某个高斯的不透明度𝛼 < 𝜖,小于某个阈值,则通过pruning将这个高斯去掉。
如果梯度大于某个阈值,则对协方差进行判断,如果大于某个阈值则进行分割高斯,小于则克隆高斯,即Densification操作。
进入下一次迭代。
5、一些补充特征
(1)nerf是隐式模型,3D高斯Splatting则是显示模型,可以实时建模。