DynamicFusion: Reconstruction and Tracking of Non-rigid Scenes in Real-Time 筆記

簡介:
DynamicFusion 首次實現不依賴模板的實時非剛性三維重建,該論文獲得了 2015 年 CVPR 的最佳論文獎,DynamicFusion 是對 KinectFusion 剛體重建向非剛性重建的延伸。

DynamicFusion 在處理新圖像時,主要分爲三步:
1)根據新獲取的圖像(深度圖像),估計模型到幀的 warp field 參數。
2)根據估計的 warp field 參數,將新獲取的圖像融合到 canonical space。
3)調整 warp field 的參數,使其可以覆蓋新捕獲到的空間區域。

warp field 參數表示
對於剛性重建,只需要估計得到 6 dof 的位姿就可以把新獲取的圖像融合到模型中,而對於非剛性重建,因爲空間點的位置變化不是統一的,對於每個點都需要單獨估計 warp field。考慮到模型點數量很多( n3n^3量級,其中 爲 nn TSDF 單一維度上的分辨率),並且空間表面變化通常是平滑的,作者從重建的表面抽樣得到 warp field 節點,並且採用插值算法計算得到模型中每個 voxel 處的 warp field 參數。

對於 warp field 中的節點,每個節點有 三個屬性,其中N warp t={dgv,dgw,dgse3}t\mathcal{N}_{\text { warp }}^{t}=\left\{\mathrm{d} \mathrm{g}_{v}, \mathrm{d} \mathrm{g}_{w}, \mathrm{d} \mathrm{g}_{\text {se3}}\right\}_{t}dgv\mathrm{dg_v} 爲節點的位置座標,dgw\mathrm{dg_w} 爲節點作用範圍 ,dgse3\mathrm{dg_{se3}} 表示節點的 warp 參數(對偶四元數),dgse3\mathrm{dg_{se3}} 是優化的狀態量。

2) 根據估計的 warp field 參數,將新獲取的圖像融合到 canonical space。
canonical space 下的模型是融合多幀圖像得到的,類似 KinectFusion 融合多幀深度圖像得到的模型。

這裏先假設 warp field 的參數已經計算已知,對於 TSDF 模型中的每個 voxel 點,根據計算的 warp field 參數,將點變換 live 幀(新輸入圖像)。

對於 TSDF 模型中的每個 voxel,根據 voxel 周圍 warp field 節點參數加權取平均得到 voxel 處的 warp 參數,公式如下:

DQB(xc)kN(xc)wk(xc)q^kckN(xc)wk(xc)q^kc\mathbf{D} \mathbf{Q} \mathbf{B}\left(x_{c}\right) \equiv \frac{\sum_{k \in N\left(x_{c}\right)} \mathbf{w}_{k}\left(x_{c}\right) \hat{\mathbf{q}}_{k c}}{\left\|\sum_{k \in N\left(x_{c}\right)} \mathbf{w}_{k}\left(x_{c}\right) \hat{\mathbf{q}}_{k c}\right\|}

其中,採用 wkw_k 是根據 warp field 節點 kk 到 voxel 的距離計算得到權重,公式見上文。

將加權平均得到對偶四元數轉換成 6 dof 位姿,根據位姿計算 voxel 在 live 座標系下的位置座標,並且根據相機內參投影到相平面,最後採用同 KinectFusion 根據投影點處深度圖像的深度值更新 voxel 的 value 和 weight,公式如下:

v(x)=v(x)t1w(x)t1+min(ρ,τ)w(x)w(x)t1+w(x)ρ=psdf(dc(x))w(x)=min(w(x)t1+w(x),wmax)\begin{aligned} \mathrm{v}^{\prime}(\mathrm{x}) &=\frac{\mathrm{v}(\mathrm{x})_{t-1} \mathrm{w}(\mathrm{x})_{t-1}+\min (\rho, \tau) w(\mathrm{x})}{\mathrm{w}(\mathrm{x})_{t-1}+w(\mathrm{x})} \\ \rho &=\operatorname{psdf}(\mathrm{dc}(\mathrm{x})) \\ \mathrm{w}^{\prime}(\mathrm{x}) &=\min \left(\mathrm{w}(\mathrm{x})_{t-1}+w(\mathrm{x}), w_{\max }\right) \end{aligned}

