從點雲到網格(三)Poisson重建

Possion重建是Kazhdan等2006年提出的網格重建方法[1]。Possion重建的輸入是點雲及其法向量,輸出是三維網格。Poisson有公開的源代碼[2]。PCL中也有Poisson的實現。

核心思想

Possion重建是一個非常直觀的方法。它的核心思想是點雲代表了物體表面的位置,其法向量代表了內外的方向。通過隱式地擬合一個由物體派生的指示函數,可以給出一個平滑的物體表面的估計。

給定一個區域MM及其邊界∂M∂M,指示函數χMχM定義爲

這樣,把重構S=∂MS=∂M的問題轉換爲重構χMχM的問題。作者給出了將點雲及其法向量和χMχM聯繫起來的公式。作者論文中的圖1非常形象地描述了這二者的聯繫。

基本思路

對於任意點p∈∂Mp∈∂M,定義N⃗ ∂M(p)N→∂M(p)爲向內的表面法向量,F~(q)F~(q)爲一個平滑濾波器,F~p(q)=F~(q−p)F~p(q)=F~(q−p)爲F~F~沿pp方向的平移。因爲χMχM一般意義上是不好求導的,這裏用χM∗F~χM∗F~的導數來近似。

從法向量到梯度空間

梯度空間的近似

由於N⃗ ∂MN→∂M的分佈是未知的,需要通過觀測值P={(pi,ni)}P={(pi,ni)}來近似。考慮離散點集ΩΩ,∂M∂M被分割爲互不相交的區域℘s,s∈Ω℘s,s∈Ω。(1)(1)可以轉化爲積分求和,並將每個小積分近似爲常函數,用代表點s.ps.p對應的函數值和℘s℘s的面積的乘積代替。

這裏希望平滑濾波器F~F~能夠儘量地窄,不過分平滑數據,同時儘量地寬,使得積分近似能夠更準確。高斯濾波器是一種常見的選擇。

求解Possion問題

向量空間V⃗ V→和指示函數χ~χ~滿足

 

∇χ~=V⃗ (3)(3)∇χ~=V→


然而,V⃗ V→通常意義上是沒法積分的(爲什麼?)。爲了得到(3)(3)式的最小二乘解,將(3)(3)式兩邊求導,就得到了拉普拉斯方程

Δχ~=∇⋅V⃗ (4)(4)Δχ~=∇⋅V→

拉普拉斯方程在數學上有很詳細的研究。

實現細節

空間劃分

爲了解一個偏微分方程問題,首先要將其離散化。最簡單的方法是將空間劃分爲均勻網格。這種劃分非常佔內存空間,而且只有邊界附近的值纔是我們關心的,大量的空間被浪費了。作者採用了一種自適應的網格結構octree來劃分空間,並且octree上定義了一個函數空間FoFo。下圖給出了octree在三維空間對一個物體的劃分。物體邊緣的網格密度遠大於遠離物體的網格密度。

http://http.developer.nvidia.com/GPUGems2/elementLinks/37_octree_03.jpg

空間上的基函數選擇

如何選擇函數空間FoFo實際上挺有學問的。因爲FoFo一旦給定,定義在這個octree上的向量空間V⃗ V→和指示函數χχ都會通過FoFo的線性組合去近似。這樣,求解χχ就轉化爲求解FoFo上的參數組合,進而轉化爲求解一個線性方程組。

給定octree的深度DD,作者根據選擇了下面的基函數FF。

∗n∗n代表nn次卷積。當nn趨向於無窮時,FF趨向於高斯函數,它的定義域也越來越大。當n=3n=3時,定義域爲[−1.5,1.5]3[−1.5,1.5]3。

octree上某個節點oo對應的函數FoFo定義爲

 

Fo(q)≡F(q−o.co.w)1(o.w)3Fo(q)≡F(q−o.co.w)1(o.w)3


其中o.co.c是的oo中心,o.wo.w是oo的寬度。假設根節點(第0層)的寬度爲WW,那麼第dd層節點的寬度爲W2dW2d。這個函數空間和小波空間很像。

