Classify points that meet some criterion and/or that belong in a region of interest. The functions updates the attribute Classification of the LAS object according to las specifications
classify_ground(las, algorithm, last_returns =TRUE)classify_noise(las, algorithm)classify_poi( las, class, poi =NULL, roi =NULL, inverse_roi =FALSE, by_reference =FALSE)
Arguments
las: An object of class LAS or LAScatalog .
algorithm: An algorithm for classification. lidR has has: sor , ivf for noise classification, and pmf , csf , mcc for ground classification (see respective documentation).
last_returns: logical. The algorithm will use only the last returns (including the first returns in cases of a single return) to run the algorithm. If FALSE all the returns are used. If the attributes 'ReturnNumber' or 'NumberOfReturns' are absent, 'last_returns' is turned to FALSE automatically.
class: The ASPRS class to attribute to the points that meet the criterion.
poi: a formula of logical predicates. The points that are TRUE will be classified class.
roi: A SpatialPolygons*, from sp or a sf/sfc_POLYGON from sf. The points that are in the region of interest delimited by the polygon(s) are classified class.
inverse_roi: bool. Inverses the roi. The points that are outside the polygon(s) are classified class.
by_reference: bool. Updates the classification in place (LAS only).
Details
classify_noise: Classify points as 'noise' (outliers) with several possible algorithms. lidR has: sor , ivf . The points classified as 'noise' are assigned a value of 18.
classify_ground: Classify points as 'ground' with several possible algorithms. lidR has pmf , csf and mcc . The points classified as 'ground' are assigned a value of 2
classify_poi: Classify points that meet some logical criterion and/or that belong in a region of interest with class of choice.
Non-supported LAScatalog options
The option select is not supported and not respected because it always preserves the file format and all the attributes. select = "*" is imposed internally.
Examples
# ===============# Classify ground# ===============if(require(RCSF, quietly =TRUE)){LASfile <- system.file("extdata","Topography.laz", package="lidR")las <- readLAS(LASfile, select ="xyzrn", filter ="-inside 273450 5274350 273550 5274450")# (Parameters chosen mainly for speed)mycsf <- csf(TRUE,1,1, time_step =1)las <- classify_ground(las, mycsf)#plot(las, color = "Classification")}# ===============# Classify noise# ===============LASfile <- system.file("extdata","Topography.laz", package="lidR")las <- readLAS(LASfile, filter ="-inside 273450 5274350 273550 5274450")# Add 20 artificial outliersset.seed(314)id = round(runif(20,0, npoints(las)))set.seed(42)err = runif(20,-50,50)las$Z[id]= las$Z[id]+ err
# Using IVFlas <- classify_noise(las, ivf(5,2))#plot(las, color = "Classification")# Remove outliers using filter_poi()las_denoise <- filter_poi(las, Classification != LASNOISE)# ===============# Classify POI# ===============LASfile <- system.file("extdata","Megaplot.laz", package="lidR")shp <- system.file("extdata","lake_polygons_UTM17.shp", package ="lidR")las <- readLAS(LASfile, filter ="-keep_random_fraction 0.1")lake <- sf::st_read(shp, quiet =TRUE)# Classifies the points that are NOT in the lake and that are NOT ground points as class 5poi <-~Classification != LASGROUND
las <- classify_poi(las, LASHIGHVEGETATION, poi = poi, roi = lake, inverse =TRUE)# Classifies the points that are in the lake as class 9las <- classify_poi(las, LASWATER, roi = lake, inverse =FALSE)#plot(las, color = "Classification")