I have unclassified Terrestrial Laser Scanning (TLS) point cloud data which has some noise. Is there a function in the lidR package which can be used to remove noise?
3 Answers
Short answer: No. And more specifically lidR
is designed for ALS primarily, if ever I add a function for noise removal it will be for ALS first.
-
1Thanks @JRR, I found lidR has very good functions which can be used for extracting forest metrics from ALS data. Can they be used for TLS point clouds as well? Do you have any suggestions on effectively using it to TLS data?– SherCommented Feb 26, 2019 at 6:19
-
@JRR do you have any recommendations for noise removal in R? I'm currently using PDAL via Anaconda to implement a statistical filter. Commented Mar 13, 2020 at 22:56
-
@Kartograaf I'm still looking for a paper describing such algorithm– JRRCommented Mar 14, 2020 at 0:35
-
It depends on what is your purpose. If you are looking for a very high resolution forest analysis may be that noise means something and must be analyzed in a particular way. If you just want to "simplify" (decimation) your data and get an homogenized distribution of points you can use the following functions (here is the complete guide):
library(lidR)
las <- readLAS(file)
#option 1 - homogenized las with density = 1 and res = 5
s1 <- lasfilterdecimate(las, homogenize(1,5))
#option 2 - get highest points in 5m resolution
s2 <- lasfilterdecimate(las, highest(5))
#option 3 - get random points in 5m resolution
s3 <- lasfilterdecimate(las, random(5))
-
Thanks @César Arquero. Point cloud has weird scan error, contains thousands of noise points under ground and above ground. Therefore these tools may not be suitable for my case– SherCommented Mar 5, 2019 at 3:45
-
Likely a registration issue if you are seeing 'below-ground' noise from a TLS scanner.– derelictCommented Jul 14, 2020 at 22:29
classify_noise
was introduced with lidR 3.2.0 and includes two algorithms: Statistical Outliers Removal (SOR
) and isolated voxels filter (IVF
).
So you would need to first run the function to classify noise in the point cloud, and then use filter_poi
For example:
las <- classify_noise(las, sor(15,7))
las_denoise <- filter_poi(las, Classification != LASNOISE)