【NeRF】了解学习Neural Radiance Fields(神经辐射场)

news2024/11/17 11:22:44

文章目录

  • 1.Definition of field(场的定义)
    • 1.1 shape representations(各种形状表征方式)
    • 1.2 Explicit surfaces and implicit surfaces
    • 1.3 Radiance Field(Implicit Surfaces)
      • 体素密度
  • 2.Definition of Rendering(渲染的定义)
    • 2.1 Sphere Tracing(球追踪技术)
    • 2.2 Volumn render(体渲染)
  • 3.3D contents(什么是三维内容)
    • appearance representation(外表表征方式)
  • 4.NeRF的具体细节


1.Definition of field(场的定义)

  • A field is a quantity defined for all spatial and/or temporal coordinates.(场是由空间或者时间定义的量)
  • A neural field is a field that is paramaterized fully or in part of by a neural network.(神经场是神经网络构成部分或者全部参数的场)
    在这里插入图片描述

向量场、图片、曲面、有符号距离场都是Fields。

1.1 shape representations(各种形状表征方式)

在这里插入图片描述

  • Mesh:表面是由一个个三角形组成
  • Point cloud:点云
  • Occupancy field:对三维空间中的每一个点,如果这个点被物体占有,则把这个点的value设置为1
  • Signed distance field:对三维空间中的每一个点,把这个点的value设置为到物体最近表面的距离,区分正负,图中蓝色为负

1.2 Explicit surfaces and implicit surfaces

Explicit surfaces和implicit surfaces是在计算机图形学和计算机视觉领域中用于表示三维对象的两种不同方法。

  1. Explicit Surfaces(显式表面):

    • 在显式表面中,对象的几何形状是通过显式定义的表面方程或参数化表示的。这意味着,对于给定的参数值,你可以直接计算出表面上的点的坐标。
    • 显式表面通常通过数学公式或参数方程表示,例如球体的方程是 x 2 + y 2 + z 2 = r 2 x^2 + y^2 + z^2 = r^2 x2+y2+z2=r2,或者一个平面的方程是 a x + b y + c z + d = 0 ax + by + cz + d = 0 ax+by+cz+d=0
    • 优点是可以直接得到表面上的点的位置,容易进行几何计算。但对于复杂形状,表达式可能变得复杂。
  2. Implicit Surfaces(隐式表面):

    • 在隐式表面中,对象的表面并不直接表示为显式的方程或参数形式。相反,对象的表面由一个隐含的函数 F ( x , y , z ) F(x, y, z) F(x,y,z)决定,函数值为零的点在表面上。
    • 表面的形状由零集 F ( x , y , z ) = 0 F(x, y, z) = 0 F(x,y,z)=0决定,例如 x 2 + y 2 + z 2 − r 2 = 0 x^2 + y^2 + z^2 - r^2 = 0 x2+y2+z2r2=0表示一个球体的隐式表面。
    • 隐式表面通常用于描述不规则或复杂的几何形状,因为它们不需要直接解出表面方程。但要计算表面上的点,通常需要使用数值方法,例如Marching Cubes算法。

总的来说,显式表面和隐式表面是两种不同的表示方法,各有优缺点。选择使用哪种方法通常取决于具体的应用和场景,以及对于计算效率和表达能力的需求。

Mesh和Point cloud都是显示表面。

1.3 Radiance Field(Implicit Surfaces)

Radiance Fields(辐射场)是一种用于描述三维场景中光照和颜色的方法。Radiance Fields通常被用于图形学和计算机视觉领域,以捕捉场景中的光照效果、颜色和阴影等细节。

在这里插入图片描述

我们可以把辐射场看成一个函数。它接受一个向量 ( x , y , z , θ , ϕ ) (x,y,z,\theta,\phi ) (x,y,z,θ,ϕ)作为输入,其中,
x , y , z ) x,y,z ) x,y,z)表示这个点在空间中的坐标, ( θ , ϕ ) (\theta,\phi ) (θ,ϕ)表示观察角度(俯仰角pitch和偏航角yaw)。

这个函数被称为NeRF函数,它的输出是 ( R G B , σ ) (RGB,\sigma ) (RGB,σ)。RGB很好理解,就是这个点的颜色。而 σ \sigma σ,是一个被称为体素密度的计算量,下一节会具体讲解。

总而言之,Radiance Field描述了在三维空间中每个点的辐射度(radiance),这代表了在该点上的光照强度和颜色。通过学习辐射场,可以生成逼真的图像,包括场景中的各种光照和反射效果。

