---
tags: [2025_Spring]
---
# 具形視覺筆記
## Pinhole Camera
把 3D 空間中的點,投影到某個點後面距離 $f$ 的 2D 平面上。
## Homogeneous Coordinates
用 $n+1$ 維來表示 $n$ 維座標,在最後加一個維度,成倍數的點對應到同一個 $n$ 維座標,相當於一條過原點的直線。
用來表示針孔相機:
$$
x=f\frac{X}{Z},\quad y=f\frac{Y}{Z}\\
\begin{bmatrix}1&0&0&0\\0&1&0&0\\0&0&1&0\end{bmatrix}\begin{bmatrix}X\\Y\\Z\\1\end{bmatrix}=\begin{bmatrix}X\\Y\\Z\end{bmatrix}\Rightarrow \begin{bmatrix}X/Z\\Y/Z\\1\end{bmatrix}
$$
也可能需要縮放和平移:
$$
\begin{bmatrix}f&0&p_x\\0&f&p_y\\0&0&1\end{bmatrix}\begin{bmatrix}X/Z\\Y/Z\\1\end{bmatrix}=\begin{bmatrix}f\ X/Z+p_x\\f\ Y/Z+p_y\\1\end{bmatrix}
$$
可以比一般二維矩陣線性變換做到更多事,除了 Euclidean(平移、旋轉)、Similarity(加上縮放)、Affine(加上推移),還可以做Projective(**透視變換**,比如正方形變成梯形)。
會發現 2D 到 3D 是不明確的,$x=PX=PHH^{-1}X=\tilde{P}\tilde{X}$。
## Image Rectification with Projective Transformations
Task: 把一張 2D 圖片轉正到與另一張不同角度拍的 2D 圖片一樣。
作法:先找出對應點(correspondence),用特徵提取的演算法,比如 SIFT、CNN,再用 The Direct Linear Transformation Algorithm 找出 Transformation matrix $H$。
## Simple Stereo System
像人眼一樣,知道兩個相機的位置,則只需要兩張圖就能定位一個點。
兩個相機未必要都往正前方看,因為可以校正到正前方。
## Epipolar Geometry
知道相機位置和姿勢(角度等),則搜尋 Pixel Correspondence 時能夠限制在一條直線上。
### 概念
* Baseline: 兩個相機的光心連線
* Epipole: Baseline 與影像平面的交點
* Epipolar Line: 對於某物體,其在影像平面的投影與 Epipole 連線的直線。
* Epipolar Plane: 對於某物體,其與兩相機光心連線的平面。
把對於某個點 p,把相機 A 的 Epipolar Line 對應到相機 B 的影像平面上,就能夠限制搜尋範圍在 Epipolar Line (一條直線)上,也就是在空間中 p 與相機 A 的連線上。
把兩個相機的圖片校正後,可以發現 Baseline 與影像平面交在無窮遠處。
### 數學表示
假設對於一個點 x,相機 A 中對應到 X(以各自相機光心作為原點,自己的座標系),相機 B 中對應到 X',則有:$X'=RX+T$,其中 $R$ 為兩個相機間的旋轉矩陣,$T$ 為兩個相機間的平移向量。
$T\times X'=T\times (RX+T)=T\times RX$,因此 $X'\cdot (T\times X')=X'\cdot (T\times RX)=0$。
當表示外積 $a\times b$,可以變成 skew matrix $[a]_x$ 與 $b$ 相乘,即 $[a]_xb$。
Essential Matrix: Let $E=T_xR$、與 X 平行的 $p$、與 X; 平行的 $p'$,則有 Epipolar constraint $p'^TEp=0$。其中 $Ep=T_xRp=T\times Rp$
## Reconstruct 3D Model from Random Images
可以從網路上各種角度拍羅馬競技場的圖片,重建 3D 模型。
### 初始方法
先找 correspondence、estimate 3D、再 optimize。
### SIFT 的大致方法
找出一張圖的**有趣的點**(光影變化大之類的?),並轉換成**特徵向量**,並把有重疊的圖片兩兩配對。
#### RANSAC Algorithm
隨機找出一些 correspondence,算出 Fundamental Matrix,如果其他 correspondence 也符合那代表是個好的 Fundamental Matrix。
### Bundle Adjustment
對於所有 3D 空間中的點,讓它投影到平面上的位置與實際結果最接近。Minimize RMS error。
## DUSt3R
[Arxiv](https://arxiv.org/abs/2312.14132),用神經網路,原理待補。
甚至可以用影片建構一個環境及動作(4D)
## 3D Representation
### 要考慮的點
### 表示平面的方式
* Depth Map: 一個 2D 圖片,每個 pixel 代表一個深度值。
* 是一個 2.5D 表示法,離不開 2D 的圖像。
* Surface Normal Maps: 一個 2D 圖片,每個 pixel 的三原色代表法向量的方向。可以用 Depth Map 做微分得到。
* 缺點:只能得到可見部分。
* Point Cloud: 一堆 3D 點的集合,沒有順序。
* 可能在物體上並不是均勻分布、無法表示連接性,同個物體的不同 Point Cloud 之間可能有很大差異,無法簡單的以 L2 等方式來比較。
* Metics:
* Chamfer Distance: 兩個 Point Cloud 之間的最小距離,對於 $S_1, S_2$ 兩個 Point Cloud,$d(S_1, S_2)=\sum_{x\in S_1}\min_{y\in S_2}\|x-y\|^2+\sum_{y\in S_2}\min_{x\in S_1}\|x-y\|^2$。
* 點可以Render,把點壓成圓盤就行,但還是會有問題。
* Mesh: 表面以一堆三角形的集合表示,相當於把 Point Cloud 連起來,用另一個列表紀錄每個三角形的面是哪三個點。
* 點的順序不重要,但面裡面的點順序很重要,代表面的方向。
* > 修改 Mesh 是一個大的研究問題
* > Remeshing: 重新生成 Mesh,可能在更不細緻的地方用更少的點表示。
* Parametric Model: 用數學參數式表示。
* 例如貝茲曲線、貝茲曲面。
* 缺點
* 沒有全局資訊,例如無法知道一個點是否在形狀內。
* 無法簡單 render。
### 表達物體的材質的資訊
* Parametric Model(Implicit Surfaces),比如 $x^2+y^2=3^2$,函數值的正負表示在表面的哪一邊。也可以用 min、max 表示集合操作
* Signed Distance Function(SDF): 一個函數,對於每個點,給出最近表面的距離。與 Parametric Model(Implicit Surfaces) 相似。但不用學具體函數,比較好一點。
* Voxel Grid: 3D 網格,每個格子有一個值。
* 優點:很好 sample、適合 Convolution
* 缺點:需要很多記憶體、可能需要很高解析度來表示細節。
* 改進:octree,把需要細節的部分才細分。但不能微分,神經網路無法輸出 Octree。若要 sample 需要經過很多層。
* Constructive Solid Geometry(構造實體幾何):建模人員用布林操作建模。
* Tetrahedral Mesh: 用四面體表示。
### 表示間的轉換
* Continuous to Voxels: Sampling
* Voxels to Continuous: Interpolation 插值
* Voxels to Mesh: 用 Marching Cubes Algorithm
* 對於每個方格,找出八個頂點的組合類型,並給出對應的 mesh
* 優點:可平行化、不用學習
* 缺點:Ambiguity 導致有問題,可能需要 remesh 等
* Mesh to Point Cloud: Sample points on triangles
* 隨機 sample 會導致不均勻,不夠好
* Farthest Point Sampling: 選擇離已選點最遠的點,這邊的距離要是 Geodesic,在平面上的距離,而不是 Euclidean。結果會好一點。
* Point Cloud to Mesh? Inherently an ill-posed Problem(本質上不適定)
* Point Cloud to Implicit Surface: 找出最近的點,並算出法向量,進而得出距離。
* 找法向量過程相當於 to Surface Normals
* Implicit Surface to Mesh,先 Discritize,再用 Marching Cubes Algorithm
## Volume Rendering
可參考[知乎文章](https://zhuanlan.zhihu.com/p/595117334)以及[疑似原文](https://www.scratchapixel.com/lessons/3d-basic-rendering/volume-rendering-for-developers/volume-rendering-summary-equations.html)
### 現實現像的觀察
* Absorption: 霧等介質會吸收光線,使得物體看起來暗
* Emission: 物體自己發光
* Scattering: 散射,使光線變模糊
* Forward: 來自別的方向的光被散射到這個方向
* Backward: 來自這個方向的光被散射到別的方向
### Prerequisite: Solid Angle 立體角
一般的角度可以定義為圓弧長度除以半徑,而立體角就可以類似的定義為表面積除以半徑平方。
因此會說一個圓有 $2\pi$ 的弧度,而一個球有 $4\pi$ 的**球面度(sr)**。
可以用積分計算表面積。
### 描述光的方式
#### Radiant Intensity
輻射強度 $I$,從一個來源發出的光
一個點光源的光功率(輻射通量)為 $\Phi$,就是把輻射強度 $I$ 對表面積分。因此在均勻的點光源,$I=\frac{\Phi}{4\pi}$。
#### Irradiance
輻照度 $E$,在某個點每單位面積吸收的功率
$E(x)=\frac{d\Phi}{dA}$,$dA$ 是一個小面積,$d\Phi$ 是這個小面積上吸收的光。
若平面的法向量與光線呈現一個夾角 $\theta$,則因為面積乘以 $\cos\theta$,但輻射通量不變,輻照度也會乘以 $\cos\theta$。
輻照度會隨著距離平方反比衰減。
#### Radiance
輻射率 $L(x,\omega)$,在某位置($x$)、某方向($\omega$)上,通過(或發出、吸收)單位面積(與光線垂直)、單位立體角的輻射通量。
$$
L(x,\omega)=\frac{d I(x,\omega)}{dA_{\perp}}=\frac{d^2\Phi(x,\omega)}{d\omega dA\cos\theta}\\
$$
* 發射時,常常會以輻射強度 $I$ 來表示,所以再除以單位面積
$$
L_o(x,\omega)=\frac{dI(x,\omega)}{dA\cos\theta}
$$
* 吸收時,常常會以輻照度 $E$ 來表示,所以再除以單位立體角
$$
L_i(x,\omega)=\frac{dE(x,\omega)}{d\omega \cos\theta}
$$
##### 環境的輻照度
知道輻射率 $L_i(x,\omega)$,則對於立體角在一個半球上積分,可以得到半球的輻照度 $E$。
均勻半球對於一個水平的小平面,因為有些光線是斜的,因此其實輻照度是 $E=L\pi$
### Light Field
描述空間中所有光線的輻射率的分布。若知道物體的每個點以什麼強度發射光線、以及介質的資料,則可以用這些光線來 render 圖片,這就是 Volume Rendering。
### vs multi-view stereo
multi-view stereo(也就是前面提到的用 correspondence 重建 3D 模型)相當於假設物體散射的光線是均勻的,從任何角度看到的顏色、強度都一樣,但事實顯然不是如此。
### 在一個點的光線變化
吸收率 $\sigma_a$ 的定義為:經過單位長度被吸收的機率。類似的,散射率 $\sigma_s$ 為經過單位長度被散射的機率。
探討不同情況輻射率的變化量:
* Absorption
經過一塊長度 $dz$、吸收率 $\sigma_a$ 的介質
$$
dL=-\sigma_a(x)L(x,\omega)dz
$$
* Emission
某段介質會發出光,輻射率 $L_e$,則通過長度 $dz$ 的介質
$$
dL=\sigma_a(x)L_e(x,\omega)dz
$$
* Out Scattering
和吸收類似,但要用散射率
$$
dL=-\sigma_s(x)L(x,\omega)dz
$$
* In Scattering
和發射類似,但要用散射率
$$
dL=\sigma_s(x)L_s(x,\omega)dz
$$
其中 L_s 代表從所有方向進來的輻射率。
### Radiative Transfer Equation
減掉吸收、減掉外散射、加上發射、加上內散射,就是一小塊介質產生的光線變化。
(以下省略 $(x),(x,\omega)$)
$$
\begin{align*}
dL&=-\sigma_aLdz-\sigma_sLdz+\sigma_aL_edz+\sigma_sL_sdz\\
&=-\sigma_aLdz+\sigma_aL'dz\\
&=\sigma_a(L'-L)dz
\end{align*}
\\
\text{其中 } L'=L_e+\frac{\sigma_s}{\sigma_a}(L_s-L)
$$
### Transmittance (Absorption-only)
$T(x,y)$: 有多少比例的輻射率從 x 往 y 的方向($\omega$)會到達 y?只考慮吸收。
* 非均勻介質: 用積分表示
$$
\begin{aligned}
&dL(x,\omega)=-\sigma_a(x)L(x,\omega)dz\\
&\Rightarrow L(x_0+\omega z,\omega)=\exp\left(-\int_{t=0}^z\sigma(x+\omega t)dt\right)L(x_0,\omega)\\
&\Rightarrow T(x,y)=\exp\left(-\int_{t=0}^{\|x-y\|}\sigma(x+\omega t)dt\right)
\end{aligned}
$$
* 均勻介質:
$$
e^{-\sigma\|x-y\|}
$$
#### 均勻介質 - Volume Rendering
考慮背景光($x_z$)經過吸收後,加上中途發射的光線經過吸收的總和。
$$
L(x,\omega)=T(x_0,x_z)L(x_z,\omega)\\
+
\int_0^z T(x_0,x_t)\sigma_tL_e(x_t,\omega)dt\\
\approx
\approx \sum_{i=1}^{N}T\left(x_0,x_{t_i}\right)\left(emission_{t_{i+1}}^{t_i}\right)
$$
#### 非均勻介質 - Volume Rendering
#### Volume Rendering with Voxel Grid
#### Spherical Harmonics Model View-Dependent Lighting
#### NEural Radiance Field (NERF)
直接叫模型學習:輸入位置、方向,輸出顏色、透明度。再進行 Volume Rendering,與圖片相比算出梯度後訓練模型。
## 3D Gaussian Splatting
[EWA Splatting](https://courses.cs.duke.edu/spring03/cps296.8/papers/EWAVolumeSplatting.pdf)
之前的方法都是對於相機看出去的每個像素計算,但其實可以在有物體的地方再計算就好。
3D Gaussian 代表一個橢球,由中心座標($\mathbf{\mu}$)、3x3 的 Covariance matrix($\Sigma$)、顏色、透明度表示,其中 Covariance matrix 代表了橢球的長度、形狀、方向等。
可理解為 $\Sigma=R S S^\top R^\top$,其中 $R$ 是旋轉矩陣,$S$ 是縮放矩陣。
3D Gaussian 的 PDF:
$$
G(\textbf{x})=e^{-1/2(\textbf{x}-\mathbf{\mu})^\top \Sigma^{-1} (\textbf{x}-\mathbf{\mu})}
$$
(實際上會乘上一個正規化的常數:$\frac{1}{2\pi|V|^{1/2}}$)
簡報中表示為 $\mathcal{G}_V(x-t)$,$V$ 是 Covariance matrix,$t$ 是 Gaussian 的中心。
> 簡報中 $t,p$ 實際上有混用的情況,因此我一律使用 $t$ 代表中心,$p$ 代表 C2W 的位移。
### 大致具體過程
* 先以 SfM 等方式,產生一些點,用來初始化 Gaussian 的位置,作為 Gaussian 的中心。
* 投影到圖像上,與原本圖像對比,用誤差來更新 Gaussian 的位置、大小、顏色、透明度等參數。
### 渲染
無腦的方式:對於每個像素對應到 world space 中的方向,對深度積分,但太花時間。
#### 加速渲染
如果能把 Gaussian 投影到一個 2D 平面,那就可以很簡單的加總,不用對於每個像素、每個深度無論有無物體積分。
投影時需要有一個 space,使得以相機為中心的射線會與平面的法向量正交,實際上會以第三維度作為平面的法向量,這就是 ray space。
積分會變成:
$$
q(\hat{\mathbf{x}})=\int_{\mathbb{R}} \mathcal{G}_V^3(\mathbf{x}-t)dx_2=\mathcal{G}_{\hat{V}}^2(\hat{\mathbf{x}}-\hat{t})
$$
其中 $\hat{V}_{2\times 2}$ 是 $V_{3\times 3}$ 的左上角 $2\times 2$ 的部分。
過程是先把 world space 轉換成 camera space,再轉換為 ray space。
##### Notation
* hat:去掉第三維度,上方的 hat 即為此意思。
* $\mathbf{u}$:camera space 的座標
* $\mathbf{x}$:ray space 的座標
* $t_k$:world space 的 Gaussian 中心
* $\mathbf{u}_k$:camera space 的 Gaussian 中心
* $\mathbf{x}_k$:ray space 的 Gaussian 中心
* $V_k''$:world space 的 covariance matrix
* $V_k'$:camera space 的 covariance matrix,$V_k'=WV_k''W^\top$
* $V_k$:ray space 的 covariance matrix,$V_k=JV_k'J^\top=JWV_k''W^\top J^\top$
* $\phi$:camera-to-world transformation
##### 1. world space 到 camera space
把 Gaussian 從 world space 轉換到 camera space:由於 camera space 到 world space 是以 camera-to-world matrix 轉換,因此可以用它的反矩陣來轉換。
若 C2W 是 $\phi(x)=Wx+p$
$$
\mathcal{G}_{V_k''}(\phi^{-1}(\mathbf{u})-t_k)=\frac{1}{|W^{-1}|}\mathcal{G}_{V_k'}(\mathbf{u}-\mathbf{u}_k)
$$
##### 2. camera space 到 ray space
可惜 camera space 轉換到 ray space 不是 affine mapping:
$$
\mathbf{x}=\begin{pmatrix}x_0\\x_1\\x_2\end{pmatrix}
=m(\mathbf{u})
=\begin{pmatrix}u_0/u_2\\u_1/u_2\\ \|\mathbf{u}\|\end{pmatrix}
$$
但其實可以用它的 Jacobian 來近似:
$$
\mathbf{x}=m_{\mathbf{u}_k}(\mathbf{u})=\mathbf{x}_k+J_{\mathbf{u}_k}\cdot(\mathbf{u}-\mathbf{u}_k)\\
J_{\mathbf{u}_k}=\frac{\partial m}{\partial \mathbf{u}}(\mathbf{u}_k)
$$
$\mathbf{u}_k$:中心在 camera space 的座標。
因此 Gaussian 為:
$$
\frac{1}{|W^{-1}||J^{-1}|}\mathcal{G}_{V_k}(\mathbf{x}-\mathbf{x}_k)
$$
##### 3. Integrate
$$
\begin{align*}
q_k(\hat{\mathbf{x}})&=\int_{\mathbb{R}}\mathcal{G}_{V_k}(\hat{\mathbf{x}}-\hat{\mathbf{x}_k},x_2-x_{k2})dx_2\\
&=\frac{1}{|W^{-1}||J^{-1}|}\mathcal{G}_{\hat{V_k}}(\hat{\mathbf{x}}-\hat{\mathbf{x}_k})
\end{align*}
$$
### 好處
把物體以很多 3D Gaussian 表示後,可以
* 追蹤每個橢圓體的移動,進而做預測
* 明確、互相獨立:隨意縮放、貼上任意模型到任意場景
* particle-based:可以使用既有的物理模擬
## 4D Modeling
動作額外加了很多資訊,通常會是互動時所必須的。
如何描述運動?簡單的作法是像小球一樣當成剛體運動,但背景的移動難以表達,可以切分得很細,比如用每個粒子、像素的移動來表示。這也是模擬流體的方式。
人則是 Articulated Body,也就是具有關節,每個肢體會彼此牽連。
### 描述運動方式
* Particle motion(Lagrangian representation): 在河裡丟樹葉,紀錄樹葉的運動。
* Vector field(Eulerian representation): 在河裡放固定的偵測器,紀錄水流的運動。
### Optical Flow
如何從 2D 影像中找出動作?用 Optical Flow,就是要知道像素如何運動。
#### Brightness Constancy Constraint
同一個點移動時通常顏色不太會變,假設有個點從 $(x,y)$ 以 $(u,v)$ 的速度移動:
$$
I(x+u\Delta t,y+v\Delta t,t+\Delta t)\approx I(x,y,t)
$$
多變數泰勒展開:
$$
\begin{aligned}
&f(x,y)\approx f(a,b)+\frac{\partial f}{\partial x}(a,b)(x-a)+\frac{\partial f}{\partial y}(a,b)(y-b)\\
&I(x+u\Delta t,y+v\Delta t,t+\Delta t)\approx I(x,y,t)+\frac{\partial I}{\partial x}(x,y,t)u\Delta t+\frac{\partial I}{\partial y}(x,y,t)v\Delta t+\frac{\partial I}{\partial t}(x,y,t)\Delta t\\
&\Rightarrow \frac{\partial I}{\partial x}(x,y,t)u\Delta t+\frac{\partial I}{\partial y}(x,y,t)v\Delta t+\frac{\partial I}{\partial t}(x,y,t)\Delta t\approx 0\\
&\Rightarrow \frac{\partial I}{\partial x}\frac{\partial x}{\partial t}+\frac{\partial I}{\partial y}\frac{\partial y}{\partial t}+\frac{\partial I}{\partial t}\approx 0\\
\end{aligned}
$$
$\frac{\partial I}{\partial x}$ 可以用右邊像素減去左邊像素,y 也一樣。
$\frac{\partial I}{\partial t}$ 可以用下一個時間的像素減去現在的像素。
但有 u v 兩個未知數,需要其他限制。
#### Lucas-Kanade
改進 Brightness Constancy Constraint,使用 Spatial Consistency Constraint:假設鄰近的點有類似的運動。有 n 個點,則變成:
$$
\begin{bmatrix}
\frac{\partial I(x_1,y_1)}{\partial x} & \frac{\partial I(x_1,y_1)}{\partial y}\\
\vdots & \vdots\\
\frac{\partial I(x_n,y_n)}{\partial x} & \frac{\partial I(x_n,y_n)}{\partial y}
\end{bmatrix}
\begin{bmatrix}
\frac{\partial x}{\partial t}\\
\frac{\partial y}{\partial t}
\end{bmatrix}
=-\begin{bmatrix}
\frac{\partial I(x_1,y_1)}{\partial t}\\
\vdots\\
\frac{\partial I(x_n,y_n)}{\partial t}
\end{bmatrix}
$$
寫成 $Ad=b$,則可能會用 $d=(A^\top A)^{-1}A^\top b$ 近似,但當 $A^\top A$ 病態(Pathological)時(eigenvalue 是 0 或很小),解會數值不穩定。
與圖像連結,低紋理區域(如天空)的空間梯度很小,因此 $A^\top A$ 的 eigenvalue 很小,讓解不穩定。
此方法其實基於三個假設:
* 一階泰勒展開,假設運動幅度不大
* Brightness constancy constraint: 假設運動不會改變亮度
* Spatial consistency constraint: 假設運動在空間上是連續的
在運動太大時會失敗,因此可以先把影像畫質變低(相當於附近的點取平均),這樣運動就變小,再縮放回原本的大小。
如果 Spatial consistency 抓的點實際上是不同物體或景深,則效果會很差。如果能做物體的 segmentation 會好很多。
#### 這個年代的作法
用個神經網路,直接輸出 x y 軸的運動量。
### 3D Motion (4D)
給定單相機(monocular)的 2D 影片,希望能
* 在固定時間模擬不同視角
* 在固定視角模擬不同時間
* 在不同時間模擬不同視角
第一個想法,在每個時刻做 3D Volume Rendering 以 fit 出好的模型,不太好,因為沒有考慮隨時間的變化
#### Model the Motion \explicitly
[Arxiv](https://arxiv.org/abs/2011.12950)
Model 空間中每個點的運動
##### NERF to SpatioTenporal NERF
NERF 是輸入 Position+Direction 輸出 Color+Density。只要在輸入加上時間的維度就行了。
問題
* 但由於單相機,每個時刻只有一個視角的影像。可以用 Depth Loss 來改善。
* 被遮蔽的部分還是沒有被 Constain。用 Static scene loss,因為很大部分是靜態的,把其他時間的像素拿來用:$\|F(x,t)-F(x,t')\|_2^2$
* 還是沒有追蹤每個點隨時間的變化
#### Neural Scene Flow Fields
[Arxiv](https://arxiv.org/abs/2011.13084)
用某時間的每個點對應到其他時刻並 render。
問題:物體可能被遮蔽,比較難跟蹤點的移動。
解法:
* 發生遮蔽的部分忽略掉,比如讓 Model 預測 i 到 j 哪些點會被遮蔽。把 Color loss 乘上遮蔽的機率,但還要加一項使遮蔽比例盡量低。
還有一個 Constraint 能利用:Cycle consistency constraint,預測 i 到 j 的運動,加上預測 j 到 i 的運動,應該要接近 0。
還是不太夠,如果能把靜態與動態區域分開,動態以上面講的方法做,靜態用原本的 NeRF,會更好一點。
#### 4D-Rotor Gaussian Splatting
[Arxiv](https://arxiv.org/abs/2402.03307)
用 4D Gaussian,因為 Gaussian 是局部連續的,所以可能需要切成很多塊。可以用 2D 平面加上時間變成 3D Gaussian 來想像。
這樣原生就支援了 Optical Flow,因為如果一個 Gaussian 斜斜的,也就是在不同時間的位置不太一樣,就代表了它的運動。
#### Dynamic 3D Gaussians
[Arxiv](https://arxiv.org/abs/2308.09713)
用同一個集合的 3D Gaussian 表示整個動態場景。大小(縮放矩陣)、顏色、透明度、background logit(上面提到作為背景的機率)不能改變,每個 Gaussian 只能改中心位置(三維)、旋轉角度(以四元數表示角度,避免 Gimbal Lock,可參考 [3b1b](https://youtu.be/zjMuIxRvygQ))。
但位置能隨意改變還是太自由,會為了 fit 而太不穩定。可以用基於物理的假設,因為鄰近的 Gaussian 通常會像是剛體一樣,相對位置與旋轉不太會變。
還可以加上 Local-orientation loss: 相鄰的 Gaussian 有類似的旋轉角度。Local-translation loss: 相鄰的 Gaussian 有類似的位移。雖然與剛體假設有點重複,但會讓學習變得更快。
#### DynaDUSt3R
[Arxiv](https://arxiv.org/abs/2412.09621)
聽不太懂
## Generative Model
[Arxiv](https://arxiv.org/abs/2311.16102): Generative Model 可以作為 Discriminative Model,把圖片加上噪音,讓模型針對某個分類,預測加入的噪音為何,與真實值比較。
[Arxiv](https://arxiv.org/abs/2301.00704): 結合
## Lagrangian Incremental Potential
### Contact Modeling
#### 問題
1. 如何讓物體只有在接觸時才有摩擦力?
2. 如何讓物體在接觸時不會穿過去?
3. 在有摩擦力、不能穿過去的情況下,要如何解 Optimization?
#### Incremental Potential Contact
[Paper on ACM](https://dl.acm.org/doi/abs/10.1145/3386569.3392425)
Contraint 太多,那不如把它們都變成 Optimization 問題。
* Barrier Energy:防止穿透,距離很近時,才有影響。
$$
b(d,\hat d)=\begin{cases}
-(d-\hat d)^2\ln(\frac{d}{\hat d}), & 0<d<\hat d\\
0, & d\geq \hat d
\end{cases}
$$
* 摩擦力:記得有動摩擦力與靜摩擦力的差別。對於一個接觸 k,令其 Oriented sliding bases 為 $T_k(x)$...