點雲地面點濾波(Cloth Simulation Filter, CSF)"佈料"濾波算法介紹
本篇博客參考Wuming Zhang的文章“An Easy-to-Use Airborne LiDAR Data Filtering Method Based on Cloth Simulation”
不方便的小夥伴可以在此:資源鏈接下載。
1. 引言
機載LiDAR可以獲取快速、低成本地獲取大區域的高精度地形測量值。為瞭獲取高精度的地形數據(厘米級),對機載LiDAR點雲數據進行“濾波”是一個非常重要的步驟。因此近二十年來,國內外學者提出瞭眾多有效的自動濾波算法,大大降低瞭人力成本,提高瞭點雲數據的應用效率。在博客:“點雲地面點濾波(Progressive Morphological Filter)算法介紹(PCL庫)”與“點雲地面點濾波-progressive TIN densification(PTD)算法介紹”中分別對兩種常用濾波器進行瞭介紹。
以往的眾多算法濾波效果容易受到地形特征的影響(通常在復雜場景及陡峭地形區域濾波效果較差)且常常需要用戶對數據有較為豐富的先驗知識來進行設置濾波器中的各種參數。
為瞭解決這些問題,張吳明教授等人在2015年第三屆全國激光雷達大會提出的“佈料”濾波算法,本篇博客對其進行瞭簡要介紹。
2. 基本思想
傳統的濾波算法大多是考慮在坡度、高程變化之間的不同來進行區分地物點與地面點,而佈料”濾波算法從一個完全新的思路來進行濾波,首先把點雲進行翻轉,然後假設有一塊佈料受到重力從上方落下,則最終落下的佈料就可以代表當前地形。如下圖所示,可以幫助我們進行理解。
下方的藍色圖形代表原始測量值,對其進行翻轉,紅色虛線代表佈料,可以反映地形的起伏。
3. CSF算法實現步驟
3.1 “佈料”模擬
首先,定義瞭一個基本公式:
式中,X代表“佈料”中的粒子在 t 時刻的位置,Fext(X,t)代表外部驅動因素(重力,碰撞等),Fint(X,t)代表內部驅動因素(粒子間的內部聯系)。
即可以總結為“佈料”粒子的位置受到Fext(X,t)與Fint(X,t)兩方面因素的影響。
隨後如下圖所示,通過四個狀態對“佈料”粒子的移動過程進行說明。
(a)為初始狀態,假設一個虛擬的佈放在翻轉的LiDAR測量值上方。黑色點為LiDAR測量值,深紅色點為可移動粒子。
(b)計算重力影響下對粒子產生的位移,由此一些粒子可能會出現在地面的下方。淺紅色點為粒子的舊位置。
(c)相交檢查,檢查粒子新位置是否到達地面,如果已經到達地面則設置為不可移動。藍色點代表粒子不可移動
(d)考慮“佈料”的內部驅動,對現有的“可移動”粒子,根據鄰近粒子所產生的“力”來進行移動新的位置。(如上圖小房子處的可移動粒子)
3.2 外部/內部因素驅動
如3.1節中所述,粒子的位置移動包括外部/內部兩方面的驅動因素,首先假設隻有外部因素Fext(X,t),並設置內部因素Fint(X,t)為0,可以得到以下公式:
式中,m為粒子的重量,通常設置為1,△t 為時間步長。且由於G是一個常數,所以上式非常容易計算,隻要給定一個△t 就可以計算出下一次迭代粒子所在的新位置。
為瞭約束粒子在反轉表面空白區域的反轉問題,作者又考慮瞭使用內部因素Fint(X,t) 。任意選取兩個相鄰的粒子,如果兩個粒子都是 可移動 的,則令二者往相反的方向移動同樣的距離;如果一個是不可移動的,則移動另一個;如果兩者具有相同的高度,則不進行移動。
位移量可以通過下式進行計算:
式中,d為粒子的位移量;當粒子可移動時,b等於1,不可移動時b等於0;pi為p0的相鄰粒子,n是把點進行標準化到垂直方向上的單位向量(0,0,1)T。
移動過程如下圖所示:
同時還引入瞭一個新的參數rigidness, RI,用來描述粒子的移動次數,RI為1時,則移動一次,且移動的距離是兩個粒子之間高差的1/2;RI為2時,則移動兩次,且移動3/4。類似的,RI為3時,移動三次,移動距離為兩個粒子高差的7/8。RI的值越大,則“佈料”就越硬,一般來說,平地需要設置RI的值較大,陡坡、山區需要設置的RI值較小。
3.3 具體實現
綜上所述,佈料模擬的簡要步驟可以總結如下:
1)通過第三方軟件去除原始LiDAR點雲數據中的“孤立點”。
2)反轉LiDAR點雲。
3)初始佈料格網,這時用戶需要設置格網的大小(grid resolution, GR)。初始“佈料”的位置通常在最高點的上方。
4)把所有LiDAR點與格網粒子投影到同一個水平面,並找到每一個粒子的最近鄰點(corresponding point, cp),記錄其投影前的高程(intersection height value, IHV)
5)對於每一個可移動的格網“粒子”,計算其受到重力影響產生的位移,並與當前粒子對應cp點的IHV進行比較,如果粒子的高度低於或者等於IHV,則把粒子的高度設置為IHV並設置為不可移動點。
6)對於每個格網“粒子”,計算其受到內部驅動因素影響所產生的的位移。
7)重復上述5)、6)步驟,直到所有粒子的最大高承諾變化足夠小或者迭代次數到達用戶的預先設置值,則停止模擬過程。
8)計算LiDAR點雲與格網粒子之間的高度差異。
9)區分地面點與非地面點,如果LiDAR點與模擬粒子之間的距離小於預先設置的閾值hcc,則認為其是地面點,反之則認為其為非地面點。
3.4 後處理
上述方法處理過後對於平坦區域可以取得較好的效果,但是對於“陡坡”區域仍然會產生較大的誤差,因為“佈料”會由於其粒子間的內部約束而落在地面測量值的上方。如下圖所示:
為瞭消除這些誤差,可以通過一個後處理方法來解決。在每一個“可移動”粒子的四個鄰接點中找到“不可移動”粒子,然後比較“最近鄰點”之間的高程差,如果高程差值小於閾值hcp,則把“可移動”粒子移動到地面,並設置為不可移動。
例如,上圖中的D點,找到瞭一個不可移動的粒子A,然後比較C,B之間的高程差值(對於D點、A點之間的最近鄰點CP)。如果高程差值小於閾值hcp則待判斷點D就被移動到C點,且被設置為不可移動。重復上述操作,直到所有的“可移動”粒子被正確處理。
如果逐行掃描“粒子”來進行實現此後處理操作,結果可能會受到特定掃描方向的影響。因此,作者采用瞭先建立一個“強連接元素集”(strongly connected components, SCC)包含一個關聯的可移動粒子集。
如上圖所示,每個SCC中包括兩種粒子,第一種是至少包含一個近鄰“不可移動”粒子(上圖中的黃色點M1),第二種是近鄰點中不包含“不可移動”粒子(上圖中的紅色點M2)。執行過程中使用外部的黃色點為“初始種子點”,通過“廣度優先”的方式逐步向內遍歷SCC。如上圖中的從1-18點,實現瞭從邊緣逐步向內部靠近處理過程,而不受掃描方向的影響。
4. 算法使用
Cloth Simulation Filter已經在各種點雲處理軟件,以及MATLAB中都可以直接進行使用,對用戶操作友好,非常方便。
各種使用方式的超鏈接如下:
MATLAB中mex插件
cloud compare 中CSF濾波
dll與lib下載
以及源碼都在github上開源瞭
到此這篇關於點雲地面點濾波(Cloth Simulation Filter, CSF)”佈料”濾波算法詳解的文章就介紹到這瞭,更多相關python 點雲地面點濾波內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- python點雲地面點濾波(Progressive Morphological Filter)算法介紹(PCL庫)
- python實現CSF地面點濾波算法原理解析
- python 點雲地面點濾波-progressive TIN densification(PTD)算法介紹
- 解決python調用matlab時的一些常見問題
- python matlab庫簡單用法講解