type
status
date
slug
summary
tags
category
icon
password
3D Gaussian Splatting 算法部件及流程简介

全过程:用SFM的COLMAP建模,输入一个角度的用椭球聚合而成的投影视角,与真实的输入视角比对,修改立体模型,继续迭代。
COLMAP

这个图展示了 SfM (Structure from Motion) 的核心步骤:输入 有视角重叠的 图像,匹配图像之间的对应关系,输出三维重建结果(包括稀疏点云和相机的位姿信息,逐步添加图像进行优化。
核心论文引用
图中提到的 “Structure-from-Motion Revisited” 是一篇经典的 SfM 改进论文,作者提出了COLMAP算法来进行图像特征匹配、三维点云生成和捆绑调整。
SFM

椭球位置是坐标 \mu
形状用 Σ 协方差矩阵表示,参数R控制rotate,参数S控制scale
颜色用 SH函数 球谐函数表达,用含48个系数的四阶多项式近似逼近准确颜色

透明度用一个单独的参数控制
投影


世界 -W-> 相机 -J-> 平面视图
梯度优化
算损失再回传可以优化参数,求偏导就行。但协方差矩阵不易算梯度,故引入新方法:

M表示旋转和缩放,代表椭球
旋转因子R是四元数q(旋转角度w, 旋转轴朝向xyz)。对每个q求偏导得到旋转的梯度
对缩放因子S三元数(缩放三个abc长半轴)求三次偏导得到缩放的梯度
光栅化

paper:A survey on 3D Gaussion Splatting
使用快速可微光栅化器:
快速 把常用深度建了一个package,先排序然后直接调用
可微 多项式
光栅化 分别渲染每个网格
核心目标是将三维高斯分布投影到图像平面,生成二维图像。以下是每个步骤的详细解释:
算法概述
- 输入:
- w,h:图像的宽度和高度(目标分辨率)。
- M,S:高斯点的均值(位置)和协方差矩阵(形状与方向)定义了 3D 高斯分布。
- C,A:高斯点的颜色和不透明度(Alpha 通道)。
- VV:当前相机的视图配置,用于定义观察方向和投影方式。
- 输出:
- 一个二维图像 I,通过将三维高斯点投影到图像平面生成。
主要步骤
- 只留下 V视角内可见的高斯点。
- 将高斯点的 3D 坐标(M,S)转换为屏幕空间 2D 坐标(M′,S′)。
- 更新协方差矩阵以反映缩放和变形。
- 将图像划分为瓦片(Tiles),每个瓦片对应图像的一个子区域。
- 用于加速处理,每个瓦片可以并行处理。
- 确定每个瓦片中有哪些点需要上色。
- 给每个点分配一个“标签”(Key),用来标记它属于哪个瓦片,用于快速排序和分配。
- 根据高斯点的键 K 对点 L 进行排序。
- 确保同一瓦片的点存储在连续的内存区域,便于快速访问。
- 为每个瓦片确定其对应的高斯点范围。
- 输出 R:瓦片索引到高斯点列表的映射。
- 初始化图像画布 II 为零(空白图像)。
- Tile 遍历:
- 遍历所有瓦片 t,并处理每个瓦片中的像素 i。
- GetTileRange:
- 从 R 中获取当前瓦片 t 对应的高斯点范围 r。
- BlendInOrder:
- 对瓦片中的每个像素 i,从对应范围的高斯点 L[r] 中计算颜色和不透明度。
- 通过高斯点叠加的方式(如加权混合)生成像素颜色 I[i]。
GS相比于Nerf

nerf:先在像素框里找3D建模的对应点的信息
GS:已有建模直接用信息
两者公式相同所以生成的质量近似
自适应密度控制器
两个关键点:Pruning(减弱伪影)和Densification(处理过度重建和欠采样)
Pruning 修剪
周期性清理冗余点,避免误差累积
低分辨率预热:
- 以 4倍下采样的分辨率开始计算,降低初始复杂度,获得更稳定的框架。
分阶段上采样:
- 在 250 次和 500 次迭代时进行两次上采样,逐步恢复到原始分辨率,使渲染结果接近真实照片的精细度。
增加细节并移除透明点:
- 每 100 次迭代:
- 增加高斯点的密度以增强细节表现。
- 移除不透明度 α<ϵ 的透明高斯点(即误差点)。
清理漂浮点和重叠点:
- 每 1000 次迭代:
- 移除不透明度低于某个阈值的点。
- 将透明度和形状较大的点的不透明度重置为 0,以清除漂浮物并避免高斯点之间的重叠。
全局重置和优化:
- 每 3000 次迭代:
- 将所有高斯点的透明度 α 设置为接近 0。
- 对场景进行优化,仅对关键区域的高斯点重新增加透明度。
- 移除透明度 α<ϵ 的点,进一步简化点云结构。
Densification
要解决的问题:概括不正确


全流程
