當你知道一切都不重要時,世界就是你的了,——《瑞克和莫蒂》S3E8

一、PCL介紹及主要模塊分類
??對于從事計算機視覺、機器視覺領域的從業者來說,OpenCV庫并不陌生,甚至是我們入門這個領域時的學習的第一個開源庫,如果說OpenCV是二維資訊處理方面的工兵鏟,那PCL(Point Cloud Library)就是在三維資訊處理層面的瑞士軍刀,
??顧名思義, PCL(Point Cloud Library)是專注于點云操作處理的開源演算法庫,對于從事三維點云資料處理的道友來說是作業學習中必不可少的工具,
??PCL是跨平臺的,已成功編譯部署在Linux、MacOS、Windows和Android上,具體安裝程序在前輩們的博客中能跟容易找到,本系列中不再贅述其在不同系統中的安裝程序,為了簡化開發,PCL被分成一系列更小的代碼庫,這些代碼庫可以單獨編譯,這種模塊化對于將PCL分布在具有較少計算或大小限制的平臺上非常重要,這些模塊就像是一把瑞士軍刀上的各個小工具,
ps:更有趣的PCL發展歷程可見《點云庫PCL學習教程》,文末附有鏈接,
當一把瑞士軍刀拿在手上,我們肯定好奇這把瑞士軍刀到底能做些什么呢?今天就來扒一扒,

從演算法角度和庫中的主要模塊進行分類:
??共可分為12大模塊,本系列文章將會在后期對這12大模塊進行更為詳盡的拆解,若時間允許還會對這十二大模塊所涉及的數學方法單獨開辟一個系列專題,用于梳理三維視覺領域需要學習的數學方法,[PS:由于作業中我也有 沒有渠道系統性學習三維點云處理相關數學知識 的苦惱,既然等不來別人做,那就只能自己做了,還希望到時候看官們能支持三連一波,]

十二個重要模塊簡要梳理如下:
1、點云濾波模塊:去噪聲和離群值(一般用于預處理)
??pcl_filters模塊包含了用于3D點云資料過濾應用的離群值和噪聲去除機制,一般用于前期預處理,類似于OpenCV中的各種濾波算子組成的庫,只不過操作資料不再是像素而是空間點,

濾波模塊依賴庫:common(公共庫:公共資料結構和方法模塊)
????sample_consensus(樣本一致性庫:RANSAC等方法)
????search(搜索庫:資料搜索結構和最鄰近方法)
????kdtree(KD樹結構)
????octree(八叉樹結構)
官網關于點云濾波模塊的詳細介紹點擊這里
2、點云特征模塊:計算幾何圖形特征
??pcl_features庫包含了從點云資料中估算3D特征的資料結構和機制,三維特征是空間中某一三維點或位置的表示形式,它根據該點周圍的可用資訊來描述幾何圖形,圍繞該點選擇的資料空間通常稱為k-鄰域,

特征模塊依賴庫:common
????????search
????????kdtree
????????octree
????????range_image(由pcl/PointCloud派生而來,提供了從特定視角捕捉3D場景的功能,)
官網關于點云特征模塊的詳細介紹點擊這里
3、點云關鍵點模塊:提取角點或其他獨特的點(一般用于預處理)
??pcl_keypoints庫目前(1.12.0)包含兩個點云關鍵點檢測演算法的實作,關鍵點(也稱為興趣點)是影像或點云中穩定、獨特的點,可以使用定義良好的檢測標準進行識別,通常,興趣點的數量將遠小于點云中點的總數,當關鍵點與特征描述子結合在一起使用時能夠對原始資料形成一個緊湊而具有描述性的表示,

關鍵點模塊依賴庫:common
?????????search
?????????kdtree
?????????octree
?????????range_image
?????????features
?????????filters
官網關于點云關鍵點模塊的詳細介紹點擊這里
4、點云配準模塊:將幾片點云組合成全域一致的點云集合
??pcl_registration庫為有序和無序(普遍)資料集實作了大量的點云配準演算法,其關鍵思想是確定資料集之間的對應點,并找到一個使對應點之間的距離(對齊誤差)最小的變換,這個程序是迭代的,受到資料集的相對位置和方向的影響,一旦對準誤差低于給定的閾值,就稱配準完成,

配準模塊依賴庫:common
????????kdtree
????????sample_consensus
????????features
官網關于點云配準模塊的詳細介紹點擊這里
5、kdTree KD樹模塊:一種樹狀資料結構可提高點云搜索速度
??pcl_kdtree庫使用FLANN提供了kd-tree資料結構,允許快速的最近鄰搜索,Kd-tree (k維樹)是一種空間磁區資料結構,它在樹結構中存盤一組k維點,可以進行有效的范圍搜索和最近鄰搜索,最近鄰搜索是處理點云資料時的核心操作,可用于查找一組點或特征描述符之間的對應關系,或定義一個或多個點周圍的區域鄰域,但需要注意的是,kd-Tree能夠減少點云的搜索時間,但初始化時需要消耗一定時間將點云排列存盤成kd-tree結構,

kdtree模塊依賴庫:common
官網關于kd-tree結構的詳細介紹點擊這里
6、octree 八叉樹模塊:一種樹狀資料結構,支持點云資料空間劃分、下采樣和搜索操作
??pcl_octree庫提供了從點云資料創建層次樹資料結構的有效方法,這支持對點資料集進行空間劃分、下采樣和搜索操作,每個八叉樹節點要么有8個子節點,要么沒有子節點,根節點描述了封裝所有點的立方體包圍盒,在每個樹級別上,這個空間被2的因子細分,從而增加體素解析度,

