如何将lidR新分类地面点合并回LAS文件并保留Class 6点?
机载激光雷达LAS文件地面分类与建筑类保留处理方案
需求说明
处理一份机载激光雷达LAS文件,目标是:
- 排除Class 6(建筑类)点后对剩余点执行地面分类
- 用新分类的地面点替换原文件中的旧地面点
- 最终输出文件包含新分类地面点和原文件的Class 6(建筑类)点
错误尝试
最初尝试直接赋值时出现对象被覆盖的问题:
las_tst <- las_buildings las_tst <- las_ground
初期未成功的处理代码
# 分别读取建筑类点和排除建筑类的其他所有点 in_las = "C:/temp/in_tst.las" las_buildings <- readLAS(in_las, filter = "-keep_class 6") las_no_buildig <- readLAS(in_las, filter = "-drop_class 6") # 执行CSF地面分类 mycsf <- csf(sloop_smooth = FALSE, class_threshold = 0.25, cloth_resolution = 1, time_step = 0.65, rigidness = 1) las <- classify_ground(las_no_buildig, mycsf) # 输出LAS文件 out_las = "C:/temp/out_tst.las" writeLAS(las_tst , out_las, index = FALSE)
最终解决方案
通过保留原文件中Class 2(地面)和Class 6(建筑)的分类结果,修正新分类后的文件,实现需求:
# 读取全部点和仅建筑类点 in_las = "C:/temp/in_tst.las" las_all <- readLAS(in_las) las_buildings <- readLAS(in_las, filter = "-keep_class 6") # 执行CSF地面分类 mycsf <- csf(sloop_smooth = TRUE, class_threshold = 0.25, cloth_resolution = 1, time_step = 0.65, rigidness = 1) las_classified <- classify_ground(las_all, mycsf) # 获取原文件中地面点和建筑点的索引 ind_grd_orig = las_all@data$Classification==2 ind_buildings_orig = las_all@data$Classification==6 # 保留原地面点分类 las_classified@data[ind_grd_orig]$Classification = 2 # 修正被错误分类的建筑点,保留原建筑类分类 las_classified@data[ind_buildings_orig]$Classification = 6 # 输出LAS文件 out_las = "C:/temp/out_tst.las" writeLAS(las_classified, out_las, index = FALSE)
内容的提问来源于stack exchange,提问作者nola
相关产品推荐
相关产品推荐

