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 3


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.

  • 1
    Thanks @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?
    – Sher
    Commented 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.
    – Kartograaf
    Commented Mar 13, 2020 at 22:56
  • @Kartograaf I'm still looking for a paper describing such algorithm
    – JRR
    Commented Mar 14, 2020 at 0:35
  • See section 4.1 of this paper: scholar.google.com/…
    – Kartograaf
    Commented Mar 14, 2020 at 1:04

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):

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
    – Sher
    Commented Mar 5, 2019 at 3:45
  • Likely a registration issue if you are seeing 'below-ground' noise from a TLS scanner.
    – derelict
    Commented 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)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.