3d高斯泼溅学习

椭球集就是一堆3d高斯

椭球集之位置与形状:协方差矩阵(包括旋转矩阵和缩放矩阵),要大多数都能表达实体的位置,实体的位置和形状要落在大概率范围内

椭球集之球谐函数:代表球面上不同位置的值基函数,拟合颜色和形状

1.球谐函数在形状上的拟合,阶数越高就越能描述原来的真实形状(用多项式(基函数)和傅立叶变换拟合)

3d高斯Splatting里面用的是4阶的,参数量有16个

拟合的函数r=f(θ,φ)

 

 

2.球谐函数在颜色上的拟合

实现不同角度不同颜色(R,G,B),代码中是4阶,参数量为n²

3*16=3+45=48(3是RGB,其他是别的rest组合)

3.ply文件中的信息

点云文件中的每个点有很多信息,包括:1*点云数+3*中心点位置信息(x,y,z,也就是高斯均值的μ)+3*法向量信息(不同光照效果)+球谐函数参数:48*颜色信息(每个RGB有16个值,3*16)+1*不透明度a(也是密度信息)+协方差矩阵参数:3*缩放矩阵(scale1.2.3)+4*旋转矩阵(用四元数表达)

4.图像处理(光栅化)

协方差矩阵中的缩放系数:用泰勒线性展开到三维,用到雅可比矩阵

5.渲染

渲染公式的参数包括当前点的不透明度a和一条射线下前面的点的密度(不透明度),都要纳入计算,并且,根据点云中一定半径范围内能够影响到当前点云的其他点云,都要纳入这个点的像素颜色的计算。

6.损失函数loss(根据拟合出高斯投影到二维的光栅化图像和真实图像)

判断高斯椭球和实际形体之间的梯度,就是判断是欠采样(高斯的方差小)还是过度重构(高斯的方差过大)

7.基于梯度自适应的改变点云分布

①不透明度太低的点就去掉

②欠采样,如果该处高斯<那个真实形状,就把它分裂后拟合。

③过度重构,缩小,分裂,再拟合

整体流程:

1.初始化点云,拿到中心点位置M

2.初始化协方差矩阵S(缩放),颜色C,不透明度a

3.迭代次数:0

4.还没有收敛,则进行下一步:

5.导入相机位姿和图像

6.进行光栅化处理(传入上述初始化的位置形状颜色不透明度和相机位姿)

将高斯投影到2D平面以模拟相机视角,计算光栅化图像image与真实图像image之间的差异来确定损失,进而调整高斯参数,以优化3D高斯模型,使其能更好地拟合场景细节.

7.计算拟合出的光栅化图像image和真实图像image之间的差异得到损失loss

8.进行优化高斯椭球集的参数包括位置形状颜色不透明度

9.再判断是否再次进行优化

下载源码

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(3d)