I have a large point cloud (LAS file) and I am trying to thin this using a complex technique. I know it is possible to thin a point cloud using simple techniques such as extracting every nth point. However the point cloud I am working with is more dense in some areas and less dense in other areas. I would like to be able to thin the cloud so that the denser areas are thinned more heavily than the less dense areas. To do this manually one could create a grid and select certain number of points within each cell. (ie one at each corner and one in the center) However this point cloud is much too large for this task. I am trying to figure out if there are any existing solutions to this problem such as a complex selection query, other automated process, or existing software application that could be used.
4 Answers
It sounds like you want either a voxel-based thinning or maybe a Poisson-based one. PDAL can do either. See PDAL's tutorial on the topic at https://pdal.io/tutorial/sampling/index.html
As far as the size of the file, please define "large". Just about any technique except simple rank decimation (remove n-th points) is going to want to have access to the entire file in memory. Other options would require a more sophisticated two-stage index+sampling technique to avoid that requirement.
-
Thank you, this looks very useful, I haven't come across this and will take a look right now. As far as size I'm looking at about 3 million points.– BodkinzCommented Dec 11, 2015 at 18:45
-
3 million points == smallish end of LiDAR datasets. Large enough to start causing trouble with memory and such might be a 100 million or so. Commented Dec 11, 2015 at 18:49
-
Good to know, I'm relatively inexperienced with LiDAR but I have a feeling that PDAL is exactly what I was looking for, I was previously searching for answers in global mapper, GRASS, SAGA, and laspy etc...– BodkinzCommented Dec 11, 2015 at 18:55
-
The PDAL pipelines make it easy to keep track of your processing parameters and reproduce or batch process your work. Commented Jan 24, 2018 at 22:43
You can give lasthin or lasduplicate from LAStools a try. With lasthin you can keep the '-lowest', '-highest', '-random', or most '-central' point on a 2D grid in the x/y plane with user-defined '-step 0.5' size. With lasduplicate you can specify to remove all points that are '-nearby 0.005' in 3D from all previously appearing points. See the linked README file for more details.
-
1By the way, why do you have two accounts? You should probably merge them. Commented Dec 13, 2015 at 21:24
-
I have found those tools useful, but neither of them would help accomplish thinning that retains more points where the data is densest, as OP seeks. Commented Apr 16, 2017 at 4:14
You can use FUSION's ThinData
command for this (Documentation p.130). ThinData
is really handy because it allows you to thin point cloud data to a desired pulse density per square unit. From FUSION's documentation:
ThinData [switches] OutputFile Density CellSize DataFile
ThinData allows you to thin LIDAR data to specific pulse densities. This capability is useful when comparing analysis results from several LIDAR acquisitions that were collected using different pulse densities. ThinData is also useful when the density within a single LIDAR data set is not uniform. This is often the case with data collected from a slow-flying helicopter or when flightline overlap was not closely monitored. ThinData has also been used in simulation experiments to assess the effect of LIDAR pulse density on the accuracy of estimated forest inventory metrics such as overall tree height.
You can use LiDAR360, download the 30 days free trial version from GreenValley International website. LiDAR360 offers three methods for subsampling: minimum point spacing, sampling rate, and octree. Minimum point spacing method needs to set a minimum point spacing between two points so that the minimum three-dimensional distance between any two points in the sampled point cloud will not be less than this value. Sampling rate method needs to set the percentage of reserved points. In this mode, LiDAR360 will randomly retain the specified number of points. Reserved Points = Total Number of Points * Sample Rate. Octree method allows users to select an "octree" subdivision level and build 3D voxels for the input point cloud. Only the point closest to each voxel center will be retained.
ThinData
from Fusion. In this answer I explain how it works. Howard's answer seems promising too. Let us know if they work for your situation. Tks.