octree模塊依賴庫:common
官網關于octree結構的詳細介紹點擊這里
7、點云分割模塊:多種不同分割演算法的組合,在物體分離問題中常用
??pcl_segmentation庫包含了將點云分割成不同簇的演算法,這些演算法最適合處理由許多空間隔離區域組成的點云,在這種情況下,通常使用集群將云分解為其組成部分,然后可以獨立處理這些部分,
分割模塊依賴庫:common
????????search
????????sample_consensus
????????kdtree
????????octree

官網關于點云分割模塊詳細介紹點擊這里
8、樣本一致性模塊:多用于圓柱、平面等規則幾何體的擬合或分割檢測,
??pcl_sample_consensus庫保存了像RANSAC這樣的樣本一致性(SAC)方法以及像平面和圓柱體這樣的模型,這些可以自由組合,以檢測點云中的特定模型及其引數,這個庫中實作的一些模型包括:直線、平面、圓柱體和球體,平面擬合通常用于檢測室內常見表面,如墻壁、地板和桌面,其他模型可以用來檢測和分割具有共同幾何結構的物件(例如,擬合一個圓柱體模型到一個杯子),
目前(1.12.0版本)支持的模型包括:
平面、線、平行線、平面上二維圓、空間上三維圓、垂直于指定軸向的平面、法向約束的平面、
球面、圓柱面、圓錐面、表面法相約束的球面、條(桿)狀物,

樣本一致性模塊所依賴的庫:common
官網關于樣本一致性模塊詳細介紹點擊這里
9、點云重建表面模塊:
??pcl_surface庫用于從3D掃描中重建原始表面,例如網格表示或光滑/重采樣表面與法線表示的物體,如果點云存在噪聲,或者是由多片沒有完全對齊的掃描點云組成的,在重建表面前對當前點云集進行平滑和重采樣是必不可少的,該演算法可以調整曲面估計的復雜度,甚至可以同步估計出法線,網格劃分是一種通用的方法來創建一個表面的點,目前PCL有兩種演算法提供:一個非常快速的原始點三角劃分,和一個較慢的利用平滑和孔填充的網格劃分方法,

點云重建表面模塊依賴的庫:common
?????????????search
?????????????kdtree
?????????????octree
官網關于點云重建表面模塊詳細介紹點擊這里
10、點云識別模塊:類似于模板匹配
??PCL識別模塊包含用于物體識別應用的演算法,類似于2D的模板匹配應用在3D點云上,但又有很多細節上有所不同,具體在后面的文章中再做具體展開,
點云識別模塊依賴的庫:common
???????????search
???????????features
官網關于點云識別模塊的詳細介紹點擊這里
11、點云輸入輸出IO模塊:最為常用,PCL庫的基礎模塊
??pcl_io庫包含用于讀取和寫入點云資料(PCD)檔案的類和函式,以及從各種傳感設備捕獲點云,能直接使用PCL的IO庫讀取點云資料的設備種類有很多,例如使用OpenNI的設備:Primesense PSDK, Microsoft Kinect, Asus Xtion Pro/Live等,對于無法直接通信的設備也可以手動寫一個點云格式轉換函式完成銜接,
IO模塊依賴的庫:common
??????octree
??????OpenNi for kinect handling
??????uEye and Ensenso SDK for Ensenso handling
官網關于點云IO模塊的詳細介紹點擊這里
12、點云可視化模塊:較為常用,用于輸出可視化點云,可以調整可視化顏色等引數
??構建pcl_visualization庫的目的是能夠快速原型化并可視化在三維點云資料上操作的演算法的結果,類似于OpenCV用于在螢屏上顯示2D影像和繪制基本2D形狀的高端gui,
該庫提供如下功能:
1.為點云資料集渲染和設定視覺屬性(顏色、點大小、不透明度等)的方法
2.基于點集或者引數方程在螢屏上繪制基本的3D形狀(例如,柱面,球體,直線,多邊形等)的方法
3.用于2D繪圖的直方圖可視化模塊(PCLHistogramVisualizer)
4.多個幾何和顏色處理程式的資料集
該模塊包使用VTK庫進行距離影像的3D渲染和2D操作,

可視化模塊依賴的庫:common
??????????VTK
??????????io
??????????kdtree
??????????RangeImage
官網關于點云可視化模塊的詳細介紹點擊這里
【相關資料分享】
1.《PCL學習教程》
鏈接:https://pan.baidu.com/s/1z6q_dhTpd3328r9GSJxfoQ
提取碼:TJUM
【博主簡介】
??斯坦福的兔子,男,95,天津大學機械工程工學碩士,21年畢業至今跨專業從事光學三維成像及點云處理相關作業,因作業中使用的三維處理庫為公司內部庫,不具有普遍適用性,遂自學開源PCL庫及其相關數學知識以備使用,謹此將自學程序與君共享,
博主才疏學淺,尚不具有指導能力,如有問題還請各位在評論處留言供大家共同討論,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/413650.html
標籤:其他
上一篇:Auto-Encoders原理
下一篇:SMOKE: Single-Stage Monocular 3D Object Detection via Keypoint Estimation
