In particular, this module detects the edge of each single feature over the terrain surface of a LIDAR point surface. First of all, a bilinear spline interpolation with a Tychonov regularization parameter is performed. The gradient is minimized and the low Tychonov regularization parameter brings the interpolated functions as close as possible to the observations. Bicubic spline interpolation with Tychonov regularization is then performed. However, now the curvature is minimized and the regularization parameter is set to a high value. For each point, an interpolated value is computed from the bicubic surface and an interpolated gradient is computed from the bilinear surface. At each point the gradient magnitude and the direction of the edge vector are calculated, and the residual between interpolated and observed values is computed. Two thresholds are defined on the gradient, a high threshold tgh and a low one tgl. For each point, if the gradient magnitude is greater than or equal to the high threshold and its residual is greater than or equal to zero, it is labeled as an EDGE point. Similarly a point is labeled as being an EDGE point if the gradient magnitude is greater than or equal to the low threshold, its residual is greater than or equal to zero, and the gradient to two of eight neighboring points is greater than the high threshold. Other points are classified as TERRAIN.
The length (in mapping units) of each spline step is defined by ew_step for the east-west direction and ns_step for the north-south direction.
The output will be a vector map in which points has been classified as TERRAIN, EDGE or UNKNOWN. This vector map should be the input of v.lidar.growing module.
TERRAIN (cat = 1, layer = 1) EDGE (cat = 2, layer = 1) UNKNOWN (cat = 3, layer = 1)
TERRAIN SINGLE PULSE (cat = 1, layer = 2) TERRAIN DOUBLE PULSE (cat = 2, layer = 2) OBJECT SINGLE PULSE (cat = 3, layer = 2) OBJECT DOUBLE PULSE (cat = 4, layer = 2)
# last return points v.lidar.edgedetection input=vector_last output=edge ew_step=8 ns_step=8 lambda_g=0.5
# region settings (using an existing raster) g.region raster=elev_lid792_1m # import v.in.lidar -tr input=points.las output=points v.in.lidar -tr input=points.las output=points_first return_filter=first # detection v.lidar.edgedetection input=points output=edge ew_step=8 ns_step=8 lambda_g=0.5 v.lidar.growing input=edge output=growing first=points_first v.lidar.correction input=growing output=correction terrain=only_terrain # visualization of selected points # zoom somewhere first, to make it faster d.rast map=orthophoto d.vect map=correction layer=2 cats=2,3,4 color=red size=0.25 d.vect map=correction layer=2 cats=1 color=0:128:0 size=0.5 # interpolation (this may take some time) v.surf.rst input=only_terrain elevation=terrain # get object points for 3D visualization v.extract input=correction layer=2 cats=2,3,4 output=objects
Figure 1: Example output from complete workflow (red: objects, green: terrain)
Figure 2: 3D visualization of filtered object points (red) and terrain created from terrain points (gray)
Available at: v.lidar.edgedetection source code (history)
Latest change: Thursday Jan 26 14:10:26 2023 in commit: cdd84c130cea04b204479e2efdc75c742efc4843
Main index | Vector index | Topics index | Keywords index | Graphical index | Full index
© 2003-2024 GRASS Development Team, GRASS GIS 8.3.3dev Reference Manual