随笔:送给初次使用PCL库的小伙伴
寫在前面:
?PCL庫,之前在使用他的時候,只是各種掉庫,覺得自己會調庫了,根據案例可以跑出來自己想要的結果(比如計算一個點云的邊界,使用RANSAC擬合三維直線等)覺得自己就是掌握了,其實并不然,這樣的話只是懵懵懂懂的淺顯的入門了而已,而有的時候并沒有把簡單的掉庫代碼讀懂,只是按照案例代碼復制粘貼導入自己的數據出來了自己想要的結果,并沒有搞懂每一句話是什么意思,這樣的話連一個搬運者也算不上罷了,只是停留在表面的知道功能。最近通過摸索嘗試著去讀一下他的底層各個類結構以及API函數的底層代碼,才覺得自己原來學的只是皮毛,真正的東西博大精深。其實你認真的研究一下發現底層源碼寫的相當規范,包括每一個參數解讀真的很詳細。
開始按照自己的思路總結一下使用方法:
第一步首先要了解PCL:
PCL(Point Cloud Library)是在吸收了前人點云相關研究基礎上建立起來的大型跨平臺開源C++編程庫,它實現了大量點云相關的通用算法和高效數據結構,涉及到點云獲取、濾波、分割、配準、檢索、特征提取、識別、追蹤、曲面重建、可視化等。支持多種操作系統平臺,可在Windows、Linux、Android、Mac OS X、部分嵌入式實時系統上運行。如果說OpenCV是2D信息獲取與處理的結晶,那么PCL就在3D信息獲取與處理上具有同等地位,PCL是BSD授權方式,可以免費進行商業和學術應用。
第二步:PCL的結構和功能
如圖3PCL架構圖所示,對于3D點云處理來說,PCL完全是一個的模塊化的現代C++模板庫。其基于以下第三方庫:Boost、Eigen、FLANN、VTK、CUDA、OpenNI、Qhull,實現點云相關的獲取、濾波、分割、配準、檢索、特征提取、識別、追蹤、曲面重建、可視化等。
PCL利用OpenMP、GPU、CUDA等先進高性能計算技術,通過并行化提高程序實時性。K近鄰搜索操作的構架是基于FLANN (Fast Library for Approximate Nearest Neighbors)所實現的,速度也是目前技術中最快的。PCL中的所有模塊和算法都是通過Boost共享指針來傳送數據的,因而避免了多次復制系統中已存在的數據的需要,從0.6版本開始,PCL就已經被移入到Windows,MacOS和Linux系統,并且在Android系統也已經開始投入使用,這使得PCL的應用容易移植與多方發布。
從算法的角度,PCL是指納入了多種操作點云數據的三維處理算法,其中包括:過濾,特征估計,表面重建,模型擬合和分割,定位搜索等。每一套算法都是通過基類進行劃分的,試圖把貫穿整個流水線處理技術的所有常見功能整合在一起,從而保持了整個算法實現過程中的緊湊和結構清晰,提高代碼的重用性、簡潔可讀。在PCL中一個處理管道的基本接口程序是:
創建處理對象:(例如過濾、特征估計、分割等);
使用setInputCloud通過輸入點云數據,處理模塊;
設置算法相關參數;
調用計算(或過濾、分割等)得到輸出。
為了進一步簡化和開發,PCL被分成一系列較小的代碼庫,使其模塊化,以便能夠單獨編譯使用提高可配置性,特別適用于嵌入式處理中:
- libpcl filters:如采樣、去除離群點、特征提取、擬合估計等數據實現過濾器;
- ?libpcl features:實現多種三維特征,如曲面法線、曲率、邊界點估計、矩不變量、主曲率,PFH和FPFH特征,旋轉圖像、積分圖像,NARF描述子,RIFT,相對標準偏差,數據強度的篩選等等;
- libpcl I/O:實現數據的輸入和輸出操作,例如點云數據文件(PCD)的讀寫;
- ?libpcl segmentation:實現聚類提取,如通過采樣一致性方法對一系列參數模型(如平面、柱面、球面、直線等)進行模型擬合點云分割提取,提取多邊形棱鏡內部點云等等;
- ?libpcl surface:實現表面重建技術,如網格重建、凸包重建、移動最小二乘法平滑等;
- ??libpcl register:實現點云配準方法,如ICP等;
- ??libpclkeypoints:實現不同的關鍵點的提取方法,這可以用來作為預處理步驟,決定在哪兒提取特征描述符;
- ?libpcl range?:實現支持不同點云數據集生成的范圍圖像。
為了保證PCL中操作的正確性,上述提到的庫中的方法和類包含了單位和回歸測試。這套單元測試通常都是由專門的構建部門按需求編譯和驗證的。當某一部分測試失敗時,這些特定部分的各自作者就會立即被告知。這徹底地保證了代碼測試過程出現的任何變故,以及新功能或修改都不會破壞PCL中已經存在的代碼。
第三步:官方網站
網站鏈接:https://pointclouds.org/
我們要充分利用官方網站的資源。
可以點擊圖片中的任何一個模塊。進入模塊找到你想要學習的功能模塊源碼即.h和.hpp文件里邊就是源碼內容解讀。(是各個API源碼的解讀)
Tutorials(教程):我們的PCL教程綜合列表涵蓋了許多主題,從簡單的點云輸入/輸出操作到更復雜的應用,包括可視化、特性估計、分割等。
該教程中主要包括:(是一些案例教程,并不是各個API的源碼)
- Introduction
- Basic Usage
- Advanced Usage
- Features
- Filtering
- I/O
- Keypoints
- KdTree
- Octree
- Range Images
- Recognition
- Registration
- Sample Consensus
- Segmentation
- Surface
- Visualization
- Applications
- GPU
Advanced Topics(高級主題)
如果您對PCL內部的工作方式感興趣,或者正在考慮優化您的工作流,我們收集了一組主題,涵蓋了從減少編譯時間到代碼分析等有趣的主題。
- Compiling PCL
- Developing PCL code
- Committing changes to the git master
- Improving the PCL documentation
- How to build a minimal example
API Reference:(API參考)
PCL的應用程序編程接口(API)文檔包括解釋每一個公共方法和類是如何工作的,顯示了簡單的代碼片段,可以使用快速原型和測試一個特定的算法,并為那些有興趣找出更多關于某一特定方法的理論方面的科學出版物提供鏈接。
Quick Links
- Main Website: http://www.pointclouds.org
- GitHub Repository: https://github.com/PointCloudLibrary
- Continuous Integration: https://dev.azure.com/PointCloudLibrary/pcl/_build
- Changelog: https://pointcloudlibrary.github.io/documentation/changelog.html
一個中文的網站:http://www.pclcn.org/study/shownews.php?lang=cn&id=29(前邊內容介紹轉載自該網站)
http://www.pclcn.org/
網站太強大了,包含的內容也比較強大。需要的時候慢慢扒拉吧。
參考鏈接:https://zhuanlan.zhihu.com/p/268524083
總結
以上是生活随笔為你收集整理的随笔:送给初次使用PCL库的小伙伴的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于近距离的测距感知传感器调研以及扩展介
- 下一篇: Socket:UDP协议小白