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