1. 點雲的提取
點雲的獲取:RGBD獲取
點雲的獲取:圖像匹配獲取(通過攝影測量提取點雲數據)
點雲的獲取:三維激光掃描儀
2. PCL簡介
PCL是Point Cloud Library的簡稱,是一個開源的用C++語言開發的點雲庫,它實現了大量點雲相關的通用算法和高效數據結構,涉及到點雲獲取、濾波、分割、配准、檢索、特征提取、識別、追蹤、曲面重建、可視化等。而且支持多種操作平台,可在Windows、Linux、Android、Mac OS X、部分嵌入式實時系統上運行。如果說OpenCV是2D信息獲取與處理的結晶,那么PCL就是在3D信息獲取與處理上的結晶,具有同等地位。PCL也是BSD授權方式,可以免費進行商業和學術應用。
3. PCL的結構和內容
對於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的應用容易移植與多方發布。
圖1 PCL架構圖
從算法的角度,PCL是指納入了多種操作點雲數據的三維處理算法,其中包括:過濾,特征估計,表面重建,模型擬合和分割,定位搜索等。每一套算法都是通過基類進行划分的,試圖把貫穿整個流水線處理技術的所有常見功能整合在一起,從而保持了整個算法實現過程中的緊湊和結構清晰,提高代碼的重用性、簡潔可讀。在PCL中一個處理管道的基本接口程序是:
(1)創建處理對象:(例如過濾、特征估計、分割等);
(2)使用setInputCloud通過輸入點雲數據,處理模塊;
(3)設置算法相關參數;
(4)調用計算(或過濾、分割等)得到輸出。
為了進一步簡化和開發,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中已經存在的代碼。
目錄
第1章 概述
第2章 PCL入門
第3章 PCL基礎
第4章 輸入/輸出(I/O)
第5章 kd-tree
第6章 八叉樹
第7章 可視化
第8章 濾波
第9章 深度圖像
第10章 關鍵點
第11章 采樣一致性算法
第12章 點雲特征描述與提取
第13章 點雲配准
第14章 點雲分割
第15章 點雲曲面重建
第16章 綜合應用
第1章 概述
略
第2章 PCL入門
2.1 Windows下配置安裝PCL開發環境
第三方庫3rdparty
(1)OpenNI
(2)PrimeSense Sensor KinectModPCL
安裝成功了后,發現沒有kinect_viewer_cuda_release.exe文件,去網上下了個,點擊之后顯示無法正常啟動。想着應該是因為電腦沒有連接Kinect設備。
PCL在Visual Studio 2008中的程序開發前期准備:
在VS中添加include包含文件和lib庫文件和dll動態鏈接庫文件:(1)全局級別:工具-選項-項目和解決方案-VC++目錄-包含文件/庫文件 (2)項目級別:項目上右鍵-屬性-C/C++常規-附加包含目錄;項目上右鍵-屬性-連接器-常規-附加庫目錄,項目上右鍵-屬性-連接器-輸入-附加依賴項。
總是出現.obj文件的鏈接器錯誤,只有填寫CMakeLists.txt文件用CMake生成的才沒有鏈接器錯誤,這可真是奇怪,直接添加進去的文件總是出現鏈接器問題哪怕在工程右鍵或者全局添加都不管用,只有通過CMake生成的添加管用。如下所示E:\CD_PCL\3\example_code\1.0\source下的bilateral.cpp文件,通過CMake方式生成的工程文件沒有出現鏈接器錯誤。
也就是說lib文件鏈接庫文件只能用CMake方式鏈接嗎。。。之前OpenCV就不用啊,不知道PCL這次是怎么了。。。
之前總以為是光盤自帶的32位的程序的原因,發現還是鏈接器的原因啊。
會不會是忘了添加鏈接庫名字的原因?如何用pcl配置visual studio 2010
這鏈接庫的名字也太多了吧。。。。崩潰