【三维重建】【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)=AEX+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=EA(X−μ)(X−μ)TAT=AE(X−μ)(X−μ)TAT=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变成了具有特定形状和方向的椭球。因此,可以通过对标准高斯分布(球)进行仿射变换得到任意高斯分布(椭球)。 协方差矩阵可以拖过旋转和缩放来表达。
协方差矩阵控制了椭球的形状和方向,其对角线元素决定椭球的伸缩程度,非对角线元素决定椭球的倾斜角度。
总结
尽可能简单、详细的介绍了高斯椭球的大小形状的控制原理。