Possion求解

Possion求解方法是L2投影(L2 projection)[3]。定義octree的節點集合爲OO。向量空間V⃗ V→可以近似爲

 

V⃗ (q)≡Σs∈ΩΣo∈Ng(s)αo,sFo(q)s.n⃗ V→(q)≡Σs∈ΩΣo∈Ng(s)αo,sFo(q)s.n→


其中Ng(s)Ng(s)是ss的八個最近鄰的葉節點,αo,sαo,s是三線性插值的權重。

雖然V⃗ V→和χ~χ~都可以在函數空間上表示出來,Δχ~Δχ~和∇⋅V⃗ ∇⋅V→卻未必有定義。因此將(4)(4)近似爲最小化其在FoFo上的投影

 

Σo∥〈Δχ~−∇⋅V⃗ ,Fo〉∥2=Σo∥〈Δχ~,Fo〉−〈∇⋅V⃗ ,Fo〉∥2Σo‖〈Δχ~−∇⋅V→,Fo〉‖2=Σo‖〈Δχ~,Fo〉−〈∇⋅V→,Fo〉‖2


令χ~=ΣoxoFoχ~=ΣoxoFo,那麼求解χ~χ~即是求解xoxo。

〈Δχ~,Fo′〉=Σoxo〈ΔFo,Fo′〉〈Δχ~,Fo′〉=Σoxo〈ΔFo,Fo′〉

 

Σo∥〈Δχ~,Fo〉−〈∇⋅V⃗ ,Fo〉∥2=Σo′∥Σoxo〈ΔFo,Fo′〉−〈∇⋅V⃗ ,Fo′〉∥2Σo‖〈Δχ~,Fo〉−〈∇⋅V→,Fo〉‖2=Σo′‖Σoxo〈ΔFo,Fo′〉−〈∇⋅V→,Fo′〉‖2


上式右邊對x={xo}x={xo}求偏導,轉化爲

minx∥Lx−v∥2minx‖Lx−v‖2


其中,設octree的節點數爲NN,N×NN×N矩陣LL在(o,o′)(o,o′)位置上的值爲

Lo,o′≡〈∂2Fo∂x2,Fo′〉+〈∂2Fo∂y2,Fo′〉+〈∂2Fo∂z2,Fo′〉Lo,o′≡〈∂2Fo∂x2,Fo′〉+〈∂2Fo∂y2,Fo′〉+〈∂2Fo∂z2,Fo′〉

表面提取

用Marching Cubes類似的方法。注意iso的值取自SS個劃分的平均。

作者還討論了非均勻採樣下的算法,在此就不贅述。

Poisson分析

簡單列幾點

  • Poisson在邊緣處的銳度比VRIP要好。這是因爲VRIP在大的邊緣處TSDF的累加會有平滑效應,而Poisson依據的是法向量,不會引入額外的平滑。
  • VRIP是局部方法,每次只更新當前深度圖對應的TSDF。Poisson是全局方法。
  • 從個人使用經驗上看,Poisson對於噪聲更加魯棒一些。點雲法向量估計的精度不能太差。
  • 如果重建出奇怪的形狀(分層、分塊),請查看原始點雲是否平滑,是否有噪聲,調整生成網格的分辨率以適應點雲。

小結

Poisson是個好方法。

參考文獻

[1]. Kazhdan, Michael, Matthew Bolitho, and Hugues Hoppe. "Poisson surface reconstruction." Proceedings of the fourth Eurographics symposium on Geometry processing. Vol. 7. 2006.
[2]. http://www.cs.jhu.edu/~misha/Code/PoissonRecon/Version8.0/
[3]. http://www.featflow.de/en/software/featflow2/tutorial/tutorial_l2proj.html

轉載請註明作者和出處(http://www.cnblogs.com/luyb),未經允許請勿用於商業用途。 [email protected]/LUYB 聯繫方式:luyanbin7 at gmail.com

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