CloudCompare (1) —— 導言

1 歷史

CloudCompare是一個開源三維點雲(和三角網格)編輯和處理軟件。

最初,它的設計是為了對密集的三維點雲進行直接比較。它依賴於特定的octree(八叉樹) 結構,在執行這種任務時使其具有良好的性能。此外,由於大多數點雲是由地面激光掃描儀獲得的,CloudCompare打算在一臺筆記本電腦上處理巨大的點雲——超過1000萬點(2005年!)。不久,點雲和三角形網格之間的比較就得到了支持。隨後,又出現了許多其他的點雲處理算法(配準、重採樣、顏色/法線向量/標量域管理、統計計算、傳感器管理、交互式或自動分割等),以及顯示增強工具(自定義彩色坡道、顏色和法線向量處理、圖片校準處理、OpenGL著色器和插件等)。

CloudCompare (1) —— 導言

在一臺帶有雙核處理器的手提電腦上,計算300萬點到14.000個三角形網格的距離大約需要10秒

2 哲學

2.1 點雲VS網格

由於它的特殊歷史,CloudCompare認為幾乎所有的3D實體都是點雲。通常,一個三角形網格只是一個具有相關的拓撲結構(與每個三角形對應的“連通”點)的點雲(網格頂點)。這解釋了網格總是有一個名為“頂點”的點雲,稱為同級雲或父雲(取決於加載或生成它們的方式)。當CloudCompare只允許用戶直接在網格結構(即三角形)上使用某一些工具時,一些工具只能應用於網格頂點。一開始,這可能有點令人不安,但我們不希望用戶忽略這一點:CloudCompare主要是一個點雲處理軟件。

造成這種情況的主要原因是:

  • 在真實場景中,網格通常很難正確生成,特別是當用激光掃描儀(噪聲、可變密度等)掃描時;
  • 由於ALS/TLS(Air Laser Scanning/Terrestrial Laser Scanning,空中激光掃描/地面激光掃描)點雲通常非常密集(且準確),我們已經掌握了所需的所有信息。

2.2 標量域(Scalar Fields)

在所有與點雲(顏色、法線等)相關的“特徵”中,CloudCompare中有一個特定的地方:標量域。

標量域只是一組值(每一個點一個值。例如,每個點到另一個實體的距離)。由於每個值都與一個點(或頂點)相關聯,所以,可以將這些值顯示為顏色(自定義的彩色坡道)、對其應用濾波器(平滑、梯度等)、執行一些基本的數學操作(exp、log、冪、cos、sin、tan等),或根據這些值對點雲進行分割(閾值化、局部統計濾波等)。

CloudCompare可以處理同一點雲中的多個標量域。甚至可以在同一個點雲的兩個標量域之間執行簡單的算術操作(+,-,*,/)。

3 一些技術考慮

3.1 可移植

CloudCompare基於C++和QT開發,它目前可在32位和64位架構的Windows、Linux和MacOS上編譯和使用。

3.2 存儲和速度之間的權衡

下面是CloudCompare在不降低太多性能實現儘可能多的加載點目標下對存儲和速度之間進行權衡的技術選擇:

  • 所有存儲的值和大部分計算都是使用32位浮點值來完成;
  • 為了防止對數組大小的任何限制(因為在32位Windows上, 很難獲得一個大的連續內存塊),我們使用一個自定義容器將小的數據塊數(每個塊64 KB)組建成大的塊數據集;
  • 法線向量壓縮在16位內(因為量化的工作實際上是15位);
  • CloudCompare中使用的特定八叉樹結構為每個點提供固定長度的內存(在32位OS上,每點為8字節,最大深度為10;在64位OS上,每點為12字節,最大深度為21!)。它是基於一種特殊量化的三維點座標——Morton排序方案,在八叉樹網格中每個點的位置都由一單整數表示,對最鄰居點查詢操作和對於計算距離非常有效,但這種八叉樹不適合快速顯示(細節級別等)。

由以上的選擇結果,使CloudCompare可以每GB存儲大約9000萬個空白點。如果添加RGB顏色、法線向量、單個標量域和需要進行八叉樹計算,則每GB可加載多達3200萬點。

另外,在64位操作系統上,您可以加載任意多個的點(嗯,實際上可高達40億個)。然而,性能將嚴重取決於您的圖形卡,請使用高端圖形卡,就算高達1.5億點,你也可以獲得一個不錯的幀速!


分享到:


相關文章: