机载LiDAR点云数据检查及其修复研究
2020-06-05马雪云
马雪云 张 杰
(1.山东华峰地理信息科技有限公司,山东 济南 250102; 2.山东省国土测绘院,山东 济南 250102)
0 引言
机载LiDAR技术因其直接测量、高精度、高效率、多回波等特点在获取地表数据方面有着独特的优势,在建筑物建模、带状线路测量、林木植被提取、潮间带测绘等领域已得到越来越广泛的应用[1]。然而,随着生产项目的不断丰富和研究的深入,发现作为机载LiDAR主要测绘成果之一的点云数据在后期处理时往往问题频发,如点云重复、时间或航线等属性丢失、坐标有误、点云分类前后数量不一致等等,而目前常用的如TerraSolid,LAS++,ENVI LiDAR,CloudCompare,LiDAR-Suite等点云数据处理软件并未具备解决这类具有一定针对性问题的功能。为此,系统地从点云数据的检查到对其修复进行研究,是具有重要现实意义和应用价值的。
1 机载LiDAR点云数据
1.1 生产流程
用于生产的点云数据需经航飞获取的姿态、测距等信息按作业航线及构架线联合解算获得,且需通过外业检核点的精度检核,之后再按需进行分区分块、滤波、细分类等操作,最终经质检合格才投入应用[2],对其生产流程描述如图1所示。
值得说明的是,其中,经外业检核点验证精度合格后的航带点云数据,在按实际进行分块、滤波以及细分类等操作后,仍需经过全面的质检,其中一部分主要的工作即为对点云数据的检查。相应的,如果发现存在问题,则就要进行必要的修复。本文也正是针对这一环节中的点云数据检查和点云数据修复工作展开的研究。
1.2 数据结构
随着技术的不断发展,点云数据包含的信息也逐渐丰富,包括空间坐标、时间戳、分类号、所属航线、扫描角、回波次数、回波强度、RGB值等等,相应的,其对存储的文件也提出了更高的要求。由美国摄影测量与遥感协会(American Society for Photogrammetry and Remote Sensing,ASPRS)制定的作为点云存储及交换的LAS格式,具有结构清晰、储存空间节约、可扩展等特点。目前已经被各软、硬件厂商普遍接受,且应用越来越广泛,也吸引了较多学者利用C++,IDL,MATLAB等解析语言,基于PCL,OpenGL,ArcGIS等平台展开研究[3,4]。
不同的LAS版本结构存在差异但均包含公共头文件、可变长度记录及点数据几部分内容,以常用的LAS1.2格式为例,解译后的点云数据包含如表1所示的信息。
表1 机载LiDAR点云数据样式
2 数据检查
一般的,在确认点云工程的坐标形式、分类原则等基本要求(属性)后,无论何种操作,都应当保证修改前后点云数据的属性完整性、坐标正确性、数量一致性以及文件的高匹配度。除此之外,仍需要对点云数据中的重复情况以及分类情况进行检查。
通过修改前后的点云数据对比,具体如下:1)属性完整性检查包括检查时间属性、回波属性、航线属性、扫描角属性是否缺失;2)坐标正确性检查指的是检查修改前后的点云数据坐标信息是否一致;3)数量一致性检查主要用于检查点云数据的数量变化;4)文件匹配度检查主要是指通过组合坐标、时间及回波位置的方式,在确定点云数据唯一的前提下(已经过实际检验该种组合可以确定唯一),计算前后文件的匹配情况(可侧面检查时间属性是否改变);5)点云重复情况检查主要用于发现点云数据中是否存在无意义的重复点;6)点云分类情况检查主要顾及到点云细分类的标准,为了明确修改后点云数据中各类别的统计情况,这一检查可以从数量上直观发现分类是否有误。
3 数据修复
针对点云数据的检查情况,数据修复主要为了解决一些具有针对性的问题,如前文所提及的时间属性恢复、坐标恢复、点云去重以及其他层点云的恢复。
具体的,数据的修复仍是在确定唯一的前提下,通过选择性的组合坐标、时间及回波位置的方式,对比修改前后的点云数据文件,实现时间属性、坐标属性等的恢复以及点云的去重。比如,当要进行点云数据的时间属性修复时,可根据坐标及回波位置的组合来确定点数据的唯一性;当要进行点云数据的坐标信息恢复时,则可采用组合时间、回波位置及强度的方式来确定唯一。明显的,如果处理后的点云数据损坏严重或属性丢失严重,则将无法进行修复。
4 具体实现
4.1 实现流程
由于点云数据的特点,其可以很好的用行×列的矩阵形式来表示,为了实现上述功能,在MATLAB环境下进行相应设计并完成了开发工作。主要的实现流程如图2,图3所示。
实际中,输出的点云检查报告为Excel中的.xls或.xlsx格式文件,不同的检查项目分别存储在不同的工作簿中,这也为后续的操作极大地提供了方便。
而在点云数据修复中,重点在于用何种属性来唯一的确定一个点,上图中的各组合方式已通过实际验证。
4.2 实现代码
这里在点云数据的检查中,以数量差异以及类别统计为例;在点云修复中,以修复时间属性为例,提供部分代码如下:
%%数量差异
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样式整理的分别对应要修复及处理前的点云数据。
5 结语
机载LiDAR技术应用广泛且在搭载设备的可选性、获取数据的丰富程度、点云数据的密度及精度提升等方面仍有很大的发展空间。结合实际生产,本文针对机载LiDAR点云数据的检查及修复工作所开展的研究有效地完善了作为该技术主要测绘产品之一的点云数据的生产流程,文中所描述的相关理论及程序已在多个项目中得到验证和应用,这也为相关的研究者提供了一定参考,后期针对点云数据的处理工作仍将不断挖掘以期提供更加有益的解决方案。