馬雪云 張 杰
(1.山東華峰地理信息科技有限公司,山東 濟南 250102; 2.山東省國土測繪院,山東 濟南 250102)
機載LiDAR技術因其直接測量、高精度、高效率、多回波等特點在獲取地表數據方面有著獨特的優勢,在建筑物建模、帶狀線路測量、林木植被提取、潮間帶測繪等領域已得到越來越廣泛的應用[1]。然而,隨著生產項目的不斷豐富和研究的深入,發現作為機載LiDAR主要測繪成果之一的點云數據在后期處理時往往問題頻發,如點云重復、時間或航線等屬性丟失、坐標有誤、點云分類前后數量不一致等等,而目前常用的如TerraSolid,LAS++,ENVI LiDAR,CloudCompare,LiDAR-Suite等點云數據處理軟件并未具備解決這類具有一定針對性問題的功能。為此,系統地從點云數據的檢查到對其修復進行研究,是具有重要現實意義和應用價值的。
用于生產的點云數據需經航飛獲取的姿態、測距等信息按作業航線及構架線聯合解算獲得,且需通過外業檢核點的精度檢核,之后再按需進行分區分塊、濾波、細分類等操作,最終經質檢合格才投入應用[2],對其生產流程描述如圖1所示。

值得說明的是,其中,經外業檢核點驗證精度合格后的航帶點云數據,在按實際進行分塊、濾波以及細分類等操作后,仍需經過全面的質檢,其中一部分主要的工作即為對點云數據的檢查。相應的,如果發現存在問題,則就要進行必要的修復。本文也正是針對這一環節中的點云數據檢查和點云數據修復工作展開的研究。
隨著技術的不斷發展,點云數據包含的信息也逐漸豐富,包括空間坐標、時間戳、分類號、所屬航線、掃描角、回波次數、回波強度、RGB值等等,相應的,其對存儲的文件也提出了更高的要求。由美國攝影測量與遙感協會(American Society for Photogrammetry and Remote Sensing,ASPRS)制定的作為點云存儲及交換的LAS格式,具有結構清晰、儲存空間節約、可擴展等特點。目前已經被各軟、硬件廠商普遍接受,且應用越來越廣泛,也吸引了較多學者利用C++,IDL,MATLAB等解析語言,基于PCL,OpenGL,ArcGIS等平臺展開研究[3,4]。
不同的LAS版本結構存在差異但均包含公共頭文件、可變長度記錄及點數據幾部分內容,以常用的LAS1.2格式為例,解譯后的點云數據包含如表1所示的信息。

表1 機載LiDAR點云數據樣式
一般的,在確認點云工程的坐標形式、分類原則等基本要求(屬性)后,無論何種操作,都應當保證修改前后點云數據的屬性完整性、坐標正確性、數量一致性以及文件的高匹配度。除此之外,仍需要對點云數據中的重復情況以及分類情況進行檢查。
通過修改前后的點云數據對比,具體如下:1)屬性完整性檢查包括檢查時間屬性、回波屬性、航線屬性、掃描角屬性是否缺失;2)坐標正確性檢查指的是檢查修改前后的點云數據坐標信息是否一致;3)數量一致性檢查主要用于檢查點云數據的數量變化;4)文件匹配度檢查主要是指通過組合坐標、時間及回波位置的方式,在確定點云數據唯一的前提下(已經過實際檢驗該種組合可以確定唯一),計算前后文件的匹配情況(可側面檢查時間屬性是否改變);5)點云重復情況檢查主要用于發現點云數據中是否存在無意義的重復點;6)點云分類情況檢查主要顧及到點云細分類的標準,為了明確修改后點云數據中各類別的統計情況,這一檢查可以從數量上直觀發現分類是否有誤。
針對點云數據的檢查情況,數據修復主要為了解決一些具有針對性的問題,如前文所提及的時間屬性恢復、坐標恢復、點云去重以及其他層點云的恢復。
具體的,數據的修復仍是在確定唯一的前提下,通過選擇性的組合坐標、時間及回波位置的方式,對比修改前后的點云數據文件,實現時間屬性、坐標屬性等的恢復以及點云的去重。比如,當要進行點云數據的時間屬性修復時,可根據坐標及回波位置的組合來確定點數據的唯一性;當要進行點云數據的坐標信息恢復時,則可采用組合時間、回波位置及強度的方式來確定唯一。明顯的,如果處理后的點云數據損壞嚴重或屬性丟失嚴重,則將無法進行修復。
由于點云數據的特點,其可以很好的用行×列的矩陣形式來表示,為了實現上述功能,在MATLAB環境下進行相應設計并完成了開發工作。主要的實現流程如圖2,圖3所示。


實際中,輸出的點云檢查報告為Excel中的.xls或.xlsx格式文件,不同的檢查項目分別存儲在不同的工作簿中,這也為后續的操作極大地提供了方便。
而在點云數據修復中,重點在于用何種屬性來唯一的確定一個點,上圖中的各組合方式已通過實際驗證。
這里在點云數據的檢查中,以數量差異以及類別統計為例;在點云修復中,以修復時間屬性為例,提供部分代碼如下:
%%數量差異
diff_points{f_id,1}=part_filename;%文件名稱
diff_points{f_id,2}=length(start_1{1});%處理后點云數量
diff_points{f_id,3}=length(start_2{1});%處理前點云數量
diff_points{f_id,14}=diff_points{f_id,2}-diff_points{f_id,3};%處理前點云數量差值
%%類別統計
diff_points{f_id,8}=tabulate(start_1{1});%處理后點云統計
diff_points{f_id,9}=tabulate(start_2{1});%處理前點云統計
%%修復時間屬性,讀取要修復的點云數據
mat_1=cell2mat(mat_1);%回波+高程+東向+北向
mat_1=roundn(mat_1,-7);%統一精度,避免不一致
%讀取處理前的點云數據
mat_2=cell2mat(mat_2);%回波+高程+東向+北向
mat_2=roundn(mat_2,-7);%統一精度,避免不一致
%矩陣相交,給start_1賦時間屬性
[~, ia, ib] = intersect(mat_1, mat_2,′rows′);
for k=1:length(ia)
start_1{12}(ia(k))=start_2{12}(ib(k));
end
需要說明的是,上述代碼中的start_1和start_2為通過讀取LAS格式點云文件,參考表1樣式整理的分別對應要修復及處理前的點云數據。
機載LiDAR技術應用廣泛且在搭載設備的可選性、獲取數據的豐富程度、點云數據的密度及精度提升等方面仍有很大的發展空間。結合實際生產,本文針對機載LiDAR點云數據的檢查及修復工作所開展的研究有效地完善了作為該技術主要測繪產品之一的點云數據的生產流程,文中所描述的相關理論及程序已在多個項目中得到驗證和應用,這也為相關的研究者提供了一定參考,后期針對點云數據的處理工作仍將不斷挖掘以期提供更加有益的解決方案。