在融合時,KinectFusion 將權重設爲 1,這裏根據變換 voxel 的 warp field 節點的位置計算權重
1kiN(xc)dgwixc2\frac{1}{k} \sum_{i \in N\left(x_{c}\right)}\left\|\mathbf{d} \mathbf{g}_{w}^{i}-x_{c}\right\|_{2}

深度圖像融合過程同 KinectFusion 類似,不同的是,在融合時需要先把 canonical 模型點根據 warp field 參數變換到 live 下,變換到 live 後 canonical 模型和新捕獲的數據就相似了。

1) 根據新獲取的圖像(深度圖像),估計模型到幀的 warp field 參數。
估計 warp field 參數優化項有兩項,如下式所示,其中,Data 項爲 ICP 誤差項,Reg 項爲正則項,正則項用來保持相鄰節點參數的光滑性。

E(Wt,V,Dt,E)=Data(Wt,V,Dt)+λReg(Wt,E)E\left(\mathcal{W}_{t}, \mathcal{V}, D_{t}, \mathcal{E}\right)=\boldsymbol{\operatorname{Data}} \left(\mathcal{W}_{t}, \mathcal{V}, D_{t}\right)+\lambda \boldsymbol{\operatorname{Reg}}\left(\mathcal{W}_{t}, \mathcal{E}\right)

Data 項誤差函數構建:
在構建 Data 項誤差時,首先採用 marching cube 算法從重建的 TSDF 模型計算得到重建好的 mesh,其中包括點的座標和法向 V^c{Vc,Nc}\hat{\mathcal{V}}_{c} \equiv\left\{V_{c}, N_{c}\right\},然後根據當前估計的 warp field 參數將點座標和法向變換到 live 幀,並且根據相機內參計算在相平面上投影點座標,根據投影點處深度圖像的深度值,構建誤差函數:
psdf(xc)=[K1Dt(uc)[uc,1]]z[xt]z\operatorname{psdf}\left(x_{c}\right)=\left[\mathbf{K}^{-1} D_{t}\left(u_{c}\right)\left[u_{c}^{\top}, 1\right]^{\top}\right]_{z}-\left[x_{t}\right]_{z}

正則項 Reg 誤差構建:
正則項誤差用來保持相鄰節點之間參數的光滑連續性。
Reg(W,E)i=0njE(i)αijψreg(TicdgvjTjcdgvj)\boldsymbol{\operatorname { R e g }}(\mathcal{W}, \mathcal{E}) \equiv \sum_{i=0}^{n} \sum_{j \in \mathcal{E}(i)} \alpha_{i j} \psi_{\mathbf{r e g}}\left(\mathbf{T}_{i c} \mathbf{d} \mathbf{g}_{v}^{j}-\mathbf{T}_{j c} \mathbf{d} \mathbf{g}_{v}^{j}\right)

作者通過構建 hierarchical deformation tree 的方式建立正則項約束,在構建的 deformation tree 時,下層樹節點從上層樹節點抽樣獲得。對於上層節點,通過在下層節點中找最近鄰節點構建誤差。

參數優化:
優化時需要計算 Hessian 矩陣 JJ=JdJd+λJrJr\mathbf{J}^{\top} \mathbf{J}=\mathbf{J}_{\mathrm{d}}^{\top} \mathbf{J}_{\mathrm{d}}+\lambda \mathbf{J}_{\mathrm{r}}^{\top} \mathbf{J}_{\mathrm{r}},對於 Data 項誤差,作者爲了加速只計算 Hessian 矩陣中對角 block 元素。

3) 調整 warp field 的參數,使其可以覆蓋新捕獲到的空間區域。
在將新獲取的數據融合到模型之後,重建的模型提取重建的表面,然後檢查當前 deformation graph 節點覆蓋的重建表面的範圍,對於覆蓋不到的區域,根據重建的表面,初始化新的節點。節點初始化後,根據更新後的 deformation graph 重新構建正則項約束樹。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章