ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

无人机航测las点云生成DEM全流程:从分类到插值避坑指南

无人机航测las点云生成DEM全流程:从分类到插值避坑指南 我最早接触航测无人机las点云生成DEM这个活儿是因为手里攒了一大批无人机激光雷达数据外业飞了两周内业却卡在“怎么把点云变成甲方要的DEM”这个环节上。查资料的时候发现网上讲las格式的、讲点云分割的、讲CloudCompare转模型的教程不少但真正把“las点云生成DEM”从原理到操作完整串起来的很少要么只讲单点工具要么跳过了分类和插值的核心细节。这篇博文就是我自己踩坑后的完整复盘写给正在跟航测点云死磕的兄弟们也写给刚入行想搞懂这条链路的新手。这套流程能解决什么问题最直接的就是让你拿到一堆las点云文件后不再是“看着挺猛但不知道下一步干什么”而是能按一套清晰的步骤把点云变成能入库、能出图、能用于土方计算或地形分析的标准DEM成果。适合谁来参考航测内业处理人员、测绘地理信息相关专业的学生、自然资源和工程勘察领域的从业者以及所有被“点云处理”四个字支配过的朋友。文章里我会从原理讲到实操从软件操作讲到避坑心得尽量让你读完就能上手干活。1. 内容整体设计与思路拆解1.1 明确目标las点云与DEM的关系先说清楚一个基础概念。las文件本质是一种二进制格式的点云存储标准全称是LASer由ASPRSAmerican Society for Photogrammetry and Remote Sensing制定。它存的不是一张图片而是一堆三维坐标点每个点都带有X、Y、Z坐标同时还能记录强度值Intensity、回波号Return Number、分类号Classification等信息。航测无人机挂上激光雷达LiDAR之后向地面发射激光束接收反射信号就能得到这些点的三维位置。那些密集的点合在一起就是点云。而DEMDigital Elevation Model数字高程模型是什么呢它是把地表高程信息规则化到一个格网上的数据每个格网单元存一个高程值。DEM之所以重要是因为它能用来做坡度分析、坡向分析、水文分析、土方量计算、等高线生成是几乎所有地形分析的基础底图。这两者之间的关系简单说就是las点云是“原料”DEM是“加工后的成品”。但直接拿las点云去生成DEM是行不通的原因后面详细讲。总之你需要通过一系列处理把原本散乱无章的点云转换成规则、干净、符合规范的地形栅格数据。这就是整个项目要做的事情。1.2 为什么不能直接拿原始las生成DEM很多人第一次处理点云时会想这还不简单把lidar点云直接插值成栅格不就行了吗我第一次也是这么干的结果生成的DEM惨不忍睹树冠上全是凸包屋顶翘得老高地面上是密密麻麻的“刺”。问题出在las点云包含了很多非地表要素。我飞无人机的时候激光打在树上会返回树冠顶部的点打在建筑物上会返回屋顶和墙面的点打在汽车上、电线上、飞鸟上都会返回对应位置的点。这些点统称为“非地面点”。如果直接拿这些点去插值生成DEM相当于把地形和地形以上的东西混在一起结果是“表面模型”DSMDigital Surface Model而不是地形模型DEM。DSM和DEM的区别你可以这样理解DSM是“地表以上所有东西的顶面”包括树顶、屋顶、电线杆顶DEM是“去掉所有植被和建筑物之后的地面”。也正是因为这个原因用点云生成DEM的核心工作就是在做“地面点提取”也就是把点云分类成“地面点”和“非地面点”只保留地面点再插值。这个思路是整个项目的核心设计逻辑。1.3 整体处理流程摘要在做这个项目之前我给自己画了一条完整的处理链路确保每一步都清楚要干什么。完整流程大致如下数据检查与准备检查las文件的坐标系、点密度、数据范围、分类情况点云去噪剔除明显粗差点如飞鸟、射线噪声、低点点云分类地面点提取用滤波算法把点云分成地面点和非地面点点云抽稀或重采样控制点密度避免插值过拟合或内存爆炸DEM插值生成用地面点插值成规则格网生成DEM栅格后处理与精度检查裁剪、平滑、填洼、精度评价。这个流程不一定必须每一步都用同一个软件完成但缺一步都容易出问题。后面我会逐个环节展开讲把我用过的工具、参数、踩过的坑都列出来。2. 核心细节解析与实操要点2.1 点云分类滤波算法怎么选点云分类是整个流程中最关键、也最容易翻车的环节。市场上有各种分类方法但核心逻辑都是通过算法判断哪些点是“地面点”。目前主流的地面点滤波算法主要有三种形态学滤波、渐进加密三角网PTD、布料模拟CSF。它们原理不同适用场景也不同。形态学滤波的核心思想是用一个移动窗口比较每个点到局部最低点的距离如果高差超过阈值就认为是非地面点。这个算法简单、速度快但在陡坡和复杂地形上容易误删地面点。渐进加密三角网PTDProgressive TIN Densification是目前很多商业软件的地面点分类默认算法。它先选择一批低点构建初始三角网然后不断把符合约束条件的点加入三角网迭代加密。这个算法在地形起伏大的山区表现好但对参数敏感处理平缓地形容易过度剔除。布料模拟CSF是我个人很喜欢的一个算法原理也很有意思它把点云倒扣过来想象一块布料从上方落到翻转后的地表上布料贴住的部分就是地面。这个算法在植被茂密地区效果不错参数相对好调而且CloudCompare里有免费插件可以直接用。选择算法的原则是什么呢我一般这么判断如果是平地、缓丘这种简单地形直接用形态学滤波或者CSF参数设置简单处理速度快如果是山地、陡坡、城区混合地形选PTD类的算法比如LiDAR360的地面点分类更稳如果目的只是快速出个预览DEMCSF就足够了。别迷信“最贵”的算法适合地形和任务要求的才是好的。2.2 DEM插值栅格化时为什么不能乱选参数点云分类得到地面点之后下一步是把不规则分布的地面点变成规则格网的DEM。这个过程叫“插值”或“栅格化”。插值算法看似简单就是用一个点周围的高程推算出格网点高程但实际选择很讲究因为不同算法会直接改变DEM的高程误差和地貌特征。最常见的插值方法有反距离权重IDW、自然邻域Natural Neighbor、克里金Kriging、不规则三角网TIN转栅格。其中TIN转栅格在点云处理中使用最广先把地面点连成三角形网TIN然后对每个三角形内部做线性插值生成规则格网。这个方法的好处是能保留断线比如陡坎、山脊线特征不会像IDW那样把地形磨平。而IDW则适合点云比较均匀、地形平缓的情况速度快但容易出现“牛眼”效应即以采样点为中心形成同心圆状的高程异常。还有一个关键问题格网大小怎么设这直接关系到DEM分辨率和数据量。格网也就是像元大小通常设置为点云平均点间距的1-2倍。比如无人机LiDAR平均点间距是0.5米那么DEM格网大小可以设为0.5米或1米。设得太小会留下很多空洞因为地面点密度不够设得太大又会丢失地形细节切出来的等高线全是“豆腐块”。我见过不少项目为了“图好看”把分辨率强行提得很高结果生成DEM上面全是漏洞和锯齿这是典型的为了参数好看丢了实际效果。2.3 坐标系与精度控制容易被忽视的隐形坑很多新手处理点云生成DEM做完分类和插值发现成果是歪的或者和高精度控制点对不上问题往往出在坐标系上。航测无人机LiDAR得到的las点云坐标一般有两种情况一种是WGS84经纬度坐标用CGCS2000或WGS84椭球一种是平面投影坐标比如高斯-克吕格投影的X、Y、Z。生成DEM前一定要确认好las文件的坐标系是什么目标成果要求的坐标系是什么中间如需转换必须用正确的转换参数。这里有一个常见的坑las文件里的Z值可能是椭球高相对椭球面的高度而DEM成果要求的是正常高相对似大地水准面的高度。两者之间差一个高程异常值不同地区这个差值不一样可能是一两米也可能是几十米。如果搞混了生成的DEM整个高程都偏移拿去算土方量就直接废了。这种情况下需要结合当地的似大地水准面模型进行高程改正或者用已知控制点做高程拟合。精度控制是更系统的问题。我做的项目通常要求DEM中误差在1/3基本等高距以内比如1:1000比例尺DEM基本等高距是1米那中误差就不能超过0.33米。怎么验证呢最好在飞行前布设一些地面控制点用RTK实测这些点的高程然后把DEM提取的高程和实测高程做差计算中误差RMSE。如果没有控制点也可以用后处理的方式拿原始las里的地面点做“回代检查”但这种方法只能评估内符合精度验证不了真实地形精度。3. 实操过程与核心环节实现3.1 数据准备拿到las之后先别急着动手我处理一个las点云项目拿到数据后第一件事不是打开处理软件而是先做数据“体检”。体检项目有三项坐标系、点密度、数据质量。坐标系检查很简单在查看器里看las头文件信息比如LiDAR360的点云信息或者CloudCompare的Edit SF 查看点坐标范围。先看平面坐标范围是否合理是经纬度还是平面坐标再看高程值大概是多少判断是不是正常的高程区间。如果数据本身坐标系就是歪的后半段流程做再多都白搭。点密度检查也很关键。打开点云后统计一下一平方米范围内平均点数。我处理过的无人机LiDAR数据点密度通常在50-200点/平方米之间取决于飞行高度、激光雷达型号、扫描角度。点密度不够高的数据生成高分辨率DEM就会空洞严重点密度太高的数据则需要后续做抽稀来控制计算量。数据质量检查主要是看有没有明显噪声。飞行过程中偶尔会记录到一些“飞点”也就是某些点由于多路径效应激光打到玻璃、水面等物体后反射路径混乱导致坐标严重偏离实际位置高程可能比周围高出几十米甚至上百米。这些点如果不剔除插值时会形成尖刺直接影响周围一片区域的DEM高程值。3.2 去噪处理手工清理和自动滤波的配合去噪是点云处理里的基础活其实方法并不复杂关键是心细。我通常分成两步粗差剔除和细部清理。粗差剔除推荐用统计滤波Statistical Outlier RemovalSOR这类算法。原理也不复杂对每个点计算它到最近N个邻近点的平均距离如果这个距离超过全局平均距离的一定倍数一般取2-3倍标准差就判定为离群点并剔除。以CloudCompare为例选中点云后选择“Tools Clean SOR”设定邻近点数一般10-20标准差倍数2-3运行一遍就能把绝大多数飞点清掉。细部清理则建议在3D视图里人工旋转检查。别嫌这一步麻烦航测数据再干净也总会在特定地形上出幺蛾子。比如水体表面有时候会出现一些低反射率的乱点紧贴水面乱飘SOR不一定会把它们识别为离群点因为它们的局部密度往往挺高但这些点插值进DEM后会使水面高程变得乱七八糟。对于这类点我一般用CloudCompare的分割工具Segment框选删除或者用LiDAR360的“点云编辑”手动剔除。实际处理的次数多了你就会发现去噪的质量直接决定了后面分类和插值的效率多花10分钟清噪声能省下后面1小时的返工时间。3.3 地面点分类实操以CSF和商业软件为例地面点分类是整个项目的重头戏我分别说一下用免费工具和商业软件怎么操作。用CloudCompare做CSF地面点分类是我最推荐的免费方案。先在CloudCompare里打开las文件选择“Plugins CSFilter CSF Filter”。关键参数有两个一是Cloth Resolution布料分辨率通俗讲就是布料网格的大小这个值需要根据地形和点密度设置一般设为1米到3米之间。地形平缓就设大一点2-3米地形陡峭就设小一点0.5-1米二是Classification Threshold分类阈值即地面点和非地面点的距离阈值一般设在0.5米到1米之间。运行结束后点云会被分成“ground”地面和“non-ground”非地面两类。我的经验是CSF在平地和矮植被区域效果很好但在陡峭山区和密集林区分类结果里常常会漏掉一些地面点或者把石头、矮树丛误分到地面。因此分类完成后一定要在剖面视图里检查一下。如果项目精度要求高手里有LiDAR360或TerraSolid这类商业软件我建议用它们的“地面点分类”模块。以LiDAR360为例它内置的算法一般是渐进加密三角网PTD的改进版。操作时重点调三个参数最大建筑尺寸用于识别地面上的较大非地面物、最大地形坡度判断斜坡上的点是否属于地面、迭代距离控制每次加密时点到三角面的距离阈值。这三个参数是需要针对测区地形反复试的我一般先把坡度设成20度左右迭代距离设成0.3米建好模型看一眼分类效果再做微调。分类完成后还有一个很容易忽略的步骤编辑验证。把分类结果显示出来后在剖面模式下沿着数据边缘拉一条剖面线看看地面点是不是贴合真实地形边界有没有在截面上明显“穿帮”的地方。这一步比你多调十次参数都管用。3.4 点云抽稀不是点越多越好很多人以为点云越密越好但生成DEM时并不完全如此。点云点数太多插值计算会变得非常慢而且高密度点云里大量的冗余点反而会让插值结果出现“毛刺”。更关键的是DEM的本质是一种对地形信息的“概括”它并不需要每一个激光脚点都参与计算只需要足够的点来支撑格网单元的高程估计即可。以我处理的一个城区航测项目为例原始las有1.2亿个点直接插值生成1米格网的DEM光插值就跑了40多分钟中途还差点把电脑内存干爆。后来我把地面点做了抽稀每平方米保留大约4-8个点插值时间降到3分钟DEM结果和原始点云直接生成的做对比高程误差几乎没变但文件大小和处理效率可好太多了。抽稀工具上CloudCompare有“Subsample”功能可以按“空间抽稀”Space Sampling设定最小点间距LiDAR360的“抽稀”模块则可以直接按点数比例抽稀。实际操作经验是对于生成1米格网DEM地面点密度控制在每平方米2-10个点就足够了如果是生成0.5米格网DEM可以适当保留多点。别总想着把数据全部塞进DEM里要学会做取舍。3.5 DEM插值生成从地面点出成果点云分类完、抽稀完终于到了生成DEM的核心环节。我这里以ArcGIS和Global Mapper两个常用工具为例说说具体的操作流程。ArcGIS下最经典的做法是先创建TIN再转栅格。打开ArcToolbox选“3D Analyst Tools Data Management TIN Create TIN”输入地面点数据设置坐标系TIN生成后再选“TIN to Raster”设置输出栅格大小插值方法一般选“Linear”线性插值这样得到的就是DEM。这个流程的特点是可靠、可控能保留地形细节但操作步骤多新手容易漏步骤。Global Mapper操作就更“无脑”一些。直接拖入las文件弹窗中选择“只导入分类号为2的地面点”如果你在别的软件里已经做了分类的话然后在“Analysis”菜单中选择“Create Elevation Grid”或“Generate Contours”设置格网间距后就能直接生成DEM。如果你更习惯直接输出GeoTIFFGlobal Mapper还有“Export Export Elevation Data”选项格式选GeoTIFF即可。这里必须要强调的是插值生成DEM只是第一步后处理同样重要。首先是裁剪把DEM裁剪到测区边界或图幅范围其次是检查负值或异常值区域比如水体所在位置的高程是不是不合理最后是填洼Fill Sinks把地形中的虚假洼地往往由插值算法或点云噪声造成填充掉这样后面做水文分析才不会出错。需要注意的是不是所有地形都需要填洼有些喀斯特地貌或真实洼地填了反而是错误。这个“度”把握好了DEM才是真正能用的成果。3.6 精度评价不做质检等于白干我知道很多朋友做到生成DEM这一步就认为“完工”了但作为一个被甲方退回过成果的人我真诚地劝你一定要做精度评价。精度评价不能只靠肉眼看“挺像地形的”要用数据说话。最直接的方法是外业检查点验证。在飞行前或飞行后用RTK在测区采集一些均匀分布的高程检查点至少在测区中心和四角布设数量最好不少于20个。生成DEM后用ArcGIS的“Extract Multi Values to Points”工具把DEM上的高程值提取到这些检查点上然后和RTK实测高程做差计算中误差RMSE。RMSE的计算公式是对每个点先求DEM高程和实测高程的差平方后求和除以点数再开根号。我一般还会顺便算一下平均误差Mean Error看有没有系统性偏移。如果平均误差很大比如偏高了0.5米就很可能是高程基准没统一椭球高和正常高搞混了而不是随机误差问题。内业也可以做快速检查把las原始点云里的地面点提取出来将DEM结果和这些地面点的Z值做对比统计偏差分布。不过这种方法只能评估“内符合精度”不能评估“绝对精度”因为我前面也说过las里的地面点本身会有一定误差而且它和真值的偏差取决于激光雷达系统的测距测角误差。所以在高精度项目里外业检核点不可省。4. 常见问题与排查技巧实录4.1 高频问题速查表我整理了这些年做无人机LiDAR数据生成DEM时遇到的典型问题按“现象—原因—解决方法”列了一个速查表方便你直接对照排查。现象原因解决方法DEM表面出现大面积空洞或“黑洞”点云分类时误删了地面点或地面点密度不足调整分类参数提高点云抽稀前的密度用多个地面点滤波算法交叉验证DEM在陡坎、堤坝处出现明显的层状阶梯插值格网过大地形断线特征未被保留减小格网尺寸改用TIN转栅格以保留断线考虑添加硬断线breaklineDEM高程整体偏高或偏低高程基准未统一椭球高vs正常高或系统误差检查las坐标系里的高程基准用控制点做高程拟合改正树冠、屋顶残留导致DEM表面凸起地面点分类不彻底非地面点残留调整分类阈值在分类前增加去噪步骤检查点云分类号的正确性生成DEM时内存不足或处理时间过长点云点数太多直接全量插值对地面点做抽稀分块处理升级硬件或使用命令行工具如PDALDEM边缘有飞边或锯齿插值算法在数据边缘外推造成异常裁剪DEM到指定范围使用掩膜提取避免在外推区域使用IDW插值点云分类时地面点被大量误删地形坡度大、参数设置过于激进提高最大地形坡度参数降低迭代距离分类后用剖面图检查4.2 复杂地形的分类与DEM生成要点在实际项目里最让我头疼的往往不是普通平地而是复杂地形。先把思路理清楚再动手效率会高一些。先讲林地。无人机LiDAR在密林上飞行时激光很难穿透到地面导致林下地面点稀疏甚至缺失。这种情况下即使CSF分类做得再好插值出来的DEM在林下区域也会出现高程被“抬高”的假象。怎么办我的经验是如果只是小范围有林地空洞可以接受分类后的插值结果如果是大面积密林建议用“穿透率”来判断数据质量实在不行就只能加飞航线或融合其他来源的数据。另外林下地面点的分类阈值可以适当放宽让更多低矮的点进入地面点组以填补空洞。再讲城区。建筑密集区的问题主要在于遮挡和多重回波。激光打到建筑边缘或狭小巷道时会产生大量噪声点和混合点玻璃幕墙还会造成多次反射让点云出现“漂浮点”。处理这类数据我建议先用形态学滤波粗分类再用人工编辑精修重点检查建筑根部、立交桥下方这些遮挡严重的位置。城区DEM生成时格网尺寸不建议设置太小否则容易把地面细节“抠”得太碎反而不符合实际制图规范。第三是水体。水面由于反射特性常常产生噪声点或完全收不到回波导致水面区域的点云要么缺失要么充满乱点。在处理DEM时水边线附近会出现高程突变或空洞。我的做法是如果测区有已知水体边界如从DOM或卫星影像上矢量化先对点云做范围裁剪把水体边界内的点全部剔除生成DEM后再把水体范围叠加到成果里。另外在精度评价时水体的检查点应该单独分析不要和平地混在一起否则会拉低整体精度数值。最后是陡坡与断崖。这类地区点云的空间分布极不均衡坡面上点较少而崖顶崖脚处点堆积。插值时很容易沿着断崖形成异常的“拉丝”或“三角面穿膜”。这个时候TIN转栅格的线性插值比IDW更能保持形状如果成果里有明确的陡坎或道路边线在建模前把它作为约束线输入效果会好很多。4.3 关于点云配准和las转obj的一点补充提到了一些大家搜索较多的热词比如“点云配准”和“las转obj”这里稍微延伸一下因为它们和DEM生成同属点云处理链路容易混在一起。点云配准一般用于多架次数据拼接或不同时期数据的融合。如果无人机飞行范围很大一个测区分成多个架次每个架次独立的las文件之间往往会有位置偏差。此时需要做配准否则合并后的点云在飞行边界会“错位”生成DEM自然也有偏差。配准最简单的方式是在CloudCompare里用ICPIterative Closest Point算法或者的工具“自动匹配”功能但前提是两片点云要有足够重叠区域且初始位置大致对齐。如果重叠不够配准结果会漂移还不如不做。las转obj则多用于三维可视化场景。obj是网格模型格式可以从点云经过“泊松重建”Poisson Surface Reconstruction等算法生成。这和生成DEM的思路类似但目标不同——生成DEM关注高程精度转obj更关注表面光顺和可视效果。如果你只是想让甲方在浏览器里查看测区三维效果可以从DEM或DSM导出obj但如果是做精细三维模型那就得回到原始点云做重建了。别把两条链路混在一个流程里处理各走各的最省事。5. 实操心得与进一步扩展5.1 个人经验处理点云前先想清楚三个问题做了不少航测无人机点云生成DEM的项目后我最大的体会是别急着操作先想清楚三个问题再开始。第一个问题是测区地形到底什么样。是平地还是高山是城市还是密林这决定了分类算法的选择。地形复杂的还按平地的参数跑CSF分类结果出来你一定会怀疑人生。第二个问题是成果精度要求是多少。这决定了从飞行方案到处理参数的整套设置。如果客户只要“能看个地形起伏”格网设2米、CSF快速分类完全可以如果要做土方量计算那外业控制点、内业人工编辑都省不了。精度要求越高投入的时间和精力就成倍增加这个成本要在项目报价阶段就心里有数。第三个问题是数据质量有没有硬伤。很多数据放大一看全是漂浮点、错位点这种数据再怎么调参数也是白费不如直接跟甲方沟通安排补飞。这个判断越早做越省事别等着处理到深夜才哭着发现外业数据是废的。5.2 用好开源工具也能干出商用级成果写这篇文章前我又重新梳理了一遍免费工具方案想告诉你不一定要砸钱买商业软件才能处理las点云。免费的CloudCompare能完成查看、去噪、分类CSF、抽稀、配准ICP、简单插值PDAL是命令行高手可以批量处理las文件、做地面点分类、导出DEMQGIS配合GDAL也可以做栅格化和裁剪R语言的“lidR”包则能实现更加定制化的点云处理流程。这些工具组合起来完全可以完成一个标准DEM生产项目。当然商业软件在人机交互和自动化程度上确实更顺手但对于个人学习、小项目和预算有限的团队来说开源方案值得认真考虑。我的建议是哪怕你公司买了商业软件也抽时间学一下CloudCompare和PDAL。一方面是因为它们让你更理解每一步的底层逻辑另一方面有些批量自动化操作用命令行脚本反而比鼠标点击更高效。我现在做一套标准流程写了一个Python脚本调用PDAL库输入las输出DEM全自动跑批一晚上能处理几十个架次的数据。这种效率是纯手动操作比不了的。5.3 往远处看从DEM到DSM再到三维场景处理完DEM之后很多朋友还会进一步延伸。比如把las点云分类后把非地面点保留下来加上地面点一起插值就能生成DSMDSM和DEM相减还能得到归一化高度模型nDSM用于树高提取、建筑高度估算等。再进一步点云还能转换为obj或3D Tiles直接在Web端做三维场景发布。这些都是这个领域的自然延伸掌握了las点云到DEM这第一步后面很多玩法都能顺理成章地接上。最后再分享一个小技巧也是我踩过很多次坑后总结出来的拿到las文件后先别急着在电脑上反复试参数先用CloudCompare打开把点云按高程值着色转一圈看看测区地形趋势再把点云切一个剖面出来看看垂直结构。在这个“看”的过程中你对数据的理解会比一味调参数深刻得多后面选的参数也会更靠谱。这套方法我教过很多同事大家都说“早知道这么有用就不至于一开始瞎折腾了”。点云处理没有银弹每一步都要回到“数据是什么样、成果要什么”这两个源点去思考。希望这篇复盘能让你少走些弯路早点把las点云变成真正能用的DEM。
返回列表