体素密度

在三维图形学和计算机视觉中,体素密度 σ ( x ) \sigma(x) σ(x)通常用来表示体积数据中每个体素(三维像素)的密度或吸收率。这个密度函数 σ ( x ) \sigma(x) σ(x) 提供了对场景中不同区域的物质分布或浓度的描述。

具体而言, σ ( x ) \sigma(x) σ(x)表示在空间位置 x x x 处的体素密度。该函数的取值通常与场景中的物体或介质的性质有关,比如在医学图像学中, σ ( x ) \sigma(x) σ(x) 可能表示某个组织的密度,而在计算机图形学中,它可以表示某个材质或介质的密度。

一些常见的应用场景包括:

  1. 医学成像: 在医学图像学中, σ ( x ) \sigma(x) σ(x)可以表示组织的密度,例如在CT扫描中,不同的组织或器官会有不同的密度值。

  2. 体积渲染: 在体积渲染中, σ ( x ) \sigma(x) σ(x)可以用于模拟光线在体积中的吸收效应。不同密度的区域对光线的吸收程度不同,从而影响渲染结果。

  3. 计算机图形学: 在一些图形学的应用中, σ ( x ) \sigma(x) σ(x)可以表示材质的密度,影响光线通过材质时的表现。

通常,密度函数 σ ( x ) \sigma(x) σ(x)的值越大,表示该位置的体素越密集或吸收率越高。这种密度信息对于模拟光照、渲染和可视化等任务都是非常重要的。

2.Definition of Rendering(渲染的定义)

渲染(Rendering)是指将三维模型或场景转换成二维图像的过程。在计算机图形学中,渲染是一个重要的概念,它是计算机图形学中最重要的技术之一。

在渲染过程中,计算机需要对三维模型或场景进行处理,包括建模、纹理、映射、光照计算、投影变换、视点变换等,最终生成一张二维图像。这个过程涉及到大量的计算和图形处理技术,如光线追踪、阴影计算、反射和折射等。

在NeRF中,用到了一种名为体渲染(Volumn render)的技术

2.1 Sphere Tracing(球追踪技术)

在这里插入图片描述

使用球追踪(Sphere Tracing)技术来渲染一个带有符号距离场(Signed Distance Field)的场景,并从中获取屏幕空间法线图(Screen Space Normal Map)和深度图(Depth Map)。其中关键要素如下:

  1. Signed Distance Field(符号距离场): 符号距离场是一种表示空间中对象表面的方式。对于每个点,它的值表示该点到最近表面的有向距离,有向意味着正值表示在物体外,负值表示在物体内。符号距离场通常用于描述几何体,而无需显式表示几何体的网格。

  2. Sphere Tracing(球追踪): 球追踪是一种光线追踪技术,通常用于符号距离场的渲染。它通过沿视线(ray)追踪场景中的物体表面,不断沿着视线前进,直到达到符号距离场的边界。这种技术可以有效地渲染符号距离场中的复杂几何形状,包括曲面和体积。

  3. Screen Space Normal Map(屏幕空间法线图): 法线图是一种图像,其中每个像素的颜色表示与表面垂直的法线方向。屏幕空间法线图是将法线映射到屏幕空间的图像,通常在屏幕空间的 XY 平面上,用 RGB 值来表示法线的方向。

  4. Depth Map(深度图): 深度图是一种图像,其中每个像素的值表示与相机的距离,通常以线性或非线性的方式编码。深度图在渲染中常用于实现景深效果和其他与深度相关的图形效果。

2.2 Volumn render(体渲染)

在这里插入图片描述

体渲染(Volume Rendering)是一种用于可视化三维体积数据的技术,通常应用于医学成像、科学可视化和计算机图形学等领域。体渲染的目标是生成逼真的图像,呈现出体积内部的结构和特征。

NeRF使用渲染方式的正是基于体渲染技术。由于体渲染全程都是可微分的,就可以用神经网络去训练NeRF函数。以下是体渲染的基本原理和一些关键公式:

  1. 基本要素:
  • 体素(Voxel): 三维体积数据通常由体素组成,每个体素是体积中的一个像素,包含各种信息如密度、颜色等。这正是NeRF函数的输出

  • 体积光线积分: 体渲染的基本思想是对每条光线在体积中进行积分,计算该光线通过体素时的光照和颜色。这涉及到计算光线与体积中不同位置的相互作用。

  1. 光线的传播和积分:

光线在体积中的传播通常由类似以下的积分公式表示:

C = ∫ 0 t m a x T ( x ) ⋅ c ( x )   d x C = \int_{0}^{t_{max}} T(x) \cdot c(x) \,dx C=0tmaxT(x)c(x)dx

其中:

  • C , c o l o r , C,color, C,color,是最终生成图像的对应光线的像素点颜色;
  • t m a x t_{max} tmax 是光线在体积中传播的最大距离;
  • T ( x ) , t r a n s p a r e n t , T(x),transparent, T(x),transparent是光线在位置 x x x处的透明度(也称为传输函数);
  • c ( x ) c(x) c(x) 是在位置 x x x 处的颜色。
  1. 透明度传输函数:

透明度传输函数 T ( x ) T(x) T(x) 定义了在光线穿过体积中的不同位置时,光线的透明度变化。这通常是一个关于密度或强度的函数。常见的形式之一是:

T ( x ) = e − ∫ 0 x σ ( t )   d t T(x) = e^{-\int_{0}^{x} \sigma(t) \,dt} T(x)=e0xσ(t)dt

其中 σ ( t ) \sigma(t) σ(t) 是在位置 t t t 处的密度。这由NeRF函数计算得出

  1. 色彩传输函数:

颜色传输函数 C ( x ) C(x) C(x)定义了在体积中不同位置的颜色。这由NeRF函数计算得出

3.3D contents(什么是三维内容)

在这里插入图片描述

三维内容是形状和外观的组合。如果拥有一个三维内容,再搭配一个渲染器,就可以得到在想要的视角下观察这个物体的RGB图像。

appearance representation(外表表征方式)

在这里插入图片描述

  • Material texture map & environment lighting:分为两步

      1. Material texture map:把一个appearance转化为一张图片,图片的每个像素存储appearance对应位置的材质信息。类似于把地球画成世界地图的过程。
      1. environment lighting:光照分布
  • Radiance field:已经介绍过。

两种表征方式的特点:

  • Material texture map & environment lighting:
    • 优点:材质和光照分离,这意味着可以很方便单独修改物体的表面材质和外部光照条件。比如,可以给兔子皮毛上贴一个五角星,然后可以容易地重新获得对应的appearance。也可以打光更亮一点,让兔子变得很明亮。
    • 缺点:反渲染比较复杂
  • Radiance field:
    • 优点:形式简单
    • 缺点:材料和光照混合,在新环境中原来的appearance就失效了。

4.NeRF的具体细节

4.1 Neural Field General Framework

在这里插入图片描述

输入空间坐标和位姿,经过神经网络的推理之后,我们可以获得重建的辐射场(Radiance Field)。然后,将这些Radiance Field经过体渲染(Volumn render),就可以得到我们可以观测的RGB图像。

4.2 2D到3D的三维重建过程

像素坐标如何转为空间坐标并获得姿态

To do.

Architecture(神经网络架构)

在这里插入图片描述

首先,输入的 ( x , y , z , θ , ϕ ) (x,y,z,\theta,\phi ) (x,y,z,θ,ϕ)会经过一层Positional Encoding去提取高频特征,这个Positional Encoding怎么做的会在下一节讲。然后, ( x , y , z ) (x,y,z ) (x,y,z)经过MLP的推理,输出体素密度 σ \sigma σ。此外,在输出体素密度 σ \sigma σ的上一层中,加入了经过编码的 ( θ , ϕ ) (\theta,\phi ) (θ,ϕ),然后再经过另外的MLP的推理,输出颜色RGB。最后体素密度 σ \sigma σ和颜色RGB进行体渲染。

在这里插入图片描述
图中, γ ( x ) \gamma(x) γ(x)表示经过编码的 ( x , y , z ) (x,y,z ) (x,y,z) γ ( d ) \gamma(d) γ(d)表示经过编码的 ( θ , ϕ ) (\theta,\phi ) (θ,ϕ)

需要注意的是,在原论文中,作者还在网络中间第二次加入了坐标信息来进行加强。MLP的层数与结构如图所示。

Fourier features(Positional Encoding)

在这里插入图片描述

神经网络的偏移(bias)的本意是为了拟合地更加平滑,但在NeRF的任务中,太过平滑(smooth)的图像往往意味着模糊,因此,我们更加尖锐(sharp)、梯度更大的图像。

