【三维重建】【3DGS系列】【深度学习】3DGS的理论基础知识之如何控制高斯椭球
文章目录
- 【三维重建】【3DGS系列】【深度学习】3DGS的理论基础知识之如何控制高斯椭球
- 前言
- [仿射变换(Affine Transformation)](#仿射变换(Affine Transformation))
- 协方差矩阵控制椭球
- 总结
前言
在详细解析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变成了具有特定形状和方向的椭球。因此,可以通过对标准高斯分布(球)进行仿射变换得到任意高斯分布(椭球)。 协方差矩阵可以拖过旋转和缩放来表达。
协方差矩阵控制了椭球的形状和方向,其对角线元素决定椭球的伸缩程度,非对角线元素决定椭球的倾斜角度。
总结
尽可能简单、详细的介绍了高斯椭球的大小形状的控制原理。