基於傳統方法點雲分割以及PCL中分割模塊


 
之前在微信公眾號中更新了以下幾個章節
1,如何學習PCL以及一些基礎的知識
2,PCL中IO口以及common模塊的介紹
3,PCL中常用的兩種數據結構KDtree以及Octree樹的介紹 
 
      三維點雲分割是將同屬性的點雲物體分割出來,以便於單獨對該點雲物體處理,但是由於點雲數據是一種高冗余度,且不均勻的數據結構,所以點雲分割具有一定挑戰性,點雲庫於(PCL)2011年推出以來,得到行業廣泛的應用,該庫包含了最先進的3D感知算法,並包含了LIDAR和三維掃描儀的接口,這使得點雲庫PCL在機器人領域持續不斷的發展壯大起來。至今為止已經更新到了1.9.1版本。在圖像分割中常常用到前景與背景的分割處理,而在點雲處理中,對於給定點雲數據,分割的目標是將具有相似特征的點聚類成均勻區域,根據分割結果應用於各個方面的場景分析,一般的方法時根據輸入點雲的網格構建圖形,使用邊界線的法線,平滑度或者是凹凸性等信息進行聚類分割,在文章【1】中調查了分割的方法有:凹凸性分割,分水嶺分析,層次聚類,區域增長以及頻譜聚類。這些方法不僅是應用圖像,也廣泛的應用於點雲數據的分割。
      在計算機視覺中,2D圖像的分割是一個很經典的問題,並且已經有着十幾年的研究歷史,其中基於傳統的方法比較流行有Graph Cuts[2],包含了Normalized Cuts和Min Cuts 這些方法的思想同樣適應於3D點雲的分割,並且這部分內容在PCL中都已經開源。
 
點雲分割算法應該具有以下三種重要的屬性:
(1)比如樹木是具有與汽車相區別的特征的,當點雲數據的特征數量增加時,分割算法應該具有一定的魯棒性,能夠學習如何自動的區分它們。
(2)其次分割應該能夠根據其相鄰的信息推斷出稀疏點雲中這些點的屬性或者判定出屬於哪個標簽。
(3)分割算法應該能適用於不同的掃描器,即便是相同的場景在不同的掃描儀生成出的點雲也是具有不同的屬性的,並且產生點雲的質量以及稀疏性的也是不一樣的。
   
點雲分割的挑戰:
點雲數據雖然可以確定3D對象的形狀,大小和一些其他屬性,但是3D點雲通常由於傳感器的限制,數據是嘈雜稀疏且無序的,比如激光雷達線性和角速率的變化,點的采集密度也是不均勻的,此外點雲數據的表面形狀可以是任意的,是沒有數據統計分布呈現出來的。所以這就給點雲的分割帶來一系列的問題。
 
數據集介紹:
Example scenes of (a) Cornell RGBD dataset, (b) VMR-Oakland dataset, (c) KITTI dataset, and (d) Robotic 3D Scan Repository
如圖1 這些數據可分為兩類:Kinect捕獲的室內數據集,以及由激光掃描儀(比如lidar)捕獲的室外數據集,將分割算法應用於這些公共數據集使研究者們更加的了解分割算法的優缺點
 
(1)Cornell RGBD數據集:該數據集具有52個標簽的具有RGB值的點雲的室內場景(24個標記為辦公場景和28個標記的家庭場景)。使用RGBDSLAM [45]從原始RGB-D圖像創建點雲數據。該數據集由大約550個視圖組成,具有2495個標簽對應着27個種類的物體。
(2)VMR-Oakland數據集:該數據集是通過移動平台從CMU園區收集的帶有標記點雲數據。使用激光掃描儀收集點雲並以文本格式保存,每行中寫入三個實值坐標。並且提供訓練集,和測試集。
(3) KITTI數據集:該數據集包括由360°Velodyne激光掃描儀捕獲的大量無組織點雲數據。它是具有手動標記真值框的,如汽車,行人,電車,卡車和自行車等戶外的真值邊界框,用於訓練集。
(4)Robotic 3D Scan Repository: 該數據集為室內和室外環境提供3D點雲數據集的集合。一些數據集包括熱量和顏色信息。這是3D點雲數據的巨大集合,不僅可用於分割,還可用於不同其他算法使用。但是,這些數據集尚未標記,在將它們用作分割算法的輸入之前,可能是需要預處理步驟。
 
分割算法:
接下里將介紹五種傳統的分割算法:基於邊緣的方法,基於區域的方法,基於屬性的方法,基於模型的方法和基於圖優化的方法
                                                                                                       三維點雲分割方法的分類
(1)基於邊緣的方法
邊緣是描述點雲物體形狀的基本特征,這種方法檢測點雲一些區域的邊界來獲取分割區域,這些方法的原理是定位出邊緣點的強度變化,論文【2】提出了一種邊緣檢測技術,通過計算梯度,檢測表面上單位法向量方向的變化來擬合線段。論文【3】是基於掃描線的分組進行快速分割,基於邊緣的方法雖然分割速度比較快但是准確度不能保證,因為邊緣對於噪聲和不均勻的或稀疏的點雲非常敏感。
(2)基於區域分割方法
基於區域的方法使用鄰域信息來將具有相似屬性的附近點歸類,以獲得到分割區域,並區分出不同區域之間的差異性。 基於區域的方法比基於邊緣的方法更准確。 但是他們在分割過度或不足以及在如何准確確定區域邊界方面存在問題。 研究者們將基於區域的方法分為兩類:種子區域(或自下而上)方法和非種子區域(或自上而下)方法。
 
種子區域方法:基於種子的區域分割通過選擇多個種子點來開始做分割,從這些種子點為起始點,通過添加種子的鄰域點的方式逐漸形成點雲區域,最初的算法是有論文【4】提出來,該算法主要包含了兩個步驟:(1)基於每個點的曲率識別種子點,(2)根據預定標准,該標准可以是點的相似度和點雲的表面的相似度來生長種子點。這種方法對噪聲點也非常敏感,並且耗時。但后續有很多基於這種方法的改進,比如對於激光雷達數據的區域增長的方法,提出了基於種子點的法向量和與生長平面的距離來生長種子點。
種子區域方法高度依賴於選定的種子點。不准確選擇種子點會影響分割過程,並可能導致分割不足或過度。選擇種子點以及控制生長過程是耗時的。分割結果可能對所選的兼容性閾值敏感。另一個困難是決定是否在給定區域中添加點,因為這種方法對點雲的噪聲也很敏感。
 
非種子區域方法:這種方法時基於自上而下的方法。首先,所有點都分為一個區域。然后細分過程開始將其划分為更小的區域。論文【5】使用這種方法指導聚類平面區域的過程,以重建建築物的完整幾何形狀。該工作引入了基於局部區域的置信率為平面的分割方法。這種方法的局限性在於它也會可能過度分割,並且在分割其他對象(例如樹)時它不能很好地執行。非種子區域方法的主要困難是決定細分的位置和方式。這些方法的另一個限制是它們需要大量的先驗知識(例如,對象模型,區域數量等),然后這些未知的先驗知識在復雜場景中通常是未知的。
(3)基於屬性的方法
該方法是居於點雲數據的屬性的一種魯棒性較好的分割方法,這種方法一般包括了兩個單獨的步驟(1)第一步,基於屬性的計算,在第二步,將根據計算點的屬性進行聚類,這種聚類方法一般能適應空間關系和點雲的各種屬性。最終將不同的屬性的點雲分割出來,但是這種方法局限性在於他們高度依賴派生屬性的質量所以要求第一步能夠精確的計算點雲數據的屬性,這樣才會在第二步中根據屬性的類別分割出最佳的效果。論文【6】則是這種方法實現的,提出了一種基於特征空間聚類分析方法,在該方法中,使用一種自適應斜率的鄰域系統導出法向量,使用點雲數據的屬性,例如距離,點密度,點在水平或者垂直方向的分布,來定義測量點之間的領域,然后將每個方向上的法向量的斜率和點鄰域的數據之差作為聚類的屬性,這種方法可以消除異常值和噪聲的影響,基於屬性的方法是將點雲分割相同屬性區域的高效方法,並且分割的結果靈活而准確。 然而,這些方法依賴於點之間鄰域的定義和點雲數據的點密度。 當處理大量輸入點的多維屬性時,這種方法的另一個限制是比較耗時。
(4)基於模型的方法
該方法時基於幾何的形狀比如球形,圓錐,平面和圓柱形來對點雲進行分組,那么根據這些幾個形狀,具有相同的數學表示的點將會被分割為同一組點,論文【7】
中引入了一種眾所周知的算法RANSAC(RANdom SAmple Consensus),RANSAC是強大的模型,用於檢測直線,圓等數學特征,這種應用極為廣泛且可以認為是模型擬合的最先進技術,在3D點雲的分割中需要改進的方法都是繼承了這種方法。基於模型的方法具有純粹的數學原理,快速且強大,具有異值性,這種方法的主要局限性在於處理不同點雲是的不准確性。這種方法在點雲庫中已經實現了基於線,平面,圓等各種模型。
(5)基於圖優化的方法
基於圖優化的方法在機器人的應用中十分流行,眾所周知的方法是FH算法【7】,該方法簡單且高效,並且像Kruskal算法一樣用於在圖中查找最小生成樹。許多基於圖的方法的工作被投入到概率推理模型中,例如條件隨機場(CRF),使用CRF標記具有不同幾何表面基元的點的方法。基於圖優化的方法在復雜的城市環境中成功地分割點雲,具有接近實時的性能。為了與其他方法進行比較,基於圖形的方法可以對點雲數據中的復雜場景進但是,這些方法通常無法實時運行。其中一些可能需要離線訓練等步驟。
 
以上將分割方法分為五類。但是,一般來說,有兩種基本方法。第一種方法使用純數學模型和幾何推理技術,如區域增長或模型擬合,將線性和非線性模型擬合到點雲數據。這種方法允許快速運行時間能實現良好的結果。這種方法的局限性在於在擬合物體時難以選擇模型的大小,對噪聲敏感並且在復雜場景中不能很好地工作。
 
第二種方法使用特征描述子的方法從點雲數據中提取3D特征,並使用機器學習技術來學習不同類別的對象類型,然后使用結果模型對所獲取的數據進行分類。在復雜場景中,機器學習技術將優於純粹基於幾何推理的技術。原因是由於噪聲,密度不均勻,點雲數據中的遮擋,很難找到並將復雜的幾何圖元擬合到物體上。雖然機器學習技術可以提供更好的結果,但它們通常很慢並且依賴於特征提取過程的結果。
以上的這些算法在PCL的都已經實現且都有現成的demo可以查看效果。
 
 
以下將詳細的介紹PCL點雲中的分割模塊
該模塊是在以上基本模塊的基礎上進行的研究,比如如何將點雲數據構造成kdtree或者Octree結構使用FLANN(最近鄰搜索)的方式尋找點與周圍見之間的關系。
在PCL常用的聚類分割的類有以下幾種:
class   pcl::ConditionalEuclideanClustering< PointT >
該類實現了用於設定的條件的歐式聚類的分類算法
bool enforceIntensitySimilarity (const pcl::PointXYZI& point_a, const pcl::PointXYZI& point_b, float squared_distance)
{
if (fabs (point_a.intensity - point_b.intensity) < 0.1f)
return (true);
else
return (false);
}

// 以上是一個用於設定的基於點雲強度信息的田間也就是兩點的強度信息要求/ 

pcl::ConditionalEuclideanClustering<pcl::PointXYZI> cec (true);
cec.setInputCloud (cloud_in);
cec.setConditionFunction (&enforceIntensitySimilarity);  
// 此處將我們的條件函數加入
cec.setClusterTolerance (0.09f);   //聚類所能接受程度
// Size constraints for the clusters:
cec.setMinClusterSize (5);   //聚類的大小設置
cec.setMaxClusterSize (30);
// The resulting clusters (an array of pointindices):
cec.segment (*clusters);
// The clusters that are too small or too large in size can also be extracted separately:
cec.getRemovedClusters (small_clusters, large_clusters);
 
class  pcl::CPCSegmentation< PointT >
對超體素圖進行分割的分割算法。 它使用局部凹度引起的平面切割進行遞歸分割。使用局部約束的有向RANSAC進行分割。
CPC分割與LCCP分割是繼承的關系 :具體論文可以查看文獻
M. Schoeler, J. Papon, F. Woergoetter Constrained Planar Cuts - Object Partitioning for Point Clouds In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR) 2015
 
class  pcl::EuclideanClusterExtraction< PointT >
歐幾里得聚類提取是歐幾里得意義上的聚類獲取分割的點雲類。
此函數是經常用到的,在之前的例子中有多次提及,在這里就不再去舉例說明。可以查閱相關的博客內容
 
class  pcl::LabeledEuclideanClusterExtraction< PointT >
labeledeuclidenclusterextraction表示一個分段類,用於歐幾里得意義上的帶有標簽信息的聚類提取,
 
class  pcl::ExtractPolygonalPrismData< PointT >
ExtractPolygonalPrismData使用一組表示平面模型的點索引,並與給定的高度一起生成三維多邊形棱柱。
然后使用多邊形棱柱分割位於其內部的所有點。
它的一個使用示例是提取位於一組三維邊界內的數據(例如,由平面支持的對象)。
double z_min = 0., z_max = 0.05; // we want the points above the plane, no farther than 5 cm from the surface
pcl::PointCloud<pcl::PointXYZ>::Ptr hull_points (new pcl::PointCloud<pcl::PointXYZ> ());
pcl::ConvexHull<pcl::PointXYZ> hull;
// hull.setDimension (2); // not necessarily needed, but we need to check the dimensionality of the output
hull.setInputCloud (cloud);
hull.reconstruct (hull_points);
if (hull.getDimension () == 2)
{
pcl::ExtractPolygonalPrismData<pcl::PointXYZ> prism;
prism.setInputCloud (point_cloud);
prism.setInputPlanarHull (hull_points);
prism.setHeightLimits (z_min, z_max);
prism.segment (cloud_indices);
}

 

class  pcl::GrabCut< PointT >
實現了GrabCut分割。
 
class  pcl::segmentation::detail::RandomWalker< Graph, EdgeWeightMap, VertexColorMap >
 
實現隨機行走的多標簽圖分割相關論文  Random Walks for Image Segmentation
 
class   pcl::LCCPSegmentation< PointT >

 

一種簡單的分割算法,將一個超體素圖分割成由凹邊界分隔的局部凸連接超體素組。相關論文 S. C. Stein, M. Schoeler, J. Papon, F. Woergoetter Object Partitioning using Local Convexity In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR) 2014
 
class  pcl::SACSegmentationFromNormals< PointT, PointNT >
結合點雲的數據表面的法向量使用RANSAC方法的分割
 
class  pcl::SeededHueSegmentation
class  pcl::SegmentDifferences< PointT >
SegmentDifferences獲取兩個空間對齊的點雲之間的差異,並返回它們之間在最大給定距離閾值下的差異。
 
class  pcl::SupervoxelClustering< PointT >
實現基於體素結構、法線和RGB值的超體素算法。具體論文如下
Voxel Cloud Connectivity Segmentation - Supervoxels from PointClouds In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR) 2013
 
下一章節將具體介紹在PCL實現的基於模型的分割方法。
 
【1】A. Shamir, Segmentation and shape extraction of 3D boundary meshes (state of the art report), in Eurographics, 2006
【2】 B. Bhanu, S. Lee, C. Ho, and T. Henderson, Range data processing:Representation of surfaces by edges. In proc.int. Pattern recognition conf, 1896
【3】 X.Y. Jiang, H. Bunke, and U. Meier, Fast range image segmentation  using high-level segmentation primitives, In 3rd IEEE Workshop on Applications of Computer Vision, USA, 1996
【4】P.J. Besl, R.C. Jain, Segmentation through variable order surface fitting, IEEE Transaction on Pattern Analysis and Machine Intelligence 10, 1988.
【5】J. Chen, B. Chen, Architectural modeling from sparsely scanned range data. Int. J. Comput. Vision 78, 2008.
【6】S. Filin, N. Pfeifer, Segmentation of airborne data using a slope adaptive filter, ISPRS J. Photogramm. Remote Sens., vol. 60, pp. 71- 80, 2006.
【7】M. Fischler, R. Bolles, Random sample consensus: a paradigm for model fitting with applications to image analysis and automated cartography, Communications of the ACM
【8】P.F. Felzenszwalb, D.P. Huttenlocher, Efficient Graph-Based Image Segmentation, International Journal of Computer Vision, 59(2), 2004.
 
以上就是全部內容,可能存在一些錯誤歡迎指示,並可以發郵件交流,您可以可以關注微信公眾號。加入我們翻譯小組或者加入經營微信公眾號群,也加入技術交流群與跟多的小伙伴一起交流。
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM