從點雲到網格(二)VRIP介紹


VRIP(Volumetric Range Image Processing),顧名思義,是從深度圖重建網格的一種方法。VRIP是Brian Curless和Marc Levoy在1996年提出來的方法,距今已經有20年的歷史了,依然屬於最好的方法之一。

VRIP的核心問題是

已知世界坐標系下,某物體表面\(f\)在不同視角下的深度圖\(\hat{f_1},...,\hat{f_K}\),求\(f\)。這里隱含深度圖在世界坐標系下的位姿是已知的。

許多三維測量方法,比如激光、TOF、結構光、雙目視覺等,都可以得到深度圖。因此這是一個非常有意義的問題。如何將這些深度圖融合成為一個平滑的單一網格呢?這就是VRIP要解決的問題。
下面給出一個結構光成像的例子。左上圖是將不同視角拍攝到的深度圖(已轉化為三維網格)匹配在一起后的情形。右上圖是左圖中某一部分的切面,可以看到很多層網格重疊在一起,噪聲、匹配誤差、采樣率等都反映在這個局部中。左下圖是VRIP的結果,右下圖是VRIP融合的結果和深度圖放在一起(棕色是深度圖,藍色是融合后的網格,只能看到一點點)。

VRIP的基本假設

VRIP最重要的假設是測量誤差沿着光線傳播方向(投影方向)並服從高斯分布。假設\(\hat{f_k}(u,v)\)是在第\(k\)個視角下,光線從傳感器\((u,v)\)位置沿着傳播方向到達\(f\)的距離的測量值,\(f_{k}(u,v)\)為其真實值。那么條件概率滿足

\(P(f_{k}(u,v)|\hat{f_k}(u,v))=c_k(u,v)\exp[-\frac{1}{2}(\frac{\hat{f_k}(u,v)-f_k(u,v)}{\sigma_k(u,v)})^2]\)

因此,VRIP算法和視角非常相關。

VRIP的模型

VRIP嘗試從概率的角度來描述核心問題。對任意曲面\(f\)\(P(f|\hat{f_1},...,\hat{f_K})\)\(f\)的條件概率。那么求解核心問題轉化為一個最大似然問題

\(\max_{f}P(f|\hat{f_1},...,\hat{f_K})\)

經過一系列獨立性假設,

\(P(f|\hat{f_1},...,\hat{f_K})= \prod_{k=1}^{K}\prod_{i=1}^{M}\prod_{j=1}^{N}P(f_{k}(i,j)|\hat{f_k}(i,j))\)

取對數,並轉化為求和

\(E(f)=-\Sigma\Sigma\Sigma \log[P(f_{k}(i,j)|\hat{f_k}(i,j))]\)

將離散情形轉換為連續情形

\(E(f)=-\Sigma\int\int_{A_k}\log[P(f_{k}(u,v)|\hat{f_k}(u,v))]dudv\)

定義\(d(u,v,f_k)=\hat{f_k}(u,v)-f_k(u,v)\),代入\(P\)的表達式,則有

\(E(f)=\frac{1}{2}\Sigma\int\int_{A_k}w_k(u,v)d_k(u,v,f_k)^2 du dv\)

上式還是建立在各個視角下的局部坐標系(傳感器坐標系)。將上式轉換到世界坐標系下,有

\(E(f)=\frac{1}{2}\Sigma\int\int_{A}w_k(x,y,z)d_k(x,y,z)^2[\mathbf{v_k}(x,y,z)\cdot (\frac{\partial z}{\partial x}) ,\frac{\partial z}{\partial y},-1)] dx dy\)

其中\(z=f(x,y)\)\(\mathbf{v_k}\)是第\(k\)個視角的投影方向,\(d_k(x,y,z)=\hat{f}(x,y,z,\mathbf{v_k})-f(x,y)\) ,為三維點\((x,y,z)\)沿着第\(k\)個視角的投影方向與深度圖對應點的測量值\(\hat{f}\)的距離,即Signed Distance Function。積分中點乘那項是從\(uv\)坐標系轉換到\(xyz\)坐標系的\(Jacobian\)矩陣。
下圖是SDF的示意圖。注意靠近傳感器的方向距離為正,遠離傳感器的方向距離為負。

下圖是同一個三維點在兩個視角下的SDF示意圖。注意SDF是沿着視角方向(光線傳播反方向)的。圖中\(d_1<0,d_2>0\)

