


摘? 要? 由于海量的點云數(shù)據(jù)信息,會造成專業(yè)處理軟件在讀取、加工數(shù)據(jù)時產(chǎn)生巨大的計算量,基于Lidar點云在地面回波特點與規(guī)律,利用開源LAStools類庫函數(shù)首先剝離出點云數(shù)據(jù)中部分非地面點數(shù)據(jù),極大減輕了Lidar點云處理軟件的程序負載壓力,再結(jié)合高斯濾波法,去除噪點數(shù)據(jù),提高了整體作業(yè)效率。
關(guān)鍵詞? LAStools;剝離;負載壓力;效率
中圖分類號:P231 文獻標(biāo)識碼: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? 前言
受到掃描設(shè)備本身精度、人員操作、被測物體表面材質(zhì)、多路徑效應(yīng)、系統(tǒng)誤差、飛鳥和空中漂浮物等的影響,所獲取的龐大點云數(shù)據(jù)不可避免存在許多噪點和離群點,這便直接降低了數(shù)據(jù)精度,嚴(yán)重影響最終的建模成果[1-4],對普通點云處理平臺濾波效果造成了一定的影響。與此同時,點云文件中的成千萬、上億的龐大點云數(shù)量給Lidar點云處理軟件形成了一定的負載壓力。
在Lidar數(shù)據(jù)處理的過程中,我們發(fā)現(xiàn)由于不同項目需要,所采集的點云數(shù)據(jù)類型也不一樣,例如廣東省Lidar激光點云分類及數(shù)字高程模型制作項目中,我們只需要對地面點進行采集,以及一些參考我們地形判斷的點即可,因此在面對海量的Lidar點云數(shù)據(jù),剔除一些無關(guān)緊要的點云數(shù)據(jù)點,就可以減輕Lidar點云處理軟件的程序負載壓力,以及點云去噪便成為點云數(shù)據(jù)人工選點之前不可或缺的工作。
2? 技術(shù)方案
2.1 引用技術(shù)原理
2.1.1? 激光回波次數(shù)分類法
由于機載激光具有穿透性,導(dǎo)致在掃描過程中不同的地物有著不同的回波次數(shù)和強度信息,當(dāng)激光脈沖照射到建筑物頂部或裸露的地表時只產(chǎn)生一次回波,而激光脈沖照射到植被時,當(dāng)激光脈沖照射樹木、植被等具有垂直結(jié)構(gòu)的地物上時,會發(fā)生多次回波現(xiàn)象,此時每個激光脈沖不再只有一個返回值,而是擁有多個返回值,此時的激光腳點的分布較為散亂,不再規(guī)則排列,且由于具有高度的植被地物對激光的遮擋作用,會造成面向激光照射方向的點云與一部分地面點云在垂直方向上部分重合,而背向激光發(fā)射方向的區(qū)域由于地物的遮擋會出現(xiàn)空白區(qū)域,在這種情況下需結(jié)合回波次數(shù)進行分析[5-7]。因此,可對多次回波中的最后一次回波數(shù)據(jù)和僅一次回波的激光數(shù)據(jù)進行提取,從而濾除大量非地面點。
2.1.2? 高斯濾波(標(biāo)準(zhǔn)差去噪)法
因Lidar激光點云數(shù)據(jù)的噪點數(shù)據(jù)普遍具有離群點的特征,則可以定義某處點云小于某個密度,既點云無效。換句話說就是計算每個點到其最近的N個點平均距離。則點云中所有點的距離應(yīng)構(gòu)成高斯分布。通過統(tǒng)計濾波后的指對某一地面點在一定半徑范圍內(nèi)與領(lǐng)域點集之間的距離分析,除去一些不在設(shè)定范圍內(nèi)的不合理噪點。
假設(shè)Lidar激光點云數(shù)據(jù)的任意點Ptn,n=0,1,2,3……,到在該點指定半徑范圍內(nèi)的任意點的距離為di,那么我們就可以得到指定半徑范圍內(nèi)的K個鄰近點的平均分布值Sp,即:
那么Da為點云數(shù)據(jù)集中Sp平均值,即:
則存在σ(Sp標(biāo)準(zhǔn)差)為:
假設(shè)Sp服從高斯分布,由均值Sp和標(biāo)準(zhǔn)差σ決定,平均距離在標(biāo)準(zhǔn)范圍即Sp±σ·St之外的點,可以被定義為離群點并從數(shù)據(jù)集中去除掉,這里St為標(biāo)準(zhǔn)差倍數(shù)閾值。
2.2 功能設(shè)計和實現(xiàn)
LASTools是在laslib庫基礎(chǔ)上開發(fā)的一個函數(shù)庫,使用時,先必須經(jīng)過Visual Studio編譯生成LASlib.dll動態(tài)鏈接庫,然后用Visual C++加載動態(tài)鏈接庫進行使用。LASTools函數(shù)庫可以對Las數(shù)據(jù)格式中包含的航道、分類、回波次數(shù)、坐標(biāo)等基本信息進行讀取或者寫入操作。與此同時,依靠Visual C++語言平臺,對比python語言平臺有著程序運行效率高,有較好的、靈活性強的人機交互界面,在大數(shù)據(jù)量運算上有一定的優(yōu)勢,例如處理點云數(shù)據(jù)集中的點數(shù)據(jù)運算。
2.2.1? 功能設(shè)計
程序整體功能設(shè)計分為兩個功能模塊:一是數(shù)據(jù)剝離模塊;二是噪點濾波模塊。執(zhí)行流程如圖1所示。其中,通過數(shù)據(jù)剝離模塊減輕程序負載壓力;數(shù)據(jù)初步濾波進一步減少后期噪點濾波模塊的運算量;通過這兩個步驟可以提高整體的計算機運算效率。
(1)數(shù)據(jù)剝離模塊
數(shù)據(jù)剝離模塊是指剝離廣東省Lidar激光點云分類及數(shù)字高程模型制作項目中不需要參與的數(shù)據(jù)。數(shù)據(jù)剝離模塊程序流程如圖2所示。首先通過調(diào)用Lastools中的LASreadOpener進行點云數(shù)據(jù)的打開讀取操作,并且使用LASwriteOpener建立新的Las點云數(shù)據(jù)進行剝離時待處理點云點與非待處理點云點分別寫入新數(shù)據(jù)中,其中文件名_g.las是需要加工的點云數(shù)據(jù)集,文件名_c.las是無關(guān)緊要的點云數(shù)據(jù)集;用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點云數(shù)據(jù)處理平臺針對剝離后的數(shù)據(jù)初次濾波,是為了對后期進一步減少程序計算效率所考慮;其次通過get_classification(2) (參數(shù)2是對應(yīng)Las文件中點類型2的數(shù)據(jù),一般都是設(shè)置為ground類型)獲得地面點數(shù)據(jù),進行剔除大噪聲點(可以從點陣高程是否異常來判斷),高程值由get_Z()來獲取;最后對剩下的點進行高斯濾波計算,排除離群點,離群點寫入Low class,從而把小尺度噪聲從GROUND類型中去除出去,其它的類型保持不變,類型寫入通過set_classification()函數(shù)進行。特別說明的是,程序若直接對源數(shù)據(jù)進行寫操作,會造成數(shù)據(jù)計算的混亂,為了避免這種情況發(fā)生,新建一個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);? ?//得到標(biāo)準(zhǔn)差 for(int m=0;i { get_Dots[i]=(get_Sp[m] } 需要說明的是:計算中的點半徑根據(jù)點云地面點密度而決定,標(biāo)準(zhǔn)差倍數(shù)閾值可設(shè)置為1,得到離散點放置到點云的0層中,避免地面點誤判造成的地面點丟失;其次,由于可能為地面積水等原因而造成的明顯噪點,可根據(jù)圖幅點云地形高程情況,在“需要處理低點的最大高程值”設(shè)置相應(yīng)取值,直接通過對高程判斷排除至點云數(shù)據(jù)的Low層中。 3? 實現(xiàn)與論證 程序設(shè)計總體遵循兩個模塊來設(shè)計,由于整個流程之中需經(jīng)過點云處理平臺的一次濾波,故程序分割成兩部分,同時,為了能一次處理多個文件,輸入類型為文件夾,程序通過遍歷文件夾下所有文件,對每個文件執(zhí)行操作。兩個模塊界面設(shè)計如圖4所示。 3.1 程序負載壓力論證 為了驗證減少程序負載壓力,我們從數(shù)據(jù)量和響應(yīng)時間來論證。 1)數(shù)據(jù)量驗證 我們采用10組數(shù)據(jù)測試程序完成效果,表1是剝離模塊處理后的數(shù)據(jù)量對比圖,從表格中我們可以看出,需要處理的數(shù)據(jù)占用空間平均減少了44.78%;Las文件中的點云數(shù)據(jù)量平均減少了44.77%,這就意味這軟件處理平臺數(shù)據(jù)量負載壓力減少了近一半左右。 2)響應(yīng)時間測試 響應(yīng)時間是指程序執(zhí)行指令執(zhí)行開始到處理完成時的整個過程所需要花費的時間。在這里利用一個專業(yè)的Lidar點云分類處理軟件平臺,在同一臺機器進行測試,確保對比數(shù)據(jù)在同一系統(tǒng)環(huán)境下進行測試,并記錄下處理時間。通過濾波工具測試程序處理前后的運行時間比對,來進行響應(yīng)時間測試。同樣以10組數(shù)據(jù)進行采樣,測試結(jié)果如圖5所示,x軸是響應(yīng)時間,y軸是數(shù)據(jù)個數(shù)。測試結(jié)果表明,計算機的處理效率平均提高了近5分鐘時間。 3.2 濾波效果論證 經(jīng)過程序濾波效果前后對比如圖5所示。我們可以看出處理后的數(shù)據(jù)小尺度噪聲和大尺度噪聲得到了明顯控制,地形地貌基本反應(yīng)出采集地的基本情況,減輕了業(yè)人員處理分類數(shù)據(jù)的工作強度,有效的提高工作效率。 4? 結(jié)論 利用LAStools點云處理函數(shù)庫在Visual Studio開發(fā)平臺開發(fā)出LAS點云數(shù)據(jù)剝離與濾波程序,利用Lidar點云在地面回波特點與規(guī)律,剝離出點云數(shù)據(jù)中部分非地面點數(shù)據(jù),使需要處理的數(shù)據(jù)量降低了至近45%,極大減輕作業(yè)軟件處理負載壓力,提升了作業(yè)加工的流暢度,再通過濾波模塊,增強了在地形起伏區(qū)域及地形細節(jié)濾波效果,減少了人工作業(yè)時的工作強度,二者結(jié)合在一起,從人、機方面總體提高了作業(yè)效率。 參考文獻/References [1]魯冬冬,鄒進貴.三維激光點云的降噪算法對比研究[J].測繪通報,2019(S2):102-105. [2]王振,孫志剛.散亂點云噪聲分析與降噪方法研究[J].計算機與數(shù)字工程,2015,43(9):1668-1673. [3]文瑞潔.三維激光點云的處理及重建技術(shù)研究[D].北京:北京工業(yè)大學(xué),2016. [4]吳陽.三維掃描點云數(shù)據(jù)處理技術(shù)研究[D].鄭州:河南工業(yè)大學(xué),2017. [5]李偉.基于回波次數(shù)的點云強度濾波方法在處理LiDAR 數(shù)據(jù)中的研究與應(yīng)用[J].經(jīng)緯天地,2019(3)61-65. [6]孫杰,賴祖龍.利用隨機森林的地區(qū)機載數(shù)據(jù)特征選擇與分類[J].武漢大學(xué)學(xué)報(信息科學(xué)版),2014(11)1310-1313. [7]高志國.海量點云數(shù)據(jù)濾波處理方法研究[J].測繪工程,2013(1): 35-38. *第一作者簡介:饒云,男,1976年生,測繪工程師,主要從事基礎(chǔ)地理信息測繪與遙感影像工作。E-mail: 7832798@qq.com。 收稿日期:2020-9-18; 改回日期:2020-11-02。