基于LAStools类库的点云去噪降负载压力方法
2020-01-05饶云
摘 要 由于海量的点云数据信息,会造成专业处理软件在读取、加工数据时产生巨大的计算量,基于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。