


摘? 要? 由于海量的點云數據信息,會造成專業處理軟件在讀取、加工數據時產生巨大的計算量,基于Lidar點云在地面回波特點與規律,利用開源LAStools類庫函數首先剝離出點云數據中部分非地面點數據,極大減輕了Lidar點云處理軟件的程序負載壓力,再結合高斯濾波法,去除噪點數據,提高了整體作業效率。
關鍵詞? LAStools;剝離;負載壓力;效率
中圖分類號:P231 文獻標識碼:A
Point Cloud Denoising and Load Pressure Reduction Method Based on LAStools Library
Rao Yun
(Guangdong Provincial Land and Resources Technology Center, Guangzhou Guangdong 510075)
Abstract: Due to the massive amount of point cloud data information, professional processing software will produce a huge amount of calculations when reading and processing data. Based on the characteristics and laws of lidar point cloud echoes on the ground, the open source LAStools library functions are used to first strip out the point cloud data The non-ground point data in the middle greatly reduces the program load pressure of the Lidar point cloud processing software. Combined with the Gaussian filtering method, the noise data is removed and the overall operation efficiency is improved.
Keywords: LAStools; peeling; load pressure; efficiency
1? 前言
受到掃描設備本身精度、人員操作、被測物體表面材質、多路徑效應、系統誤差、飛鳥和空中漂浮物等的影響,所獲取的龐大點云數據不可避免存在許多噪點和離群點,這便直接降低了數據精度,嚴重影響最終的建模成果[1-4],對普通點云處理平臺濾波效果造成了一定的影響。與此同時,點云文件中的成千萬、上億的龐大點云數量給Lidar點云處理軟件形成了一定的負載壓力。
在Lidar數據處理的過程中,我們發現由于不同項目需要,所采集的點云數據類型也不一樣,例如廣東省Lidar激光點云分類及數字高程模型制作項目中,我們只需要對地面點進行采集,以及一些參考我們地形判斷的點即可,因此在面對海量的Lidar點云數據,剔除一些無關緊要的點云數據點,就可以減輕Lidar點云處理軟件的程序負載壓力,以及點云去噪便成為點云數據人工選點之前不可或缺的工作。
2? 技術方案
2.1 引用技術原理
2.1.1? 激光回波次數分類法
由于機載激光具有穿透性,導致在掃描過程中不同的地物有著不同的回波次數和強度信息,當激光脈沖照射到建筑物頂部或裸露的地表時只產生一次回波,而激光脈沖照射到植被時,當激光脈沖照射樹木、植被等具有垂直結構的地物上時,會發生多次回波現象,此時每個激光脈沖不再只有一個返回值,而是擁有多個返回值,此時的激光腳點的分布較為散亂,不再規則排列,且由于具有高度的植被地物對激光的遮擋作用,會造成面向激光照射方向的點云與一部分地面點云在垂直方向上部分重合,而背向激光發射方向的區域由于地物的遮擋會出現空白區域,在這種情況下需結合回波次數進行分析[5-7]。因此,可對多次回波中的最后一次回波數據和僅一次回波的激光數據進行提取,從而濾除大量非地面點。
2.1.2? 高斯濾波(標準差去噪)法
因Lidar激光點云數據的噪點數據普遍具有離群點的特征,則可以定義某處點云小于某個密度,既點云無效。換句話說就是計算每個點到其最近的N個點平均距離。則點云中所有點的距離應構成高斯分布。通過統計濾波后的指對某一地面點在一定半徑范圍內與領域點集之間的距離分析,除去一些不在設定范圍內的不合理噪點。
假設Lidar激光點云數據的任意點Ptn,n=0,1,2,3……,到在該點指定半徑范圍內的任意點的距離為di,那么我們就可以得到指定半徑范圍內的K個鄰近點的平均分布值Sp,即:
那么Da為點云數據集中Sp平均值,即:
則存在σ(Sp標準差)為:
假設Sp服從高斯分布,由均值Sp和標準差σ決定,平均距離在標準范圍即Sp±σ·St之外的點,可以被定義為離群點并從數據集中去除掉,這里St為標準差倍數閾值。
2.2 功能設計和實現
LASTools是在laslib庫基礎上開發的一個函數庫,使用時,先必須經過Visual Studio編譯生成LASlib.dll動態鏈接庫,然后用Visual C++加載動態鏈接庫進行使用。LASTools函數庫可以對Las數據格式中包含的航道、分類、回波次數、坐標等基本信息進行讀取或者寫入操作。與此同時,依靠Visual C++語言平臺,對比python語言平臺有著程序運行效率高,有較好的、靈活性強的人機交互界面,在大數據量運算上有一定的優勢,例如處理點云數據集中的點數據運算。
2.2.1? 功能設計
程序整體功能設計分為兩個功能模塊:一是數據剝離模塊;二是噪點濾波模塊。執行流程如圖1所示。其中,通過數據剝離模塊減輕程序負載壓力;數據初步濾波進一步減少后期噪點濾波模塊的運算量;通過這兩個步驟可以提高整體的計算機運算效率。
(1)數據剝離模塊
數據剝離模塊是指剝離廣東省Lidar激光點云分類及數字高程模型制作項目中不需要參與的數據。數據剝離模塊程序流程如圖2所示。首先通過調用Lastools中的LASreadOpener進行點云數據的打開讀取操作,并且使用LASwriteOpener建立新的Las點云數據進行剝離時待處理點云點與非待處理點云點分別寫入新數據中,其中文件名_g.las是需要加工的點云數據集,文件名_c.las是無關緊要的點云數據集;用return_number得到回波信息并作篩選處理。
主程序如下:
LASreadOpener lasreadOpener;
lasreadOpener.set_file_name(strName);
LASreader *lasreader = lasreadOpener.open();
LASwriteOpener laswriteopener;
laswriteopener.set_file_name(outPath+"\\c.las");
LASwriter *laswriter = laswriteopener.open(&lasreader->header);
LASwriteOpener laswriteopener1;
laswriteopener1.set_file_name(outPath+"\\ground.las");
LASwriter *laswriter1 = laswriteopener1.open(&lasreader->header);
LASwriteOpener laswriteopener2;
laswriteopener2.set_file_name(outPath+"\\try.las");
LASwriter *laswriter2 = laswriteopener2.open(&lasreader->header);
while(lasreader->read_point())
{
if(lasreader->point.return_number/lasreader->point.number_of_returns==1)
laswriter1->write_point(&lasreader->point);
else
laswriter->write_point(&lasreader->point);
}
laswriter->close();
delete laswriter;
laswriter1->close();
delete laswriter1;
lasreader->close();
delete lasreader;
m_OutTxtForS.SetWindowTextA("處理完畢");
(2)噪點濾波模塊
噪點濾波模塊是指去除一些明顯由于某些原因形成的小尺度噪聲和大尺度噪聲。首先進行一次Lidar點云數據處理平臺針對剝離后的數據初次濾波,是為了對后期進一步減少程序計算效率所考慮;其次通過get_classification(2) (參數2是對應Las文件中點類型2的數據,一般都是設置為ground類型)獲得地面點數據,進行剔除大噪聲點(可以從點陣高程是否異常來判斷),高程值由get_Z()來獲取;最后對剩下的點進行高斯濾波計算,排除離群點,離群點寫入Low class,從而把小尺度噪聲從GROUND類型中去除出去,其它的類型保持不變,類型寫入通過set_classification()函數進行。特別說明的是,程序若直接對源數據進行寫操作,會造成數據計算的混亂,為了避免這種情況發生,新建一個Las文件進行寫操作。
主程序如下:
int n=0;
float get_Da,get_Sp[lasReader->header.number_of_point_records];
while(lasreader->read_point())
{
if(lasreader1->read_point().get_classification()==1)? ?//遍歷地面點
{
Px=lasreader->point.get_x();
Py=lasreader->point.get_y();
Pz=lasreader->point.get_z();
float get_disp[50]=0;
int K=0;
while(lasreader1->read_point())
{
if(lasreader1->read_point().get_classification()==1)
{
if(pow(lasreader1->point.get_x()-Px,2)+ pow(lasreader1->point.get_y()-Py,2)< pow(get_r,2))
{
get_disp[K] = sqrt(pow(point.x-Px,2)+ pow(point.y-Py,2)+ pow(point.z-Pz,2));
et_Sp[n] += get_disp[K]
K++;
}
}
}
get_Sp[n]/=(K-1);? ? ? ? ? ? ? // 得到Sp值
get_Da + = get_Sp[n];
n++;
}
}
get_Da/=n;? ? ? ?// 得到Da值
get_LO =pow(get_Sp[0]-get_Da,2);
for(int i=1;i { get_LO+=pow(get_Sp[i]-get_Da,2); } get_LO=sqrt(get_LO/n);? ?//得到標準差 for(int m=0;i { get_Dots[i]=(get_Sp[m] } 需要說明的是:計算中的點半徑根據點云地面點密度而決定,標準差倍數閾值可設置為1,得到離散點放置到點云的0層中,避免地面點誤判造成的地面點丟失;其次,由于可能為地面積水等原因而造成的明顯噪點,可根據圖幅點云地形高程情況,在“需要處理低點的最大高程值”設置相應取值,直接通過對高程判斷排除至點云數據的Low層中。 3? 實現與論證 程序設計總體遵循兩個模塊來設計,由于整個流程之中需經過點云處理平臺的一次濾波,故程序分割成兩部分,同時,為了能一次處理多個文件,輸入類型為文件夾,程序通過遍歷文件夾下所有文件,對每個文件執行操作。兩個模塊界面設計如圖4所示。 3.1 程序負載壓力論證 為了驗證減少程序負載壓力,我們從數據量和響應時間來論證。 1)數據量驗證 我們采用10組數據測試程序完成效果,表1是剝離模塊處理后的數據量對比圖,從表格中我們可以看出,需要處理的數據占用空間平均減少了44.78%;Las文件中的點云數據量平均減少了44.77%,這就意味這軟件處理平臺數據量負載壓力減少了近一半左右。 2)響應時間測試 響應時間是指程序執行指令執行開始到處理完成時的整個過程所需要花費的時間。在這里利用一個專業的Lidar點云分類處理軟件平臺,在同一臺機器進行測試,確保對比數據在同一系統環境下進行測試,并記錄下處理時間。通過濾波工具測試程序處理前后的運行時間比對,來進行響應時間測試。同樣以10組數據進行采樣,測試結果如圖5所示,x軸是響應時間,y軸是數據個數。測試結果表明,計算機的處理效率平均提高了近5分鐘時間。 3.2 濾波效果論證 經過程序濾波效果前后對比如圖5所示。我們可以看出處理后的數據小尺度噪聲和大尺度噪聲得到了明顯控制,地形地貌基本反應出采集地的基本情況,減輕了業人員處理分類數據的工作強度,有效的提高工作效率。 4? 結論 利用LAStools點云處理函數庫在Visual Studio開發平臺開發出LAS點云數據剝離與濾波程序,利用Lidar點云在地面回波特點與規律,剝離出點云數據中部分非地面點數據,使需要處理的數據量降低了至近45%,極大減輕作業軟件處理負載壓力,提升了作業加工的流暢度,再通過濾波模塊,增強了在地形起伏區域及地形細節濾波效果,減少了人工作業時的工作強度,二者結合在一起,從人、機方面總體提高了作業效率。 參考文獻/References [1]魯冬冬,鄒進貴.三維激光點云的降噪算法對比研究[J].測繪通報,2019(S2):102-105. [2]王振,孫志剛.散亂點云噪聲分析與降噪方法研究[J].計算機與數字工程,2015,43(9):1668-1673. [3]文瑞潔.三維激光點云的處理及重建技術研究[D].北京:北京工業大學,2016. [4]吳陽.三維掃描點云數據處理技術研究[D].鄭州:河南工業大學,2017. [5]李偉.基于回波次數的點云強度濾波方法在處理LiDAR 數據中的研究與應用[J].經緯天地,2019(3)61-65. [6]孫杰,賴祖龍.利用隨機森林的地區機載數據特征選擇與分類[J].武漢大學學報(信息科學版),2014(11)1310-1313. [7]高志國.海量點云數據濾波處理方法研究[J].測繪工程,2013(1): 35-38. *第一作者簡介:饒云,男,1976年生,測繪工程師,主要從事基礎地理信息測繪與遙感影像工作。E-mail: 7832798@qq.com。 收稿日期:2020-9-18; 改回日期:2020-11-02。