天天看點

PCL庫簡要說明

      PCL(PointCloudLibrary)是在吸收了前人點雲相關研究基礎上建立起來的大型跨平台開源C++程式設計庫,它實作了大量點雲相關的通用算法和高效資料結構,涉及到點雲擷取、濾波、分割、配準、檢索、特征提取、識别、追蹤、曲面重建、可視化等。支援多種作業系統平台,可在Windows、Linux、Android、MacOSX、部分嵌入式實時系統上運作。如果說OpenCV是2D資訊擷取與處理的結晶,那麼PCL就在3D資訊擷取與處理上具有同等地位,PCL是BSD授權方式,可以免費進行商業和學術應用  。

PCL的潛在應用領域

PCL能解決什麼問題呢?

機器人領域移動機器人對其工作環境的有效感覺、辨識與認知,是其進行自主行為優化并可靠完成所承擔任務的前提和基礎。如何實作場景中物體的有效分類與識别是

移動機器人場景認知的核心問題,目前基于視覺圖像處理技術來進行場景的認知是該領域的重要方法。但移動機器人線上擷取的視覺圖像品質受光線變化影響較大,特别是在光線較暗的場景更難以應用,随着RGBD擷取裝置的大量推廣,在機器人領域勢必掀起一股深度資訊結合2D資訊的應用研究熱潮,深度資訊的引入能夠使機器人更好地對環境進行認知、辨識,與圖像資訊在機器人領域的應用一樣,需要強大智能軟體算法支撐,PCL就為此而生,最重要的是PCL本身就是為機器人而發起的開源項目,PCL中不僅提供了對現有的RGBD資訊的擷取裝置的支援,還提供了高效的分割、特征提取、識别、追蹤等最新的算法,最重要的是它可以移植到android、ubuntu等主流Linux平台上,PCL無疑将會成為機器人應用領域一把瑞士軍刀。

CAD/CAM、逆向工程

大部分工業産品是根據二維或三維CAD模型制造而成,但有時因為資料丢失、設計多次更改、實物引進等原因,産品的幾何模型無法獲得,因而常常需要根據現有産品實物生成物體幾何模型。逆向工程技術能夠對産品實物進行測繪,重構産品表面三維幾何模型,生成産品制造所需的數字化文檔。

在一些工業領域,如汽車制造業,許多零件的幾何模型都通過逆向工程由油泥模型或實物零件獲得,目前在CAD/CAM領域利用雷射點雲進行高精度測量與重建成為趨勢,同時引來了新的問題,通過擷取的海量點雲資料,來提取重模組化型的幾何參數,或者形狀模型,對模型進行智能檢索,從點雲資料擷取模型的曲面模型等,諸如此類

的問題解決方案在PCL中都有涉及。

例如kdtree和octree對海量點雲進行高效壓縮存儲與管理,其中濾波、配準、特征描述與提前基礎處理,可以應用于模型的智能檢索,以及後期的曲面重建和可視化都在PCL中有相應的子產品。總之,三維點雲資料的處理是逆向工程中比較重要的一環,PCL中間所有的子產品正是為此而生的。

雷射遙感測量

能夠直接擷取高精度三維地面點資料,是對傳統測量技術在高程資料擷取及自動化快速處理方面的重要技術補充。雷射遙感測量系統在地形測繪、環境檢測、三維城市模組化、地球科學、行星科學等諸多領域具有廣泛的發展前景,是目前最先進的能實時擷取地形表面三維空間資訊和影像的遙感系統。目前,在各種提取地面點的算法中,算法結果與世界結果之間差别較大,違背了實際情況,PCL中強大的子產品可以助力此處的各種需求。

虛拟現實、人機互動虛拟現實技術(簡稱VR),

又稱靈境技術,是以沉浸性、互動性和構想性為基本特征的計算機進階人機界面。它綜合利用了計算機圖形學、仿真技術、多媒體技術、人工智能技術、計算機網絡技術、并行處理技術和多傳感器技術,模拟人的視覺、聽覺、觸覺等感覺器官功能,使人能夠沉浸在計算機生成的虛拟境界中,并能夠通過語言、手勢等自然的方式與之進行實時互動,建立了一種适人化的多元資訊空間,具有廣闊的應用前景。

PCL庫簡要說明

對于3D點雲處理來說,PCL完全是一個的子產品化的現代C++模闆庫。其基于以下第三方庫:Boost、Eigen、FLANN、VTK、CUDA、OpenNI、Qhull,實作點雲相關的擷取、濾波、分割、配準、檢索、特征提取、識别、追蹤、曲面重建、可視化等。PCL利用OpenMP、GPU、CUDA等先進高性能計算技術,通過并行化提高程式實時性。K近鄰搜尋操作的構架是基于FLANN(FastLibraryforApproximateNearestNeighbors)所實作的,速度也是目前技術中最快的。PCL中的所有子產品和算法都是通過Boost共享指針來傳送資料的,因而避免了多次複制系統中已存在的資料的需要,從0.6版本開始,PCL就已經被移入到Windows,MacOS和Linux系統,并且在Android系統也已經開始投入使用,這使得PCL的應用容易移植與多方釋出

      PCL包括多個子子產品庫。最重要的PCL子產品庫有如下:過濾器Filters、特征Features、關鍵點Keypoints、注冊Registration、Kd樹Kd-tree、八叉樹Octree、切分Segmentation、Sample Consensus、Surface、Range Image、檔案讀寫I/O、Visualization、通用庫Common、Search

