球面谐波(SH)因为其良好的性质活跃在NeRF、Plenoxels、3DGS等显隐式场景表示的方法中。 问:球面谐波是什么? 答:一组基函数。可以理解为傅里叶分解的一种特殊形式,即“任何函数都可以用这组基的算术组合来近似”。 先描述一种通用情况: 假设我们有一组基数为3的完备基函数:

[

e

1

(

x

)

,

e

2

(

x

)

,

e

3

(

x

)

]

[e_1(x), e_2(x),e_3(x)]

[e1​(x),e2​(x),e3​(x)] 我们存在一个目标函数

f

(

x

)

f(x)

f(x),那么

f

(

x

)

f(x)

f(x)可以用这组基函数来表达:

f

(

x

)

=

a

1

e

1

(

x

)

+

a

2

e

2

(

x

)

+

a

3

e

3

(

x

)

(1)

f(x)=a_1e_1(x)+a_2e_2(x)+a_3e_3(x)\tag{1}

f(x)=a1​e1​(x)+a2​e2​(x)+a3​e3​(x)(1)这里的

[

a

1

,

a

2

,

a

3

]

[a_1,a_2,a_3]

[a1​,a2​,a3​]就是这组基的系数了。当然,我们可以用更“细致”的正交基来拟合目标函数,一般对应着更多的基数。我们可以浅看一张图:

这里的n表示基数,用的是球面谐波基。由此可见,基数越多,拟合效果越佳。

如果对数学不那么苛求的人,只需要了解SH在NeRF中的使用,本文大概能满足这一需求。

球面谐波

球面谐波基,顾名思义,跟球面有关。

首先,我们来回顾一下极坐标的概念:用半径和角度的组合

(

r

,

θ

)

(r,\theta)

(r,θ)来代替笛卡尔坐标系下的

(

x

,

y

)

(x,y)

(x,y)。

r

(

θ

)

=

1

r(\theta) = 1

r(θ)=1表示半径为1的圆。 跟传统的笛卡尔坐标相比,极坐标天然适合处理圆的场景。那么三维极坐标就天然适合处理球面场景。 那么极坐标和球面谐波有什么关系呢?答:SH就是在极坐标下的基函数。 我们先看一下,三维极坐标是什么样子:

r

=

f

(

θ

,

ϕ

)

(2)

r = f(\theta, \phi)\tag{2}

r=f(θ,ϕ)(2) r(即图中的

ρ

\rho

ρ)表示半径,

θ

\theta

θ和

ϕ

\phi

ϕ表示观测角度。 我们通过

r

=

f

(

θ

,

ϕ

)

r = f(\theta, \phi)

r=f(θ,ϕ)来可视化SH基:

图3 球谐基可视化1

看起来像细胞或者某种外星生物,这也是让人觉得很不直观的地方。但换一种表达,可能大家就容易理解了(将距离用颜色来表达): 图4 球谐基可视化2 往往在三维重建里用的多的就是图4这一种。应用场景为:对空间中一个点的颜色表达与观测它的角度有关。那么,构建出函数:

c

=

f

(

θ

,

ϕ

)

(3)

\bold{c}=f(\theta, \phi)\tag{3}

c=f(θ,ϕ)(3) 这里不存在半径的变化,所以SH基函数也是保持球体的几何结构,不像图3中那么多异形。那么任意一个球形表面的颜色表达,可以用球谐基来分解: 我们看一下球谐基的数学表示:

Y

l

m

Y_l^m

Ylm​表示第

l

l

l阶的第

m

m

m个球谐基,在NeRF中

l

l

l的最大值通常取2或者3,而对应阶的

m

m

m取值范围为

[

l

,

l

]

[-l,l]

[−l,l]。上面的公式群就表示2阶球谐基的一共9个球谐基,只需拟合9个系数就可以完成函数的分解。对于最近火热的3DGS,默认采用3阶球谐基,有16个球谐基。通常,RGB这3个通道都会用一组球谐基,所以通常球谐系数还要

×

3

\times{3}

×3。

在工程实现中,会把上面的常数部分都计算出来先保存,我们观察代码可以发现。

球面谐波与NeRF

首次将SH引入NeRF的工作是PlenOctrees。论文中较详细地描述了SH的使用。 NeRF原本的数学表达为:

f

Θ

(

x

,

y

,

z

;

θ

,

ϕ

)

=

(

c

,

σ

)

(4)

f_\Theta(x,y,z;\theta,\phi)=(\bold{c},\sigma)\tag{4}

fΘ​(x,y,z;θ,ϕ)=(c,σ)(4) 这里的

f

Θ

f_\Theta

fΘ​表示MLP。而经过SH编码以后的表达式变为:

f

Θ

(

x

,

y

,

z

)

=

(

k

,

σ

)

(5)

f_\Theta(x,y,z)=(\bold{k},\sigma)\tag{5}

fΘ​(x,y,z)=(k,σ)(5) 这里的

k

\bold{k}

k表示球谐系数。颜色可以由球鞋系数进一步得到:

c

=

f

(

d

;

k

)

(6)

\bold{c}=f(\bold{d};\bold{k})\tag{6}

c=f(d;k)(6) 这里的k代表球谐系数,l和m分别代表球谐基的阶数和对应的基数:

总结

在NeRF或者3DGS等三维重建技术的背后,需要对空间点(或者高斯球)的空间位置

(

x

,

y

,

z

)

(x,y,z)

(x,y,z)和观测方向

(

ϕ

,

θ

)

(\phi,\theta)

(ϕ,θ)进行合理表示。我们发现,空间位置

(

x

,

y

,

z

)

(x,y,z)

(x,y,z)是笛卡尔坐标系下,而观测方向

(

ϕ

,

θ

)

(\phi, \theta)

(ϕ,θ)是球形坐标系下,不同坐标系可以选择不同的编码方式。 对空间坐标系的编码方式常见的有多分辨率哈希编码、频率编码; 对球形坐标系的编码方式最常见的就是球谐函数编码了~(频率编码不实用的原因是编码不紧凑);

球面谐波函数是最紧凑的球面坐标编码方式(至少是之一),任何关于

(

ϕ

,

θ

)

(\phi,\theta)

(ϕ,θ)的函数都可以由球谐基的组合来表示(即公式(1)的形式)。

参考:https://www.ti.uni-bielefeld.de/html/people/ddiffert/libShc/manual/fouriertransform.html

相关文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。