NeRF作者在最上层插入了一层Fourier features,很好地解决了这个问题。其计算公式如下:
γ ( p ) = ( s i n ( 2 0 π p ) , c o s ( 2 0 π p ) , … , s i n ( 2 L − 1 π p ) , c o s ( 2 L − 1 π p ) \gamma(p)=(sin(2^0\pi p),cos(2^0\pi p),\ldots,sin(2^{L-1}\pi p), cos(2^{L-1}\pi p) \\ γ(p)=(sin(20πp),cos(20πp),,sin(2L1πp),cos(2L1πp)

对应 ( x , y , z , θ , ϕ ) (x,y,z,\theta,\phi ) (x,y,z,θ,ϕ),就是:
γ ( ( x , y , z ) ) = ( s i n ( 2 0 π ( x , y , z ) ) , c o s ( 2 0 π ( x , y , z ) ) , … , s i n ( 2 L − 1 π ( x , y , z ) ) , c o s ( 2 L − 1 π ( x , y , z ) ) ) γ ( ( θ , φ ) ) = ( s i n ( 2 0 π ( θ , φ ) ) , c o s ( 2 0 π ( θ , φ ) ) , … , s i n ( 2 L − 1 π ( θ , φ ) ) , c o s ( 2 L − 1 π ( θ , φ ) ) ) \gamma((x,y,z))=(sin(2^0\pi(x,y,z)),cos(2^0\pi(x,y,z)),\ldots,sin(2^{L-1}\pi(x,y,z)), cos(2^{L-1}\pi(x,y,z))) \\ \gamma((\theta,\varphi))=(sin(2^0\pi(\theta,\varphi)),cos(2^0\pi(\theta,\varphi)),\ldots,sin(2^{L-1}\pi (\theta,\varphi)),cos(2^{L-1}\pi (\theta,\varphi)) ) γ((x,y,z))=(sin(20π(x,y,z)),cos(20π(x,y,z)),,sin(2L1π(x,y,z)),cos(2L1π(x,y,z)))γ((θ,φ))=(sin(20π(θ,φ)),cos(20π(θ,φ)),,sin(2L1π(θ,φ)),cos(2L1π(θ,φ)))

( x , y , z , θ , ϕ ) (x,y,z,\theta,\phi ) (x,y,z,θ,ϕ)都要先归一化。 L是个超参数。

4.3 NeRF的分层体素渲染:Hierarchical volume sampling

原始公式解释

NeRF使用了基于体渲染的分层体素渲染技术。对于原始的体渲染公式的推理,涉及一些物理学原理,这里,我们直接不加证明地给出公式,这个公式几乎在所有关于NeRF的解释中都可以看见。

C ( 0 → ∞ ) = ∫ 0 ∞ T ( 0 → t ) ⋅ σ ( t ) ⋅ c ( t )   d t C(0 \to \infty) = \int_{0}^{\infty } T(0 \to t)\cdot \sigma(t) \cdot c(t) \,dt C(0)=0T(0t)σ(t)c(t)dt

其中, T ( 0 → t ) = e x p ( − ∫ 0 t σ ( x )   d x ) T(0 \to t)=exp\left( - \int_{0}^{t } \sigma(x) \,dx \right) T(0t)=exp(0tσ(x)dx)

当然,我们不可能计算无穷远,规定如下:
积分下限,即光线起点: t n e a r ,简写 t n 积分上限,即光线终点: t f a r ,简写 t f 积分下限,即光线起点:t_{near},简写t_{n} \\ 积分上限,即光线终点:t_{far},简写t_{f} 积分下限,即光线起点:tnear,简写tn积分上限,即光线终点:tfar,简写tf

上式修改为:
C ( t n → t f ) = ∫ t n t f T ( t n → t ) ⋅ σ ( t ) ⋅ c ( t )   d t C(t_n \to t_f) = \int_{t_{n}}^{t_{f} } T(t_n \to t)\cdot \sigma(t) \cdot c(t) \,dt Ctntf=tntfT(tnt)σ(t)c(t)dt
其中, T ( t n → t ) = e x p ( − ∫ t n t σ ( x )   d x ) T(t_n \to t)=exp\left( - \int_{t_n}^{t } \sigma(x) \,dx \right) T(tnt)=exp(tntσ(x)dx)

  • 物理解释:

笔者看了很多的blog,说的都不是很清楚。这里有不对的请指正。

  1. T ( t n → t ) T(t_n \to t) T(tnt):光线从 t n t_{n} tn行进至 t t t处,未撞击到物体的概率。根据上面 T ( x ) T(x) T(x)的定义,随着光线路径的长度增加, T T T的积分区间 t − t n t-t_{n} ttn会增加,也就会增加对 σ ( x ) \sigma(x) σ(x)积分的量, T T T的大小也就不断减小。也就是说,随着光线越来越远, T T T逐渐减小,透明度在不断地下降,光线没有碰撞到任何粒子的概率也在减小。
  2. s i g m a ( x ) sigma(x) sigma(x):在x位置粒子的密度
  3. c ( x ) c(x) c(x):在x位置粒子的颜色

T ( t n → t ) T(t_n \to t) T(tnt)离散化

连续性方程无法通过计算机求解,需要离散化。

接下来,我们先对 T ( t ) T(t) T(t)进行离散化。首先,把积分区间长度 t − t n t-t_{n} ttn等分成n份,那么第 i i i个采样点的位置就是
t i = t n + i n ⋅ ( t − t n ) , i = 0 , 1 , 2 , . . . , n t_i=t_n+\frac{i}{n} \cdot ( t-t_{n}),i=0,1,2,...,n ti=tn+ni(ttn),i=0,1,2,...,n
再利用积分的可加性:
T ( t n → t ) = e x p ( − ∫ t n t σ ( x )   d x ) = e x p ( − ∑ i = 0 n − 1 ∫ t i t i + 1 σ ( x )   d x ) T(t_n \to t)=exp\left( - \int_{t_{n}}^t \sigma(x) \,dx \right) \\ =exp\left( - \sum_{i=0}^{n-1}\int_{t_i}^{t_{i+1} } \sigma(x) \,dx \right) T(tnt)=exp(tntσ(x)dx)=exp(i=0n1titi+1σ(x)dx)
再使用拉格朗日中值定理:
T ( t n → t ) = e x p ( − ∑ i = 0 n − 1 ∫ t i t i + 1 σ ( x )   d x ) = e x p ( − ∑ i = 0 n − 1 σ ( x i ) ⋅ ( t i + 1 − t i ) ) x i ∈ ( t i , t i + 1 ) T(t_n \to t)=exp\left( - \sum_{i=0}^{n-1}\int_{t_i}^{t_{i+1} } \sigma(x) \,dx \right) \\ =exp\left( - \sum_{i=0}^{n-1} \sigma(x_i) \cdot (t_{i+1}-t_i) \right) \\ x_i \in (t_i ,t_{i+1}) T(tnt)=exp(i=0n1titi+1σ(x)dx)=exp(i=0n1σ(xi)(ti+1ti))xi(ti,ti+1)
定义每一等分的长度为: t i + 1 − t i = t − t n n = δ i t_{i+1}-t_i= \frac{t-t_{n}}{n}=\delta_i ti+1ti=nttn=δi
T ( t n → t ) = e x p ( − ∑ i = 0 n − 1 σ ( x i ) ⋅ δ i ) T(t_n \to t)=exp\left( - \sum_{i=0}^{n-1} \sigma(x_i) \cdot \delta_i \right) T(tnt)=exp(i=0n1σ(xi)δi)
只要给定了起点 t n t_n tn和参数 t t t,那么 δ i \delta_i δi就是常数,且:
x i ∈ ( t n + i n ⋅ ( t − t n ) , t n + i + 1 n ⋅ ( t − t n ) ) x_i \in \left( t_n+\frac{i}{n} \cdot ( t-t_{n}) ,t_n+\frac{i+1}{n} \cdot ( t-t_{n}) \right) xi(tn+ni(ttn),tn+ni+1(ttn))

σ ( x i ) \sigma(x_i) σ(xi)是通过近似计算的,只要n足够大, σ ( x i ) \sigma(x_i) σ(xi)就足够准确。

C ( t n → t f ) C(t_n \to t_f) C(tntf)离散化

我们先推理 T T T的一个性质:
T ( a → c ) = exp ⁡ ( − [ ∫ a b σ ( t ) d t + ∫ b c σ ( t ) d t ] ) = exp ⁡ ( − ∫ a b σ ( t ) d t ) exp ⁡ ( − ∫ b c σ ( t ) d t ) = T ( a → b ) ⋅ T ( b → c ) \begin{aligned} \mathcal{T}(a\rightarrow c)& =\exp\left(-\left[\int_a^b\sigma(t)dt+\int_b^c\sigma(t)dt\right]\right) \\ &=\exp\left(-\int_a^b\sigma(t)dt\right)\exp\left(-\int_b^c\sigma(t)dt\right) \\ &=\mathcal{T}(a\rightarrow b)\cdot\mathcal{T}(b\rightarrow c) \end{aligned} T(ac)=exp([abσ(t)dt+bcσ(t)dt])=exp(abσ(t)dt)exp(bcσ(t)dt)=T(ab)T(bc)
这与T的概率解释是相吻合的:光线没有击中[a,c]内的任何粒子的概率,等于它没有击中[a,b]、[b,c]两个区间内任何粒子的这两个独立事件的概率的乘积。

我们再推理 C C C的一个性质,当[a,b]区间足够小:
C ( a → b ) = ∫ a b T ( a → t ) ⋅ σ ( t ) ⋅ c ( t ) d t ≈ σ ( i ) ⋅ c ( i ) ∫ a b T ( a → t ) d t = σ ( i ) ⋅ c ( i ) ∫ a b exp ⁡ ( − ∫ a t σ ( x ) d x ) d t \begin{aligned} \boldsymbol{C}(a\rightarrow b)& =\int_a^b\mathcal{T}(a\to t)\cdot\sigma(t)\cdot\mathbf{c}(t)dt \\ &\approx \sigma(i) \cdot \mathbf{c}(i) \int_a^b\mathcal{T}(a\to t)dt \\ &=\sigma(i) \cdot \mathbf{c}(i) \int_a^b\exp\left(-\int_a^t\sigma(x)dx\right)dt \end{aligned} C(ab)=abT(at)σ(t)c(t)dtσ(i)c(i)abT(at)dt=σ(i)c(i)abexp(atσ(x)dx)dt
其中, i ∈ [ a , b ] i \in[a,b] i[a,b],然后利用拉格朗日中值定理:
C ( a → b ) ≈ σ ( i ) ⋅ c ( i ) ∫ a b exp ⁡ ( − σ ( i ) ( t − a ) ) d t = σ ( i ) ⋅ c ( i ) ⋅ exp ⁡ ( − σ ( i ) ( t − a ) ) − σ ( i ) ∣ a b = c ( i ) ⋅ [ 1 − exp ⁡ [ σ ( i ) ( b − a ) ] ] \begin{aligned} \boldsymbol{C}(a\rightarrow b)&\approx \sigma(i) \cdot \mathbf{c}(i) \int_a^b\exp\left( - \sigma(i)(t-a) \right )dt \\ &=\sigma(i) \cdot \mathbf{c}(i) \cdot\frac{\exp\left( - \sigma(i)(t-a) \right)}{ - \sigma(i) }\biggr|_a^b \\ &=\mathbf{c}(i) \cdot [ 1-\exp[ \sigma(i)(b-a) ] ] \end{aligned} C(ab)σ(i)c(i)abexp(σ(i)(ta))dt=σ(i)c(i)σ(i)exp(σ(i)(ta)) ab=c(i)[1exp[σ(i)(ba)]]

有了这两个性质之后,我们可以很快速地对C进行离散化:
C ( t n → t f ) = ∑ i = 0 n − 1 ∫ t i t i + 1 T ( t ) ⋅ σ ( t ) ⋅ c ( t ) d t , n 等分 = ∑ i = 0 n − 1 ∫ t i t i + 1 T ( t n → t i ) ⋅ T ( t i → t ) ⋅ σ ( t ) ⋅ c ( t ) d t , 性质一 = ∑ i = 0 n − 1 T ( t n → t i ) ∫ t i t i + 1 T ( t i → t ) ⋅ σ ( t ) ⋅ c ( t ) d t , 常数拿到积分外 = ∑ i = 0 n − 1 T ( t n → t i ) ⋅ [ 1 − exp ⁡ [ − σ ( t k ) ( t i + 1 − t i ) ] ] ⋅ c ( t k ) ,性质二 = ∑ i = 0 n − 1 T ( t n → t i ) c ( t k ) [ 1 − exp ⁡ [ − σ ( t k ) δ i ] ] \begin{aligned} C(t_{n} \to t_f) &= \sum_{i=0}^{n-1}\int_{t_{i}}^{t_{i+1}}\mathcal{T}(t) \cdot \sigma(t) \cdot \mathbf{c}(t) dt,n等分 \\ &=\sum_{i=0}^{n-1} \int_{t_{i}}^{t_{i+1}} \mathcal{T}(t_n \to t_i)\cdot\mathcal{T}(t_i \to t) \cdot \sigma(t)\cdot\mathbf{c}(t)dt ,性质一\\ &=\sum_{i=0}^{n-1} \mathcal{T}(t_n \to t_i) \int_{t_{i}}^{t_{i+1}}\mathcal{T}(t_i \to t) \cdot \sigma(t)\cdot\mathbf{c}(t)dt,常数拿到积分外 \\ &=\sum_{i=0}^{n-1} \mathcal{T}(t_n \to t_i)\cdot [ 1-\exp[ -\sigma(t_k)(t_{i+1}-t_i) ] ] \cdot \mathbf{c}(t_k),性质二 \\ &=\sum_{i=0}^{n-1} \mathcal{T}(t_n \to t_i)\mathbf{c}(t_k) [ 1-\exp[ -\sigma(t_k)\delta_i ] ] \end{aligned} C(tntf)=i=0n1titi+1T(t)σ(t)c(t)dt,n等分=i=0n1titi+1T(tnti)T(tit)σ(t)c(t)dt,性质一=i=0n1T(tnti)titi+1T(tit)σ(t)c(t)dt,常数拿到积分外=i=0n1T(tnti)[1exp[σ(tk)(ti+1ti)]]c(tk),性质二=i=0n1T(tnti)c(tk)[1exp[σ(tk)δi]]
其中:
t n 为光线原点位置,通常为 0 t i = t n + i n ⋅ ( t − t n ) , i = 0 , 1 , 2 , . . . , n t k ∈ ( t i , t i + 1 ) δ i = t i + 1 − t i = t f − t n n t_n为光线原点位置,通常为0 \\ t_i=t_n+\frac{i}{n} \cdot ( t-t_{n}),i=0,1,2,...,n \\ t_k \in (t_i,t_i+1) \\ \delta_i=t_{i+1}-t_i=\frac{t_f-t_{n}}{n} tn为光线原点位置,通常为0ti=tn+ni(ttn),i=0,1,2,...,ntk(ti,ti+1)δi=ti+1ti=ntftn

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1410992.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

项目解决方案:非执法视频监控系统项目设计方案

目 录 一、概述 (一)前言 (二)设计思路 (三)设计原则 1、实用性 2、可靠性 3、安全性 4、先进性 5、开放性 6、易管理、易维护 (四)设计依据 二、方案总…

数据可视化的未来:2024 年及以后_光点科技

随着我们进入数据驱动决策的下一个时代,数据可视化领域即将迎来一场变革性革命。随着信息的不断涌入和数据的复杂性不断增加,传统的可视化方法需要帮助跟上步伐。人工智能、机器学习和增强现实等新兴技术正在为新一代实时数据可视化工具铺平道路&#xf…

C语言-算法-线性dp

[USACO1.5] [IOI1994]数字三角形 Number Triangles 题目描述 观察下面的数字金字塔。 写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。 在上面的样例中,从 7 → 3 → 8 →…

centos手动下载配置redis并自启动

有些服务器不能自动安装配置redis,仓库找不到之类的问题,就需要手动下载配置redis,记录下,方便以后使用(ps,如果报错可能是gcc缺失) 1、下载 Redis 源码包:访问 Redis 官网或可信的…

前端学习生产环境、开发环境、测试环境

1、路径 定义是什么环境 NODE_ENVdevelopment 开发环境 2、.env 端口号 3、.env.development 开发环境 4、.env.production 生产环境 5、.env.test 测试环境 6、如何访问,通过process.env进行访问 学习中.......

acrobat调整pdf的页码和实际页码保持一致

Acrobat版本 具体操作 现在拿到pdf的结构如下: pdf页码实际页码1-10页无页码数11页第1页 操作,选择pdf第10页,右键点击 具体设置 最终效果

视频渲染靠cpu还是显卡 会声会影视频渲染的作用是什么

视频渲染最占用的资源就是CPU,多核心多线程,这样才能渲染快。渲染可以在时间线上实时平滑预览,便于编辑,最终导出成片的时候速度也会快一些,渲染就是对每桢的图像进行重新优化的过程。 渲染的作用主要是能够保证使用者…

64、ubuntu使用c++/python调用alliedvisio工业相机

基本思想:需要使用linux系统调用alliedvisio工业相机完成业务,这里只做驱动相机调用,具体不涉及业务开发 Alvium 相机选型 - Allied Vision 一、先用软件调用一下用于机器视觉和嵌入式视觉的Vimba X 软件开发包 - Allied Vision VimbaX_Set…

【vue ajax】封装ajax,可直接复用

在项目经过统一代理后,部分功能想直接发送请求,不用统一api,可以封装一个ajax进行网络传输 ajax(method, url, data) {return new Promise(function (resolve, reject) {const xhr new XMLHttpRequest();xhr.onreadystatechange function (…

HCIP实验6-交换接口实验

搭建实验拓扑图 实验开始 配置PC1 配置PC2 配置PC3 划分vlan 将sw1划分到vlan3 [sw1]interface e0/0/2 [sw1-Ethernet0/0/2]port link-type access [sw1-Ethernet0/0/2]port default vlan 3 将sw3划分到vlan4 [sw3]interface e0/0/2 [sw3-Ethernet0/0/2]port link-type a…

多数据源组件dynamic-datasource使用总结

简介 dynamic-datasource-spring-boot-starter 是一个基于springboot的快速集成多数据源的启动器。 其支持 Jdk 1.7, SpringBoot 1.5.x 2.x.x 3.x.x。 特性 支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。支持数据库敏感配置信息 加密…

小迪安全23WEB 攻防-Python 考点CTF 与 CMS-SSTI 模版注入PYC 反编译

#知识点: 1、PYC 文件反编译 2、Python-Web-SSTI 3、SSTI 模版注入利用分析 各语言的SSIT漏洞情况: SSIT漏洞过程: https://xz.aliyun.com/t/12181?page1&time__1311n4fxni0Qnr0%3DD%2FD0Dx2BmDkfDCDgmrYgBxYwD&alichlgrefhtt…

【C++】wxWidgets编程的程序入口点

在wxWidgets中,程序的入口点通过wxIMPLEMENT_APP宏定义来设置,该宏会扩展为一个实现了main函数或者在Windows上是WinMain函数的代码。wxIMPLEMENT_APP宏与wxDECLARE_APP宏一起使用来设置基于wxWidgets的应用程序的启动代码。 使用wxIMPLEMENT_APP宏通常是…

vue实现在线Excel表格功能

目录 1.安装x-data-spreadsheet xlsx 2.引入 3.使用 1.安装x-data-spreadsheet xlsx npm i x-data-spreadsheet xlsx2.引入 import zhCN from "x-data-spreadsheet/src/locale/zh-cn"; import Spreadsheet from "x-data-spreadsheet"; import * as X…

利用sqlmap探测get类型注入

环境准备:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 基础:GET基于报错的sql注入利用-脱库-CSDN博客 sqlmap 工具是kali自带的 例子我都用sql靶场的第一关做演示 1、探测数据库名 sqlmap -u "http://192.168.0.103/sqlilab…

Redis配置类,序列化

解释说明: 当前配置类不是必须的,因为 Spring Boot 框架会自动装配 RedisTemplate 对象,但是默认的key序列化器为JdkSerializationRedisSerializer,导致我们存到Redis中后的数据和原始数据有差别 如: 但是取是可以取出…

【免费】幻兽帕鲁Palworld服务器创建、32人专用服务器搭建

创建幻兽帕鲁服务器1分钟部署教程,阿里云和腾讯云均推出幻兽帕鲁服务器服务器和部署教程,4核16G和4核32G配置可选,阿腾云atengyun.com分享1分钟自建幻兽帕鲁Palworld服务器教程: 幻兽帕鲁服务器创建教程 幻兽帕鲁服务器官方推荐…

【Java网络编程03】网络原理进阶

【Java网络编程03】网络原理进阶 1. UDP协议 1.1 基本介绍 我们首先再来回顾UDP协议的基本特点: 无连接的不可靠传输的面向数据报的全双工的 既然谈到数据报,我们就来看一下UDP数据报的格式: UDP数据报分为报头和载荷部分,其…

网络协议与攻击模拟_09部署DHCP服务器

一、部署DHCP服务器 Windows server部署DHCP服务器 1、虚拟机网络架构理解 Vmware里面不同的虚拟机可以设置相同的Vmnet网络,也可以设置不同的Vmnet网络。两台虚拟机设置相同的Vmnet1网卡,可以看作为使用虚拟交换机将两台Vmnet1的虚拟机连接起来的。 …

OSPF协议解析及相关技术探索(C/C++代码实现)

OSPF(开放最短路径优先)是一种用于自治系统(AS)内部的路由协议,它是基于链路状态算法的。OSPF的设计目的是为了提供一种可扩展、快速收敛和高效的路由解决方案。 OSPF概念和特点 概念 自治系统(AS&#…