3D幾何處理 | 點雲補洞算法+代碼分享

3D幾何處理 | 點雲補洞算法+代碼分享

導讀 : 今天介紹的是2017年發表在the virtual computer上的點雲補洞算法,針對點雲的補全和補洞算法是比較少見的,大多數算法都只是針對網格的補洞。而針對點雲的補洞在三維重建中能夠很有效的應用,特別是如泊松重建中因遮擋導致的點雲稀疏或缺失的區域,但點雲補洞能夠很有效的解決該區域的重建問題。點雲補洞本質上是個病態問題,所有的補洞方式只能根據洞周圍點的特徵來補全,但在幾何結構相對簡單區域,點雲補洞能有很好的表現。

算法論文地址:yanqingan.github.io/docs/tvc16_shape.pdf
代碼獲取 : 獲取代碼請微信掃文章末尾二維碼關注公衆號 什錦加,回覆 CloudHole 獲取

摘要

這篇文章提出了一種全新的點雲補洞方法,能夠在平滑和尖銳的地方都有較好的補洞表現,該方法模仿物理上的擴散模型,將一次洞的邊緣收縮分解爲法向傳播和頂點位置傳播,並根據其相應的約束來保持其平滑或尖銳的特性。通過迭代上述過程直到沒有新的邊緣生成,即完成點雲補全。

1.簡介

點雲模型在過去20多年中有很廣泛的應用。直到現在,儘管掃描儀等獲取設備的性能有很大的提升,但是或多或少在其掃描的模型上存在有不同的空洞區域。此外,因爲物體表面磨損和損壞,也會形成空洞區域。針對點雲補洞這個病態問題,現有的大部分工作基於網格步面片的方式。而直接在點雲上補洞的相對較少,而且大多隻能生成平滑的補洞結果。本文模仿物理中能量擴散的方式進行點雲補全,能夠有效的生成平滑和尖銳的補洞結果,如下圖1所示:
Fig.1

2.算法

​ 本文將洞邊緣收縮主要分爲兩步:

  • 法向傳播:用於控制填充點的方向和恢復的表面的形狀。

  • 位置傳播:在一次邊緣收束中生成新的邊界點。

    這兩個步驟在補洞算法中交替執行,且能夠相互優化。這種交替傳播方式能夠將法相約束插入到法向傳播步驟中,以恢復空洞的尖銳特徵。

2.1 算法總覽

​ 給定帶法向的點雲作爲輸入,本文算法首先對輸入點雲進行預處理去噪,然後提取空洞的邊界點,並通過迭代傳播的方式縮小空洞區域,直到沒有新點生成。
在這裏插入圖片描述

2.2 預處理

​ 爲了得到有效的洞的邊界,本文采用了二階段的處理去噪,同時對點雲位置和其法向進行雙邊濾波 [1]操作,從而獲得去噪的後的帶法向的點雲。

2.3 洞邊界確定

​ 本文采用分而治之的策略進行邊界提取,首先在邊界上手動順序選擇少量特徵點$f_i’ 其中 (i = 1,…,m),將這些點輸入邊界點集合中B’$中。 因此任意兩相鄰點間可以看作時局部線性的。

​ 對於相鄰點fifi+1f_i' f_{i+1}'構成的線段,計算其中點MM, 並選擇距離最近的邊界上的點bmb_m',如果該點是新的點,則將該店插入到點集中fif_i'fi+1f_{i+1}'之間。通過迭代直到所有相鄰點間距離小於閾值,則獲得最終的邊界點集,以此作爲空洞邊界。

2.4 法向傳播

爲了計算收縮後的空洞邊界,本文在採樣的邊界點集上構建法向傳播。新填充的點bib_i的法向計算方式爲:
在這裏插入圖片描述
在這裏插入圖片描述
Nr(bi)N_r(b_i)表示bib_i附近半徑爲r以內的鄰近點。g1g1g2g2分別是標準差爲σd\sigma_dσn\sigma_n的高斯權重。nin_i'爲距離bibi最近的上一輪邊界上的點的法向。

2.5 頂點位置採樣

