--- 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)$...