当前位置: 首页 > news >正文

3d gaussian splatting公式推导

1. 离散公式推导

nerf中连续的积分渲染公式是:

C(r)=\int_{0}^{t_i}T(t)\sigma(r(t))c(r(t), d)dt

其中被遮挡率:

T(t)=exp(-\int_{0}^{t_i}\sigma(r(s))ds)

那么转换为离散公式后有:

T_i=T(t_i) =exp(-\sum_{j=0}^{j=i-1}\int_{t_j}^{t_{j+1}}\sigma(t)dt) =exp(-\sum_{j=0}^{j=i-1}\sigma_j\delta_j)

其中,\delta_j代表j时刻的时间差,将其带入渲染公式:

C(i)=\sum_{j=0}^{j=i-1}\int_{t_j}^{t_{j+1}}T(t)\sigma(t)c(t)dt \\=\sum_{j=0}^{j=i-1}\int_{t_j}^{t_{j+1}}exp(-\int_{0}^{t}\sigma(s)ds)\sigma_jc_jdt \\=\sum_{j=0}^{j={i-1}}\int_{t_j}^{t_{j+1}}exp(-\int_{0}^{t_j}\sigma(s)ds)exp(-\int_{t_j}^{t}\sigma(s)ds)\sigma_jc_jdt \\=\sum_{j=0}^{j=i-1}\int_{t_j}^{t_{j+1}}T_jexp(-\int_{t_j}^{t}\sigma(s)ds)\sigma_jc_jdt \\=\sum_{j=0}^{j=i-1}T_j\sigma_jc_j\int_{t_j}^{t_{j+1}}exp(-\sigma_j(t-t_j)dt \\=\sum_{j=0}^{j=i-1}T_j\sigma_jc_j(-\frac{1}{\sigma_j})(exp(-\sigma_j\delta_j)-1) \\=\sum_{j=0}^{j=i-1}T_jc_j(1-exp(-\sigma_j\delta_j))

设透明度    \alpha_i=(1-exp(-\sigma_i\delta_i))

则被遮挡率   T_i =\prod_{j=1}^{j=i-1}(1-\alpha_i)

有   C(i)=\sum_{j=0}^{j=i-1}c_j\alpha_j\prod_{j=1}^{j=i-1}(1-\alpha_j)

而gaussian-splating的公式与nerf不一样的点在于,透明度\alpha_i的计算是根据像素点处于2D高斯球的概率求得的:

\alpha_i=\frac{1}{2\pi\sqrt{\left | \Omega \right |}}exp(-0.5(x-\mu)\Omega ^{-1}(x-\mu))

其中\mu是3D高斯球溅射到屏幕上形成的2D高斯球的均值,\Omega是2D高斯球的协方差

2. 正向渲染公式推导

正向渲染是指从3D高斯球渲染到2D屏幕中某个像素值的颜色的过程。

2.1 3D高斯到2D高斯

首先,3D高斯参数有高斯球的中心即均值\omega,协方差\Sigma,透明度\sigma,颜色c,2D高斯参数有高斯球的中心即均值\mu,协方差\Omega

对于均值\mu来说,其值就是将\omega转换到屏幕坐标系上就可以了

p_{c}=T_{w2c}\omegap_c\omega从世界坐标系转换到相机坐标系下,

\mu=\left\{\begin{matrix}p_c[0]/p_c[2] \\ p_c[1]/p_c[2] \\ \left \| p_c \right \| \end{matrix}\right.

这里3D高斯球的表示是通过一个旋转R和一个缩放矩阵S的乘积表示的,即\Sigma=RS\Lambda S^TR^T=RSS^TR^T,这么表示的原理是协方差是一个椭球,标准正态分布是一个圆,椭球就是将这个圆进行旋转缩放变成的。\Lambda是标准正态分布的协方差,它是一个单位矩阵,所以可以省略。

3. 反向传播公式推导

参考:

【CV】Nerf中体素渲染的离散公式推导 - Edlinf - 博客园

https://zhuanlan.zhihu.com/p/633106694

http://www.lryc.cn/news/446535.html

相关文章:

  • 金属增材制造咋突破?纳米纹理粉末如何助力金属增材制造?
  • openpnp - 为了防止物料操作混乱,做一张物料分布位置图清晰一些
  • 懒人帮美食系统小程序的设计
  • David律所代理Jose Martin幽默水果版权首发维权,尚未TRO
  • 读构建可扩展分布式系统:方法与实践15可扩展系统的基本要素
  • 解决VisualStudio msvsmon.exe远程调试器未启动问题
  • 如果淘汰是注定的,那么读书还有意义吗?
  • Python 中 三种常用的绘图方式 ! ! !
  • 统一回复OneAPI:failed to get gpt-3.5-turbo token encoder的解决办法
  • Flash Attention是怎么做到又快又省显存的?
  • CAN报文ID过滤
  • ELK-05-skywalking监控SpringCloud服务日志
  • 17年数据结构考研真题解析
  • nginx 安装(Centos)
  • 异步编程利器:深入解析 Python 异步并发库 Gevent
  • Python pyusb 使用指南【windows+linux】
  • Xcode报错:The request was denied by service delegate (SBMainWorkspace)
  • 面试系列-携程暑期实习一面
  • 你以为建站很复杂?Baklib 5分钟解决你的痛点
  • 极狐GitLab 17.4 重点功能解读【二】
  • LVS-DR实战案例,实现四层负载均衡
  • 网游和3A类型游戏的CPU选择分析
  • 2024免费录屏软件的宝藏功能与实用技巧
  • linux---进程程序替换详解
  • 笔试编程-百战成神——Day01
  • Qt+toml文件读写
  • 浅谈C++之指针
  • 在虚幻引擎中实时显示帧率
  • Apache Iceberg构建高性能数据湖
  • 【图像压缩与重构】基于标准+改进BP神经网络