以傳播的法向作爲指導,一輪邊界收束的採樣點需滿足兩個目標:

  • 新生成的邊界與周圍區域的表面相匹配
  • 新填充的點應該保持合理的分佈,保持連續實際的收縮,使得空洞區域變小

爲此,文章定義E1E1用來度量填充點和周圍表面的差異。同時引入彈力來填充點的位置,一個好的候選點應該在受力平衡點附近且受到最小的合力E2E2。結合兩者,建立了以此邊界收縮的目標函數:

在這裏插入圖片描述

3. 生成新的孔洞邊界

​ 雖然上述算法給除了頂點採樣的目標函數,但是直接求解是非常困難的,因爲空間中有無數的位置能滿足該函數最小化。因此文章提出了間接的採樣方法。

​ 首先,通過上一輪生成的邊界點,生成新的邊界點的控制曲線。在控制曲線約束下,本輪採樣變爲沿着控制曲線的1-D採樣。 採樣到的新的頂點是目標函數(3)的近似解。

​ 然後,對每個採樣點根據其鄰域和(1)中計算的法向進行位置優化,直到收斂。

3.1 計算洞邊緣控制曲線

定義彈力:文章利用高斯函數來對彈力進行仿真並控制鄰近點間距離的權重。ObiO_{bi}'表示新的候選點bibi沿着上一輪邊界點bib_i'沿着該點傳播方向的平衡點,在ObiO_{bi}'位置受到的鄰域其他點的彈力如下式(4):
在這裏插入圖片描述
其中OqO_q是鄰近點qq沿着qObi\vec{qO_{bi}''} 的平衡點,如圖Fig.3所示。
在這裏插入圖片描述
事實上,一旦給定鄰域點qq,則從點qq受到的彈力僅與ObiO_{bi}'OqO_q的符號距離有關,其正向爲斥力,負向爲引力,因而可簡化爲式 (5),而平衡點的計算公式爲式 (6)

在這裏插入圖片描述
在這裏插入圖片描述
邊界控制曲線: 邊界控制曲線有上一輪生成的邊界點計算得到的平衡位置得到。對於邊界點bib_i' 其收縮方向爲該點法向與邊界方向的叉乘。從而根據式(5)(6)可計算出所有新的平衡點以及該點收到的彈力,並刪除受到鄰域斥力的平衡點,剩下的作爲新一輪的邊界曲線採樣點。

3.2 位置優化

爲保證生成的採樣點與局部表面形狀匹配,本文提出了位置優化方法,如式(7)
在這裏插入圖片描述
所有的邊界點受到鄰域點的沿着其法向的引力作用,到新的平衡點,其中g1g_1g2g_2是和式(1)類似的高斯權重,則優化後的頂點位置爲:
在這裏插入圖片描述
注意到位置優化後的點的法向與表面不匹配,而重新計算後的法向也會導致優化位置的偏離。因此,理論上可進行交替優化的方式,使之達到收斂。而在實際上收斂速度會比較快,因而採用兩輪交替優化即可。

3.4 保持特徵一致

在尖銳的洞區域,採用上述方法容易因其區域交疊的問題,如Fig.7所示,可通過設置相應的閾值,在出現位置偏移反向的時候,將其進行剔除,即可剔除該區域多餘的頂點。

在這裏插入圖片描述

算法結果

​ 文章在不同的模型上進行了測試,如圖Fig.1 所示,不同半徑的鄰域取值對補洞表面的收斂速度不同。FIg.8 則展示了不同的同算法相對本文算法的補洞結果。本文算法在尖銳和平滑區域都有很好的表現。在這裏插入圖片描述
在這裏插入圖片描述
特別是在泊松重建之前,本文算法通過提前對點雲進行空洞填充,再進行播送重建後能夠很好的降低模型空洞粘連的問題,提高模型質量。

代碼獲取

獲取本文源碼請微信下列二維碼關注本人公衆號,並回復 cloudhole 自行獲取。
在這裏插入圖片描述
本文爲原創,轉載請著明出處。

參考文獻

[1] Fleishman S, Drori I, Cohen-Or D (2003) Bilateral mesh denoising. In: ACM Transactions on Graphics (TOG), ACM, vol 22, pp 950–953

發佈了2 篇原創文章 · 獲贊 2 · 訪問量 2313
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章