【PCL】—基于形态学的点云分割算法详解
生活随笔
收集整理的這篇文章主要介紹了
【PCL】—基于形态学的点云分割算法详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
參考:https://www.cnblogs.com/ironstark/p/5017428.html
1. 航空測量與點云的形態學
- 航空測量是對地形地貌進行測量的一種高效手段。生成地形三維形貌一直是地球學、測量學的研究重點。但對于城市、森林等獨特地形來說,航空測量會受到影響。因為土地表面的樹、地面上的房子都認為的改變了地貌,可以認為是地貌上的噪聲點。設計一種有效的手段去除地面噪聲對地形測量的影響顯得非常重要。這種工作可以認為是一種特殊的點云分割,一般情況下點云分割的目標是去除地面,而這種方法需要在不使用地面平整假設的前提下獲得地面。
- 形態學是圖像處理中非常重要的概念,對二值圖像而言,可由簡單的膨脹運算和腐蝕運算組成一個完整的圖像處理族。但是想要將這個算法移植到三維點云上是比較難的,首先一般的點云沒有明顯的映射值,也沒有清晰的定義域,很難設計形態學處理的基理。但是LIDAR點云例外。由于LIDAR點云由飛機獲得,飛機距離地面相對較遠,且測量方向和地面垂直,這就形成了比較完整的xy->z映射(z方向的范圍遠遠小于xy方向),z方向代表地面物體的高度,x、y方向為平行與地面且相互垂直的兩個軸。有了明確的定義域以及單值映射關系就有了設計形態學算法的基本要素。實際上除了形態學算法之外,許多圖像處理算法都可以用來分割LIDAR點云了,本質上這就是一幅大圖像。
2. 三維形態學算子
- 對于圖像而言,形態學運算一般是針對二值圖像而言的。當然也有針對灰度的形態學運算,其原理應該和針對點云的形態學運算類似(我猜的)。形態學算子的設計實際上非常簡單,只要能設計出基礎的膨脹和腐蝕算子就可以組合得到一系列的處理。
其中,d表示膨脹算子,e表示腐蝕算子。算子的原理有些像中值濾波,通過選取一個窗w中最高點或最低點來完成圖像的膨脹和腐蝕,其效果如下圖所示:
- 在航拍圖的橫截面上可以很清楚的看出膨脹與腐蝕的效果。對于房子和樹可以用不同的尺度窗(從小到大)先腐蝕至地面。但是這會導致一個巨大的問題…如果地面上有個土包(比如秦始皇陵),那么這個土包也會在一次次的腐蝕中被消耗。那豈不是秦始皇陵就發現不了?所以還有一個補償算法用于解決這個問題,稱為線性補償算法。
- 建筑物和土包有一個巨大的區別,建筑物往往相對比較陡峭,而土包卻是變化比較平緩的。這個可以作為一個判據,用于判斷物體是否需要被腐蝕,也作為窗收斂的判據。
式中k稱為斜率,代表下一個窗的大小是上一個窗的2×k倍。
s是一個因子。
dh是切深判據,每一次腐蝕大于切深判據才認為是有效的,小于切深判據則是土包。
上述公式是怎么發現的就需要問論文作者了,所有材料都被收錄于文章:《A Progressive Morphological Filter for Removing Nonground Measurements From Airborne LIDAR Data》
3. PCL對本算法的實現
//生成形態濾波器pcl::ProgressiveMorphologicalFilter<pcl::PointXYZ> pmf;pmf.setInputCloud(cloud);//設置窗的大小以及切深,斜率信息pmf.setMaxWindowSize(20);pmf.setSlope(1.0f);pmf.setInitialDistance(0.5f);pmf.setMaxDistance(3.0f);//提取地面pmf.extract(ground->indices);// 從標號到點云pcl::ExtractIndices<pcl::PointXYZ> extract;extract.setInputCloud(cloud);extract.setIndices(ground);extract.filter(*cloud_filtered);算法效果如下圖所示:
總結
以上是生活随笔為你收集整理的【PCL】—基于形态学的点云分割算法详解的全部內容,希望文章能夠幫你解決所遇到的問題。