PCL—低層次視覺—點雲分割(基於形態學)


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);
View Code

  算法效果如圖:

  

  


免責聲明!

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



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