【三维重建】【3DGS系列】【深度学习】3DGS的理论基础知识之协方差矩阵控制椭球
前言
在详细解析3DGS代码之前,首要任务是成功运行3DGS代码【win11下参考教程】,后续学习才有意义。本博客讲解3DGS的理论基础知识之协方差矩阵控制椭球,不涉及具体的模块代码。
仿射变换(Affine Transformation)
仿射变换是一种几何变换,是对两种简单变换进行叠加:线性变换(旋转、缩放等)和平移变换。仿射变换保留了直线和平行线的关系,即将直线映射为直线,且原本平行的线仍然保持平行;但面积、距离(长度)和角度可能会发生变化。
仿射变换的数学定义 公式表示:
y = A x + b y = Ax + b y=Ax+b
在三维空间中,其中:
x x x:输入向量(原始坐标),通常是一个3维向量 [ x 1 x 2 x 3 ] \left[ {\begin{array}{c} {{x_1}}\\ {{x_2}}\\ {{x_3}} \end{array}} \right]
x1x2x3
;
y y y:输出向量(变换后的坐标),3维向量 [ y 1 y 2 y 3 ] \left[ {\begin{array}{c} {{y_1}}\\ {{y_2}}\\ {{y_3}} \end{array}} \right]
y1y2y3
;
A A A:线性变换,一个 3 × 3 3×3 3×3的 R S RS RS矩阵;
b b b:平移变换 T T T。
平移(Translation)
平移操作通常通过向量加法来表示:
[ y 1 y 2 y 3 ] = [ x 1 x 2 x 3 ] + T = [ x 1 x 2 x 3 ] + [ t 1 t 2 t 3 ] \left[ {\begin{array}{c} {{y_1}}\\ {{y_2}}\\ {{y_3}} \end{array}} \right] = \left[ {\begin{array}{c} {{x_1}}\\ {{x_2}}\\ {{x_3}} \end{array}} \right] + T = \left[ {\begin{array}{c} {{x_1}}\\ {{x_2}}\\ {{x_3}} \end{array}} \right] + \left[ {\begin{array}{c} {{t_1}}\\ {{t_2}}\\ {{t_3}} \end{array}} \right]
y1y2y3
=
x1x2x3
+T=
x1x2x3
+
t1t2t3
旋转(Rotation)
旋转可以绕任意轴进行,但最常见的是绕坐标轴 x y z xyz xyz旋转,其旋转矩阵为:
R = R x ( γ ) R y ( β ) R z ( α ) = [ cos α cos β cos α sin β sin γ − sin α cos γ cos α sin β cos γ + sin α sin γ sin α cos β sin α sin β sin γ + cos α cos γ sin α sin β cos γ − cos α sin γ − sin β cos β sin γ − cos β cos γ ] R = {R_x}\left( \gamma \right){R_y}\left( \beta \right){R_z}\left( \alpha \right) = \left[ {\begin{array}{c} {\cos \alpha \cos \beta }&{\cos \alpha \sin \beta \sin \gamma - \sin \alpha \cos \gamma }&{\cos \alpha \sin \beta \cos \gamma + \sin \alpha \sin \gamma }\\ {\sin \alpha \cos \beta }&{\sin \alpha \sin \beta \sin \gamma + \cos \alpha \cos \gamma }&{\sin \alpha \sin \beta \cos \gamma - \cos \alpha \sin \gamma }\\ { - \sin \beta }&{\cos \beta \sin \gamma }&{ - \cos \beta \cos \gamma } \end{array}} \right] R=Rx(γ)Ry(β)Rz(α)=
cosαcosβsinαcosβ−sinβcosαsinβsinγ−sinαcosγsinαsinβsinγ+cosαcosγcosβsinγcosαsinβcosγ+sinαsinγsinαsinβcosγ−cosαsinγ−cosβcosγ
前面已经详细讲解过旋转了 ,这里不再过多的阐述。
[ y 1 y 2 y 3 ] = R [ x 1 x 2 x 3 ] \left[ {\begin{array}{c} {{y_1}}\\ {{y_2}}\\ {{y_3}} \end{array}} \right] = R\left[ {\begin{array}{c} {{x_1}}\\ {{x_2}}\\ {{x_3}} \end{array}} \right] y1y2y3 =R x1x2x3
缩放(Scaling)
缩放操作可以是均匀的也可以是非均匀的。均匀缩放意味着沿所有轴按相同的比例缩放,非均匀缩放则允许沿不同轴按不同的比例缩放。
S = [ s 1 0 0 0 s 2 0 0 0 s 3 ] S = \left[ {\begin{array}{c} {{{\rm{s}}_1}}&0&0\\ 0&{{{\rm{s}}_2}}&0\\ 0&0&{{{\rm{s}}_3}} \end{array}} \right] S=
s1000s2000s3
[ y 1 y 2 y 3 ] = S [ x 1 x 2 x 3 ] \left[ {\begin{array}{c} {{y_1}}\\ {{y_2}}\\ {{y_3}} \end{array}} \right] = S\left[ {\begin{array}{c} {{x_1}}\\ {{x_2}}\\ {{x_3}} \end{array}} \right] y1y2y3 =S x1x2x3
因此,线性变换A的矩阵为:
A = R S = [ ( cos α cos β ) s 1 ( cos α sin β sin γ − sin α cos γ ) s 2 ( cos α sin β cos γ + sin α sin γ ) s 3 ( sin α cos β ) s 1 ( sin α sin β sin γ + cos α cos γ ) s 2 ( sin α sin β cos γ − cos α sin γ ) s 3 ( − sin β ) s 1 ( cos β sin γ ) s 2 ( − cos β cos γ ) s 3 ] A = RS = \left[ {\begin{array}{c} {(\cos \alpha \cos \beta ){s_1}}&{(\cos \alpha \sin \beta \sin \gamma - \sin \alpha \cos \gamma ){s_2}}&{(\cos \alpha \sin \beta \cos \gamma + \sin \alpha \sin \gamma ){s_3}}\\ {(\sin \alpha \cos \beta ){s_1}}&{(\sin \alpha \sin \beta \sin \gamma + \cos \alpha \cos \gamma ){s_2}}&{(\sin \alpha \sin \beta \cos \gamma - \cos \alpha \sin \gamma ){s_3}}\\ {( - \sin \beta ){s_1}}&{(\cos \beta \sin \gamma ){s_2}}&{( - \cos \beta \cos \gamma ){s_3}} \end{array}} \right] A=RS=
(cosαcosβ)s1(sinαcosβ)s1(−sinβ)s1(cosαsinβsinγ−sinαcosγ)s2(sinαsinβsinγ+cosαcosγ)s2(cosβsinγ)s2(cosαsinβcosγ+sinαsinγ)s3(sinαsinβcosγ−cosαsinγ)s3(−cosβcosγ)s3
仿射变换通常使用齐次坐标来表示,并通过 4 × 4 4×4 4×4的复合变换矩阵来统一描述。将缩放、旋转和平移操作组合成一个 4 × 4 4×4 4×4的复合变换矩阵:
M = T R S = [ 1 0 0 t 1 0 1 0 t 2 0 0 1 t 3 0 0 0 1 ] [ cos α cos β cos α sin β sin γ − sin α cos γ cos α sin β cos γ + sin α sin γ 0 sin α cos β sin α sin β sin γ + cos α cos γ sin α sin β cos γ − cos α sin γ 0 − sin β cos β sin γ − cos β cos γ 0 0 0 0 1 ] [ s 1 0 0 0 0 s 2 0 0 0 0 s 3 0 0 0 0 1 ] = [ ( cos α cos β ) s 1 ( cos α sin β sin γ − sin α cos γ ) s 2 ( cos α sin β cos γ + sin α sin γ ) s 3 t 1 ( sin α cos β ) s 1 ( sin α sin β sin γ + cos α cos γ ) s 2 ( sin α sin β cos γ − cos α sin γ ) s 3 t 2 ( − sin β ) s 1 ( cos β sin γ ) s 2 ( − cos β cos γ ) s 3 t 3 0 0 0 1 ] M = TRS = \left[ {\begin{array}{c} 1&0&0&{{t_1}}\\ 0&1&0&{{t_2}}\\ 0&0&1&{{t_3}}\\ 0&0&0&1 \end{array}} \right]\left[ {\begin{array}{c} {\cos \alpha \cos \beta }&{\cos \alpha \sin \beta \sin \gamma - \sin \alpha \cos \gamma }&{\cos \alpha \sin \beta \cos \gamma + \sin \alpha \sin \gamma }&0\\ {\sin \alpha \cos \beta }&{\sin \alpha \sin \beta \sin \gamma + \cos \alpha \cos \gamma }&{\sin \alpha \sin \beta \cos \gamma - \cos \alpha \sin \gamma }&0\\ { - \sin \beta }&{\cos \beta \sin \gamma }&{ - \cos \beta \cos \gamma }&0\\ 0&0&0&1 \end{array}} \right]\left[ {\begin{array}{c} {{s_1}}&0&0&0\\ 0&{{s_2}}&0&0\\ 0&0&{{s_3}}&0\\ 0&0&0&1 \end{array}} \right] = \left[ {\begin{array}{c} {(\cos \alpha \cos \beta ){s_1}}&{(\cos \alpha \sin \beta \sin \gamma - \sin \alpha \cos \gamma ){s_2}}&{(\cos \alpha \sin \beta \cos \gamma + \sin \alpha \sin \gamma ){s_3}}&{{t_1}}\\ {(\sin \alpha \cos \beta ){s_1}}&{(\sin \alpha \sin \beta \sin \gamma + \cos \alpha \cos \gamma ){s_2}}&{(\sin \alpha \sin \beta \cos \gamma - \cos \alpha \sin \gamma ){s_3}}&{{t_2}}\\ {( - \sin \beta ){s_1}}&{(\cos \beta \sin \gamma ){s_2}}&{( - \cos \beta \cos \gamma ){s_3}}&{{t_3}}\\ 0&0&0&1 \end{array}} \right] M=TRS= 100001000010t1t2t31 cosαcosβsinαcosβ−sinβ0cosαsinβsinγ−sinαcosγsinαsinβsinγ+cosαcosγcosβsinγ0cosαsinβcosγ+sinαsinγsinαsinβcosγ−cosαsinγ−cosβcosγ00001 s10000s20000s300001 = (cosαcosβ)s1(sinαcosβ)s1(−sinβ)s10(cosαsinβsinγ−sinαcosγ)s2(sinαsinβsinγ+cosαcosγ)s2(cosβsinγ)s20(cosαsinβcosγ+sinαsinγ)s3(sinαsinβcosγ−cosαsinγ)s3(−cosβcosγ)s30t1t2t31
[ y 1 y 2 y 3 1 ] = M [ x 1 x 2 x 3 1 ] \left[ {\begin{array}{c} {{y_1}}\\ {{y_2}}\\ {{y_3}}\\ 1 \end{array}} \right] = M\left[ {\begin{array}{c} {{x_1}}\\ {{x_2}}\\ {{x_3}}\\ 1 \end{array}} \right] y1y2y31 =M x1x2x31
协方差矩阵控制椭球
高斯分布: x ∼ N ( μ , Σ ) {\rm{x}} \sim N\left( {\mu ,\Sigma } \right) x∼N(μ,Σ)。其中:
x x x是随机变量向量;
μ = [ μ 1 , μ 2 , μ 3 ] \mu = \left[ {{\mu _1},{\mu _2},{\mu _3}} \right] μ=[μ1,μ2,μ3]是均值向量;
Σ = [ σ 1 2 σ 12 σ 13 σ 21 σ 2 2 σ 22 σ 31 σ 32 σ 3 2 ] \Sigma = \left[ {\begin{array}{c} {\sigma _1^2}&{{\sigma _{12}}}&{{\sigma _{13}}}\\ {{\sigma _{21}}}&{\sigma _2^2}&{{\sigma _{22}}}\\ {{\sigma _{31}}}&{{\sigma _{32}}}&{\sigma _3^2} \end{array}} \right] Σ=
σ12σ21σ31σ12σ22σ32σ13σ22σ32
是协方差矩阵, x y z xyz xyz维度之间的协方差(相关性)和方差。
标准高斯分布: x ∼ N ( 0 → , I ) {\rm{x}} \sim N\left( {\overrightarrow 0 ,I} \right) x∼N(0,I)
0 → = [ 0 , 0 , 0 ] \overrightarrow 0 = \left[ {{0},{0},{0}} \right] 0=[0,0,0]是均值向量;
I = [ 1 0 0 0 1 0 0 0 1 ] I = \left[ {\begin{array}{c} 1&0&0\\ 0&1&0\\ 0&0&1 \end{array}} \right] I=
100010001
是协方差矩阵(单位矩阵),各维度之间没有相关性,且每个维度的方差都为1。
高斯分布的仿射变换: x N ˜ ( μ , Σ ) ⇒ w N ˜ ( A μ + b , A Σ A T ) {\rm{x}}\~N\left( {\mu ,\Sigma } \right) \Rightarrow w\~N\left( {A\mu + b,A\Sigma {A^T}} \right) xN˜(μ,Σ)⇒wN˜(Aμ+b,AΣAT)
证明
对于任意随机向量 Z Z Z,协方差矩阵定义为:
Σ = E [ ( X − E ( X ) ) ( X − E ( X ) ) T ] \Sigma= E\left[ {\left( {X - E(X) } \right){{\left( {X - E(X) } \right)}^T}} \right] Σ=E[(X−E(X))(X−E(X))T]
代入 Y = A X + b Y = AX + b Y=AX+b求期望:
E ( Y ) = E [ ( A X + b ) ] = A E [ X ] + b = A μ + b E(Y) = E\left[ {\left( {AX + {\rm{b}}} \right)} \right] = AE\left[ X \right] + b = A\mu + b E(Y)=E[(AX+b)]=AE[X]+b=Aμ+b
代入 Y = A X + b Y = AX + b Y=AX+b求协方差矩阵:
Σ ′ = E [ ( Y − E ( Y ) ) ( Y − E ( Y ) ) T ] = E [ ( A X + b − A μ − b ) ( A X + b − A μ − b ) T ] = E [ ( A X − A μ ) ( A X − A μ ) T ] = E [ A ( X − μ ) ( X − μ ) T A T ] = A E [ ( X − μ ) ( X − μ ) T ] A T = A Σ A T \Sigma \prime = E\left[ {\left( {Y - E(Y)} \right){{\left( {Y - E(Y)} \right)}^T}} \right] = E\left[ {\left( {AX + b - A\mu - b} \right){{\left( {AX + b - A\mu - b} \right)}^T}} \right] = E\left[ {\left( {AX - A\mu } \right){{\left( {AX - A\mu } \right)}^T}} \right] = E\left[ {A\left( {X - \mu } \right){{\left( {X - \mu } \right)}^T}{A^T}} \right] = AE\left[ {\left( {X - \mu } \right){{\left( {X - \mu } \right)}^T}} \right]{A^T} = A\Sigma {A^T} Σ′=E[(Y−E(Y))(Y−E(Y))T]=E[(AX+b−Aμ−b)(AX+b−Aμ−b)T]=E[(AX−Aμ)(AX−Aμ)T]=E[A(X−μ)(X−μ)TAT]=AE[(X−μ)(X−μ)T]AT=AΣAT
对于任意高斯分布的协方差矩阵 Σ \Sigma Σ进行特征值分解:
Σ = Q ⋅ Λ ⋅ Q T = Q ⋅ Λ 1 2 Λ 1 2 ⋅ Q T \Sigma = Q \cdot \Lambda \cdot {Q^T} = Q \cdot {\Lambda ^{\frac{1}{2}}}{\Lambda ^{\frac{1}{2}}} \cdot {Q^T} Σ=Q⋅Λ⋅QT=Q⋅Λ21Λ21⋅QT
将 R R R替换成 Q Q Q, Λ 1 2 {\Lambda ^{\frac{1}{2}}} Λ21替换成 S S S:
Σ = R ⋅ S ⋅ I ⋅ S T ⋅ R T = A ⋅ I ⋅ A T \Sigma = R \cdot S \cdot I \cdot {S^T} \cdot {R^T} = A \cdot I \cdot {A^T} Σ=R⋅S⋅I⋅ST⋅RT=A⋅I⋅AT
A A A矩阵包含了旋转和缩放的信息,标准高斯分布(单位矩阵 I I I)通过变换矩阵 A A A变成了具有特定形状和方向的椭球。因此,可以通过对标准高斯分布(球)进行仿射变换得到任意高斯分布(椭球)。 协方差矩阵可以拖过旋转和缩放来表达。
协方差矩阵控制了椭球的形状和方向,其对角线元素决定椭球的伸缩程度,非对角线元素决定椭球的倾斜角度。
总结
尽可能简单、详细的介绍了协方差矩阵如何控制椭球的变化。