Hello all,
in the meantime Matteo has sent me one normalized LAZ tile so I took a closer look. The spacing of the LiDAR returns in his data is too low (or too uneven) to simply lasgrid the highest elevation return onto 1 meter by 1 meter grid cells. This gives two undesirable artifacts: (1) empty cells and (2) canopy cells with ground or mid-canopy elevation (see first attached image).
lasgrid -i tile_434000_4596000.laz ^
-highest -false -set_min_max 0 25 ^
-ll 434000 4597750 -ncols 1000 -nrows 250 ^
-odix _1m -opng
One way to "anti-alias" the sparse LiDAR samples is the option '-subsample 3' which will - quoting the README file - add "each LiDAR point 9 times to the raster at locations (x/y), (x+0.33*step/y), (x+0.66*step/y),(x/y+0.33*step) (x+0.33*step/y+0.33*step) (x+0.66*step/y+0.33*step), (x/y+0.66*step) (x+0.33*step/y+0.66*step) (x+0.66*step/y+0.66*step) and thereby "washes out" hard boundaries. Obviously, this will lead to wrongful increase in the '-density' counters, but the '-averages', '-highest', '-lowest', and '-stddev' will have less aliasing.". This adds a slight directional bias (i may need to fix that) but it does help a bit (see second attached image).
lasgrid -i tile_434000_4596000.laz ^
-highest -false -set_min_max 0 25 ^
-subsample 3 ^
-ll 434000 4597750 -ncols 1000 -nrows 250 ^
-odix _1m_s3 -opng
One way to fill the few missing pixels would be the '-fill 1' option which fills empty pixels by averaging the neighbors that are within a 1 pixel radius but this does not always average the right value and does not improve the areas where we had mid-canopy or ground elevations in the canopy instead of empty pixels (see third attached image).
lasgrid -i tile_434000_4596000.laz ^
-highest -false -set_min_max 0 25 ^
-subsample 3 -fill 1 ^
-ll 434000 4597750 -ncols 1000 -nrows 250 ^
-odix _1m_s3_f1 -opng
So I added an option called '-subcircle 0.50' that inserts 8 additional points of equal elevation arranged in a circle of radius 0.50 around each original LiDAR point. This option will become available in the next release. This starts to produce nice looking results for a radius 0.75 but be aware that this also "smears out" the sampled canopy. Attached are the results for radius 0.50 and 0.75 .
lasgrid -i tile_434000_4596000.laz ^
-highest -false -set_min_max 0 25 ^
-subcircle 0.50 ^
-ll 434000 4597750 -ncols 1000 -nrows 250 ^
-odix _1m_c0.50 -opng
lasgrid -i tile_434000_4596000.laz ^
-highest -false -set_min_max 0 25 ^
-subcircle 0.75 ^
-ll 434000 4597750 -ncols 1000 -nrows 250 ^
-odix _1m_c0.75 -opng
Cheers,
Martin @rapidlasso
PS: please folks, do not use the '-reversible' option with lastile unless you plan to revert your tiled data back to the original strips