3D Gaussian Splatting Intro
Jan 10, 2025
| Jan 22, 2025
0  |  Read Time 0 min
type
status
date
slug
summary
tags
category
icon
password

3D Gaussian Splatting 算法部件及流程简介

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

COLMAP

notion image
这个图展示了 SfM (Structure from Motion) 的核心步骤:输入 有视角重叠的 图像,匹配图像之间的对应关系,输出三维重建结果(包括稀疏点云和相机的位姿信息,逐步添加图像进行优化。

核心论文引用

图中提到的 “Structure-from-Motion Revisited” 是一篇经典的 SfM 改进论文,作者提出了COLMAP算法来进行图像特征匹配、三维点云生成和捆绑调整。

SFM

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

投影

notion image
notion image
世界 -W-> 相机 -J-> 平面视图

梯度优化

算损失再回传可以优化参数,求偏导就行。但协方差矩阵不易算梯度,故引入新方法:
notion image
M表示旋转和缩放,代表椭球
旋转因子R是四元数q(旋转角度w, 旋转轴朝向xyz)。对每个q求偏导得到旋转的梯度
对缩放因子S三元数(缩放三个abc长半轴)求三次偏导得到缩放的梯度

光栅化

notion image
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

notion image
nerf:先在像素框里找3D建模的对应点的信息
GS:已有建模直接用信息
两者公式相同所以生成的质量近似

自适应密度控制器

两个关键点:Pruning(减弱伪影)和Densification(处理过度重建和欠采样)

Pruning 修剪

周期性清理冗余点,避免误差累积
低分辨率预热
  • 4倍下采样的分辨率开始计算,降低初始复杂度,获得更稳定的框架。
分阶段上采样
  • 250 次和 500 次迭代时进行两次上采样,逐步恢复到原始分辨率,使渲染结果接近真实照片的精细度。
增加细节并移除透明点
  • 每 100 次迭代:
    • 增加高斯点的密度以增强细节表现。
    • 移除不透明度 α<ϵ 的透明高斯点(即误差点)。
清理漂浮点和重叠点
  • 每 1000 次迭代:
    • 移除不透明度低于某个阈值的点。
    • 将透明度和形状较大的点的不透明度重置为 0,以清除漂浮物并避免高斯点之间的重叠。
全局重置和优化
  • 每 3000 次迭代:
    • 将所有高斯点的透明度 α 设置为接近 0。
    • 对场景进行优化,仅对关键区域的高斯点重新增加透明度。
    • 移除透明度 α<ϵ 的点,进一步简化点云结构。

Densification

要解决的问题:概括不正确
notion image
notion image

全流程

notion image
  • 开发
  • NeRF Intro2024 Review
    Loading...
    Catalog