下圖是一個噪音消除的示例。因為測量的誤差,某些點集存在大量的陰影點,而這将使得局部點雲的3D特征建立複雜化。通過對每個點的鄰區 的統計分析,削除未達到一定标準的點,可以将其中一些異常的資料點濾去。在PCL中稀疏噪音的消除方法是在輸入的點集資料中計算各點到其鄰區的分布機率。 對于每個點,計算其到所有相鄰點的距離,假定其結果應該是符合特定均值和标準差的高斯分布,定義全局的可容忍的平均值和标準差,将所有不在可容忍誤差内的 點都認為是噪音點而删除。

PCL庫簡要說明

特征庫包括資料結構和從點雲建立3D特征的方法。3D特征為對于特定點其周圍的可用的幾何關系資訊,如特定的三維點、位置或空間。對于查詢點周圍的點雲資料通常簡稱為k-neighborhood。

PCL庫簡要說明

兩個最廣泛使用的幾何點屬性是曲面的曲率估計和查詢點p的法線。利用點的k-neighborhood計算所得的這兩個屬性都可以作為本地特征。為 了确定有效的k-neighborhood點雲資料,輸入的點雲資料通常會按空間劃分為多個小塊區域,如八叉樹或KD-trees,然後在這些區域中查找 相鄰的點資料。根據具體的應用情況,可以選擇p點附近的固定數量的k個點或者是距離p點r距離内的所有點。毫無疑問,最簡單的計算p點的法線和曲率變化的 方法是在k-neighborhood點曲面中将特征分解計算(例如分别計算特征向量和特征值),當特征值最小時所相關的特征向量即可近似為p點的法向 量,同時曲面的曲率變化可以通過如下公式計算得到:(曲率變化計算不了解其推導過程,後續了解後在詳述)。 

關鍵點庫含有兩個點雲集的關鍵點檢測算法。關鍵點(也叫做興趣點)是指在一副圖像或者一個點雲集中能夠利用一個明确标準檢測出來的穩定的、獨特的 點。一般情況下關鍵點的數量要遠遠少于點雲集中的點數。通常将關鍵點資訊和各個關鍵點的本地特征資訊組合起來形成一組compact—yet descriptive—representation的原始資料。

PCL庫簡要說明

将一些點集資料在統一的世界坐标系下組合起來即為注冊。其關鍵在于确定各個點集之間的關聯點,計算出各個關聯點之間最近似的變換矩陣,對所有的原始資料集不停的重複此過程直到,直到出現各個點集之間的對齊誤差小于指定的門檻值,即可認為注冊過程完成。

注冊庫包含了的大量的點雲注冊算法,其可以處理的點集資料不論是否為有序。例如,PCL在強注冊算法下,可以将拒絕壞的點集而隻将好的點集注冊。

PCL庫簡要說明

Kd樹庫的基礎資料結構使用了FLANN以便可以快速的進行鄰區搜尋。

Kd樹按空間劃分生成葉子節點,各個葉子節點裡存放點資料,其可以按半徑搜尋或鄰區搜尋。最近鄰區搜尋是點雲進行中的一樣核心操作,在點集之間确定關聯點、特征描述、點的鄰區搜尋時都會用到。

PCL庫簡要說明
PCL庫簡要說明

 八叉樹庫提供了直接從點雲資料建立樹的方法。其可支援的操作有:空間分割、下采樣、和搜尋。每個八叉樹的節點都有八個子節點或者沒有子節點(葉節點)。根節點包含囊括所有點的立方體空間,每層深度的子節點都是上層空間按各軸除2的子空間。

八叉樹通常用來作鄰區搜尋,如相鄰區間内搜尋、K鄰區搜尋、指定半徑内搜尋。八叉樹會自動的調整根據點集資料調整其空間尺度。葉節點還提供了一些額 外的操作,如空間的占有率查詢、每空間機關内的點密度。庫還提供了将八叉樹編碼為二進制檔案以及從二進制檔案解析為八叉樹的功能。此外庫中還使用了記憶體池 技術減少了頻繁記憶體的申請和釋放開銷,提高了八叉樹的效率。

下圖展示了一個八叉樹的最底層的子節點空間。每個斯坦福兔表面的點即紅色的點都在八叉樹子節點空間内,這幅圖就是有八叉樹的viewer建立。

PCL庫簡要說明

切分庫包主要為将一個點雲切分為多個片段簇。切分最适合處理由一些空間隔離區域組成的點雲,在這種情況下,點雲常常被分解為一些能夠獨立處理的簇。

關于簇的基本原理可以到其簇的提取教程裡面了解。下面兩幅圖分别展示了片面模型(左)的切分和圓柱模型(右)的切分。

PCL庫簡要說明

備注:關于點雲庫PCL的學習,可以掃描二維碼關注公衆号,有興趣的可以直接在公衆号回複與我交流,互相學習,

PCL庫簡要說明

繼續閱讀