於是,問題轉換為

\(,使得z=f(x,y),使得\)\(E(f)\)最小。

求解這個問題涉及到很多偏導數、方向導數的知識,本人也並沒有完全搞明白。但問題的解卻是出乎意料的簡單

\(z=f(x,y)\)滿足\(\Sigma w_k(x,y,z)d_k(x,y,z)=0\) ,則\(z\)是最優解。

VRIP算法流程

定義\(D(\mathbf{x})=\frac{\Sigma w_k(\mathbf{x})d_k(\mathbf{x})}{\Sigma w_k(\mathbf{x})}\),那么\(D(\mathbf{x})=0\)就是我們要重構的三維表面。實際應用中,\(D(\mathbf{x})\)可看作一個三維體數據(volume),\(D(\mathbf{x})=0\)通過提取\(D\)的零等值面即可得到。因此,算法先增量構建\(D\),然后通過等值面提取方法得到三維網格。例如,Marching Cube就是一種高效提取等值面的算法,而且非常適合在GPU上實現。

需要指出的是,作者在論文中采用了TSDF(Truncated signed distance function),即在一條光線上,只考慮測量值\(\hat{z}\)附近一定范圍\(\hat{z}\pm \delta z\)內的體素。一方面是因為一條光線可能會穿過物體不止一次。另一方面這樣也可以減小搜索范圍,加速算法。

VRIP算法的框架如下:

/* 初始化 */ 
對每個三維體素,設其權重為0。
/* 深度圖融合 */ 
對每個深度圖 {
  /* 准備 */ 
  網格化深度圖;
  計算每個點的權重;
  /* 更新體素 */
  對該視角下FOV中的體素 {
    沿投影方向找到深度網格中的對應點;
    計算其沿投影方向的SDF;
    插值得到其權重;
    更新這個體素的權重和SDF。
  }
}
/* 表面提取 */ 
提取零等值面。

着重強調一點,深度圖的權重需要盡量准確,特別是(1)對噪聲大的點能夠賦予較小的權重,(2)對於法向量和視角方向角度比較大的三維點,可以降低其權重(曲率大,采樣率不夠,重建誤差大)。

下圖是兩個視角下的TSDF的融合的示意圖。

下圖是多個視角下TSDF的融合(兩顆真實的牙齒)

VRIP的優缺點

VRIP的優點主要有

  • 它是一定意義下的最大似然解。這保證了解的精度。
  • 它是一個增量方法,每一次得到新的深度圖后,可簡單快速地加入到TSDF中。
  • 適合並行處理,可用GPU加速

VRIP的主要缺點有

  • VRIP生成的網格會附加一定的平滑效果,在存在噪聲和匹配誤差的情況下有時不能重建出細微的結構。
  • 如果深度圖存在匹配誤差,VRIP並不能消除這些誤差。這些誤差會反映在融合后的網格中(分層、噪聲等)。

VRIP的加速

VRIP算法的時間復雜度比較高。作者在CPU端做了很多優化和加速工作。假設深度圖平行於\(xy\)平面,且投影方向為正交投影,那么沿\(z\)方向的所有體素在深度圖上的投影相同,因此其TSDF可以在\(z\)方向上簡單計算得到,而且權重相等,不必要重復運算。作者的主要思路是,將不同視角下的深度圖和坐標系,通過仿射變換和重采樣,映射到相對標准的位置(深度圖平行於\(xy\)平面),從而減少投影和權重的計算量。
如下圖所示,(a)某個視角下的深度圖及正交投影方向,投影方向和Voxel slices有一個夾角。(b)通過一個仿射變換,將投影方向變換為與Voxel slices相垂直。一般而言,仿射變換后深度圖和Voxel slices仍然有夾角,因此還要將它在平行於slices的平面上重采樣。(c)將計算得到的TSDF變換回原坐標系下的距離。

VRIP在SLAM中的應用

VRIP算法在RGBD SLAM中有着廣泛的應用。Kinect Fusion的作者並沒有采用CPU加速的方法,而是將VRIP算法移植到GPU上,利用Ray casing算法做到了網格的實時顯示,效果非常好。后來的Kintinuous、Elastic Fusion、Dynamic Fusion也都采用類似的架構去生成網格。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM