前言
由於需要對RGBD相機中,Depth採集到的圖像分割除物體,本文整理PCL官方集成的常用點雲分割算法。
官方點雲集中在擁有完整點雲時候的分割,而RGBD相機受限制於其視角,存在遮擋和無法觀測的區域,所以懷揣着該應用的母的來對官方几個常見分割算法做梳理。
所有算法來自於官方Tutorial,參考:
http://www.pointclouds.org/documentation/tutorials/
1、 Euclidean Cluster Extraction
http://www.pointclouds.org/documentation/tutorials/cluster_extraction.php#cluster-extraction
介紹
最爲簡單的一種,思路是將點雲中空間歐幾里得距離近的聚集到一起。
算法步驟
1、 對輸入的無序點雲創建Kd-tree表達 P。 實現快速搜索。
2、 設置空的聚類列表C,以及等待被檢查的點集Q
3、 對於P中的每個點 pi,進行下列步驟:
- 將pi添加到當前點集Q
- 對Q中的每個點pi,執行:
- 搜索 pi爲中心,半徑爲d_th的球面內的所有點構造集合 P_k^i
- 對P_k^i中每一個點 p_k^i ,若未處理過,加入到Q中
- 當Q中所有點都被處理過,將Q加入聚類列表C,將Q重新置空。
4、當所有點pi都被處理時,算法終止。此時C中存放了所有聚類。
參數詳解
該方法設置 一個閾值: d_th, 需要小於物體間距,大於同一物體點雲的最大間隔.
RGBD相機應用
經過改進實際可以只執行一次,即使用物體中心點做初始化。
2、Region growing segmentation
輸出的聚類點雲,彼此之間的特點在於都位於同樣平滑的表面。基於表面向量的比較。
算法過程
首先對點雲基於曲率排序。從最小曲率的點開始,因爲它一般在最平滑的地區,有利於減少分割的整體數量。
基於有序的點雲,可以開始區域增長:
- 選中的點加入到點集seeds
- 對每個seed點,尋找臨近點集
- 每個臨近點與seed點比較法向量角度,小於閾值則添加到當前區域中
- 之後,對每個臨近點測試曲率值,若曲率小於閾值,添加到seeds中
- 當前seed從seeds中移除
若seeds空了說明算法一個區域增長完成,然後將從頭開始過程。
感受
與歐幾里得聚類類似。先做值排序。
參數
曲率閾值 - 影響多麼平滑的點會進入seeds
角度閾值 - 影響分割時,同一個聚類內的點法向量相似度
3、Color-based region growing segmentation
與2類似,只是使用顏色來增長。
應用過分割判斷,若一個聚類的數量小於閾值,則它將和最相近的其他聚類融合。
4、Min-Cut Based Segmentation
專門分割前後景。
算法過程
1、 對給定點雲構建圖,每個單獨點生成一個頂點,同時生成另外兩個頂點:source和sink。每個頂點用邊連接source和sink. 除此之外,每個頂點有邊連接最鄰近的點。
2、 算法對每條邊賦予權重。有三種不同權重:
- Smooth cost: 點雲點之間的權重
- 公式: dist 代表點之間的距離。
- Data cost: 包含前景和背景的懲罰。第一個是這些連接點雲點和source vertex的邊,是用戶指定的常值。第二個是連接sink節點的邊,由下式計算:
-
, distanceToCenter 是在horizontal plane下到期望物體中心的的距離。
-
公式中的Radius 是輸入參數,可以粗略考慮爲從物體中心多遠距離沒有前景點(物體horizontal半徑)。 [ 物體大小? ]
-
3、 所有準備就緒後,執行最小cut的搜索。基於cut的分析,點雲被分割爲前景和後景點。
思考
用圖的模型綜合考慮兩個因素: 1) 平滑程度,點之間的距離 2)距離物體中心的懲罰。
該算法需要已知物體中心,可以用矩形框中心點結合 depth來獲得. radius的參數有點限制了,這豈不是物體先驗大小? 或者給一個室內物體整體大小的值。
是否會影響大小不一的物體?通用性如何? 看看論文。
更多參考:
http://gfx.cs.princeton.edu/pubs/Golovinskiy_2009_MBS/index.php
2009年 ICCV
論文中 automatic 版本效果還行。而PCL的實現需要手動指定 Radius. 捨棄.
5、 Conditional Euclidean Clustering
介紹
實際上是前面提到的1-3的融合。
總結
各類算法都較爲成熟,但可能並不通用。而且基本針對的是完整點雲。
而RGBD相機由於其視角和遮擋的特殊性,需要額外對待。
目前看來針對物體分割,
- 歐幾里得聚類反而是最簡單而最實用的。
- 融合語義的Min-Cut算法也可以考慮。但目前尚不想加入物體大小先驗. 保持其通用性: 如玩具尺度不確定.