如何使用filter_poi()过滤1米至最大高度减3之间的点云数据
问题描述
我尝试将归一化点云过滤为仅保留地面以上1米至冠层以下3米的点,请问如何引用最高(Z最大值)点的数值?
环境设置代码
library(lidR) las.dir <- "E:\\FNF_LAS\\Batch5_FNF_4" fileNames <- list.files(las.dir, pattern = "*216539.las|*217533.las|*217538.las", full.names = T) las <- readLAS(fileNames[1]) las.norm <- normalize_height(las, algorithm = tin(), na.rm = T, res = 10)
尝试的错误代码
las.norm_minus3 <- filter_poi(las.norm, Z > 1 & Z < (zmax - 3))
解决方案
在lidR包中,你可以通过以下两种方式获取并使用归一化点云的Z最大值:
方式一:先提取冠层高度再过滤
# 提取归一化点云的Z轴最大值(即冠层最高高度) canopy_max_height <- zmax(las.norm) # 执行过滤:保留Z值在1米到(冠层高度-3米)之间的点 las.filtered <- filter_poi(las.norm, Z > 1 & Z < (canopy_max_height - 3))
方式二:直接在过滤表达式中调用函数
# 直接在filter_poi的条件里使用zmax()获取最大值 las.filtered <- filter_poi(las.norm, Z > 1 & Z < (zmax(las.norm) - 3))
额外提示
原代码中的文件路径存在转义问题:R语言中文件路径需要使用双反斜杠\\或者正斜杠/,所以"E:\FNF_LAS\Batch5_FNF_4"需要修正为"E:\\FNF_LAS\\Batch5_FNF_4",否则会导致路径解析错误。
内容的提问来源于stack exchange,提问作者regular_fs
相关产品推荐
相关产品推荐

