https://www.youtube.com/watch?v=2SQUMYw0h0A
一个讲得非常好得视频
overview:
把利用SFM得到的点云坐标作为高斯椭球均值,然后初始化高斯椭球。
将高斯椭球投影到像素平面---->光栅化得到---->计算与Image的差异作为梯度传播---->自适应密度控制调整高斯求数量---->将高斯椭球投影到像素平面
高斯椭球:
3D高斯的形状是一个椭球,论文中对于高斯椭球的定义:
在这种表示下面,我们希望存储(优化)的信息就是:
1.每个点的坐标(3D高斯的均值);
2.每个点的高斯表示中的𝛴;
3.每个点的颜色;
4.每个点的不透明度𝛼;
接下来我们看看论文中是如何处理这四个信息
position:
初始化时,利用SFM得到的点云坐标作为高斯椭球均值
𝛴的处理:
表示:
3DGaussian的𝛴需要半正定,直接优化𝛴可能导致𝛴满足不了这一条件
使用
放缩变换
S
和旋转变换
R
组合得到
𝛴
,即:
由于放缩变换都是沿着坐标轴,所以只需要一个3D向量 s ,旋转则用四元数 q 表达
3D ->2D:
在渲染时,我们需要将3D高斯投影到2D:
其中这里W为世界坐标到相机坐标的转换;J代表project变换,对其进行仿射近似,再取雅克比矩阵(Jacobian)。我们可以对每个高斯在其中心点展开,得到其雅可比矩阵,就可以得到这个高斯的线性变换矩阵J.
经过这个变换之后,我们只要丢掉Σ′的第三行的第三列就是投影到相机平面的协方差矩阵。
颜色:
每个点的颜色:
每个点的颜色时学习球谐函数获得的;
计算颜色:
其中是2D高斯与不透明度的乘积,即:
这部分code主要位于这个模块:submodules/diff-gaussian-rasterization
自适应密度控制:
rasterization:
https://www.youtube.com/watch?v=1buFrKUaqwM
forward :
1-计算投影出来的半径,计算投影出来COV2D,取最大特征值*3作为圆的半径。
2-计算这些圆覆盖哪些像素,蓝色区域认为其覆盖的像素范围。
3-计算每个高斯的贡献度
4-计算每个像素的颜色