high quality DTM

686 views
Skip to first unread message

Anahita

unread,
Sep 23, 2013, 11:32:25 AM9/23/13
to last...@googlegroups.com

 

Dear all,

 

I am working with super high resolution LiDAR data (160 point/m2) which is acquired from mountainous forested area.  

 

I would like to extract a clean and high quality DTM from this data; then, extract DEM and slope.

 

I would like to ask you all some questions:

 

1) what is the step by step code that i need to extract the high quality DTM from the mountainous forested area?

 

2) which cell size is appropriate? i prefer 0.15; is it possible?

 

3) do i need to use ground control points for evaluating such data quality?

 

best regards

Anahita








Amauri Brandalize

unread,
Sep 23, 2013, 1:22:13 PM9/23/13
to last...@googlegroups.com
Hi,

I´m so curious to know which equipment was used or how dense was the survey to get a LiDAR data (?) with 160 pts/m2 ...

Are you sure you are not working with a GSM model ? If so, DTM is something you could not obtain in a "mountainous forested area".

Regards.

Amauri
ESTEIO S.A.

Terje Mathisen

unread,
Sep 23, 2013, 2:14:05 PM9/23/13
to last...@googlegroups.com
Anahita wrote:
> Dear all,
>
> I am working with super high resolution LiDAR data (160 point/m2) which
> is acquired from mountainous forested area.

Wow!

In most mountain areas I have been to, the forest cover is a lot less
dense than in the lowlands, so this should get you something like 100+
ground points/m^2, and definitely more than 10.
>
> I would like to extract a clean and high quality DTM from this data;
> then, extract DEM and slope.

Should be easy. :-)
>
> I would like to ask you all some questions:
>
> 1) what is the step by step code that i need to extract the high quality
> DTM from the mountainous forested area?

Same as for all other Lidar clouds: You need to start by determining
which points are actual ground points, and in your case that means
deciding what kind of resolution you want.
>
> 2) which cell size is appropriate? i prefer 0.15; is it possible?

15x15 cm square cells?

This would mean that you intend to make a terrain model which includes
every single rock outcrop, but which still excludes very small (20x20x20
cm?) boulders?

I.e. how do you determine if a given piece of rock is part of the
terrain or a separate small boulder?

You also want to exclude similar-sized dense tufts of grass/heather or
other vegetation which stops all ground visibility.

I.e. what you want is probably impossible!
>
> 3) do i need to use ground control points for evaluating such data quality?

Feel free to do so, I expect that you'll find that you have to settle
for 10-30 cm actual precison for the resulting terrain model.

I have spent a few years now working with lidar points clouds in order
to make as accurate orienteering maps as possible: Even with quite dense
clouds (but an order of magnitude less than yours!) sufficiently dense
ground cover makes it impossible to locate the actual ground a fraction
of a meter below it.

Terje

--
- <Terje.M...@tmsw.no>
"almost all programming can be viewed as an exercise in caching"

Žiga Kokalj

unread,
Sep 25, 2013, 7:20:20 AM9/25/13
to last...@googlegroups.com
Dear All,

Congratulations on getting this great dataset. As Terje has already
explained, your final accuracy depends also on other factors than just the
resolution. For example, getting the "real" ground under very dense young
spruce plantations, makija, heather, etc. is very difficult regardless of
the scanning density. If the light cannot reach the ground, the resolution
doesn't matter. You can light a torch at a wall for as long as you want, but
the room on the other side will be no brighter. This said, very high
resolution datasets combined with special applications, such as "cartography
of boulders", will need adapted classification algorithms, because current
ones were developed for sparser data and are simply not up to the task. The
analogy would be transition from pixel based classification to object based
classification in optical imagery processing, when high-resolution satellite
images became more widely available.

Kind regards,

Ziga


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Ziga Kokalj, PhD
Institute of Anthropological and Spatial Studies
Scientific Research Centre of the Slovenian Academy of Sciences and Arts
Novi trg 2, SI - 1000 Ljubljana, Slovenia

Centre of Excellence for Space Sciences and Technologies
Novi trg 2, SI - 1000 Ljubljana, Slovenia
web: iaps.zrc-sazu.si
e-mail: ziga....@zrc-sazu.si
tel: +386 (0) 1 47 06 458
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Martin Isenburg

unread,
Sep 26, 2013, 10:59:36 AM9/26/13
to last...@googlegroups.com
Hello Anahita,

if you look into the lastools/example_batch_script folder you should find a script that will more or less do what you want. But let's use the opportunity to go through step by step. Assuming you have your original (raw) flight strips in a folder called "./strips_raw" then this pipeline should create a high-quality DTM:

:: include LAStools in PATH to allow running script from anywhere

set PATH=%PATH%;C:\software\lastools;

:: specify the number of cores to use

set NUM_CORES=3

:: create clean folder for the raw tiles with buffer

rmdir .\tiles_raw /s /q
mkdir .\tiles_raw

:: use lastile to create a buffered tiling from the original
:: flight strips. the flag '-files_are_flightlines' assures
:: that points from different flight lines will get a unique
:: flight lines ID stored in the 'point source ID' attribute
:: that makes it possible to later identify from which points
:: belong to the same flight strip. we use '-tile_size 300'
:: to specify the tile size and request a buffer of 10 meters
:: around every tile with '-buffer 15'. this buffer helps to
:: reduce edge artifacts at tile boundaries in a tile-based
:: processing pipeline. we use values 300 and 15 that
:: divide evenly by the target step size of 0.15. the '-olaz'
:: flag requests compressed output tiles to overcome
:: the I/O bottleneck.

lastile -i strips_raw\*.laz -files_are_flightlines ^
           -tile_size 300 -buffer 15 ^
           -o tiles_raw\tile.laz -olaz

:: create clean folder for the ground-classified tiles

rmdir .\tiles_ground /s /q
mkdir .\tiles_ground

:: use lasground to find the bare-earth points in all tiles
:: with the '-wilderness' setting (which uses a step of 3m)
:: and the '-fine' setting for the initial ground estimate
:: (see: lasground_README.txt). the '-odir tiles_ground -olaz'
:: parameters specify to store the ground-classified tiles
:: compressed and with the same name to the 'tiles_ground'
:: folder. if we have multiple tiles then this process runs
:: on as many cores as specified by the %NUM_CORES%
:: set above.

lasground -i tiles_raw\*.laz ^
                  -wilderness -fine ^
                  -odir tiles_ground -olaz ^
                  -cores %NUM_CORES%

:: create clean folder for the could-free tiles

rmdir .\tiles_cloudfree /s /q
mkdir .\tiles_cloudfree

:: use lasheight to remove low and high outliers that are often
:: just noise (e.g. clouds or birds). by default lasheight uses
:: the points classified as ground to construct a TIN and then
:: calculates the height of all other points in respect to this
:: ground surface TIN. with '-drop_above 60 -drop_below -3' all
:: points that are 60 meters above the ground or 3 meters below
:: the ground are removed from the output LAZ tiles that are to
:: be stored in the 'tiles_denoised' folder. if we have multiple
:: input files this process runs on %NUM_CORES% many cores.

lasheight -i tiles_ground\*.laz ^
                -drop_above 50 -drop_below -3 ^
                -odir tiles_cloudfree -olaz ^
                -cores %NUM_CORES%

:: create clean folder for the raster DTMs in BIL/HDR format

rmdir .\tiles_dtms /s /q
mkdir .\tiles_dtms

:: run las2dem on the ground-classified tiles to create raster DTMs
:: in binary BIL format (*.bil) for each individual tile. important
:: is the '-keep_class 2' flag that activates a filter letting only
:: the points classified as 'ground' through. in addition we use the
:: '-thin_with_grid 0.075' filter to have only one ground point per
:: 0.075m by 0.075m area. this assures that we construct and
:: sample a TIN appropriate for the output resolution of 1.0m by
:: 1.0m that is set by '-step 0.15'. important is the '-use_tile_bb' 
:: parameter that limits rasterizing the TIN to the area *without* 
:: the buffer that was added by lastile thereby minimizing potential
:: artifacts along the tile boundaries. the '-odir  tiles_dtms -oasc'
:: flags specify to output the resulting DTMs in binary BIL format
:: in the folder 'tiles_dtms' using the same name as the LAZ file
:: but with a *.bil
 extension. if we have multiple tiles this process
:: will run on as many cores as specified by %NUM_CORES%
:: set above.

las2dem -i tiles_ground\*.laz ^
                -keep_class 2 -thin_with_grid 0.075 ^
                -step 0.15 -use_tile_bb ^
                -odir tiles_dtms -obil ^
                -cores %NUM_CORES%

:: combine the individual DTMs into one large DTM

lasgrid -i tiles_dtms\*.bil -merged ^
             -step 0.15 ^
             -o dtm.img

:: create a slope map for the combined DTM with BLAST

blast2dem -i tiles_dtms\*.bil -merged ^
                   -step 0.15 -slope ^
                   -o dtm_slope.tif

Hope this helps. You may need to edit a few parts to work for your particular setup.

Regards,

Martin @rapidlasso

--
http://rapidlasso.com - fast tools to LiDAR your forests

anahita khosravi pour

unread,
Sep 30, 2013, 4:37:27 AM9/30/13
to last...@googlegroups.com
Dear Martin,

Thank you so much for your response. I have another question that i would like to ask you.

could i have also the step by step code that i need to extract the high quality DSM ?

Best regards
Anahita


From: Martin Isenburg <martin....@gmail.com>
To: last...@googlegroups.com
Sent: Thursday, 26 September 2013, 16:59
Subject: [LAStools] Re: high quality DTM

anahita khosravi pour

unread,
Sep 30, 2013, 9:31:15 AM9/30/13
to last...@googlegroups.com
Dear Martin,

I would like to ask you a question about the DTM code.

here: 

lasheight -i tiles_ground\*.laz ^
                -drop_above 50 -drop_below -3 ^
                -odir tiles_cloudfree -olaz ^
                -cores %NUM_CORES%

the elevation of my study area is about 1500. how the lashieght can recognize to remove the noise above 50 meters and below -3, before height-normalization by replacing z value?

Best regards
Anahita





From: Martin Isenburg <martin....@gmail.com>
To: last...@googlegroups.com
Sent: Thursday, 26 September 2013, 16:59
Subject: [LAStools] Re: high quality DTM

Martin Isenburg

unread,
Oct 1, 2013, 6:47:42 AM10/1/13
to last...@googlegroups.com, anahita khosravi pour
Hello Anahita,

lasheight always computes the height of each point above the ground points (or above an external GEOID if external points are provided) and you can then use these heights to drop or classify the points. The option '-replace_z' is an additional, but not a mandatory option that then replaces the elevations of the points with the computed height values. But often - like here - they height value is just used for the comparison with the '-drop_above 50' and '-drop_below -3' thresholds. Oh actually ... the computed height is also stored quantized to decimeter as an eight bit unsigned integer (0 - 255 meaning 0.0 to 25.5 meters) in the user_data field of each point.

Regards,

Martin

I would like to ask you a question about the DTM code.here:  

lasheight -i tiles_ground\*.laz ^
-drop_above 50 -drop_below -3 ^
-odir tiles_cloudfree -olaz ^
-cores %NUM_CORES%
 
the elevation of my study area is about 1500. how the lashieght can recognize to remove the noise above 50 meters and below -3, before height-normalization by replacing z value?

Martin Isenburg

unread,
Oct 1, 2013, 8:07:18 AM10/1/13
to last...@googlegroups.com, anahita khosravi pour
Hello,


Thank you so much for your response. I have another question that i would like to ask you.
could i have also the step by step code that i need to extract the high quality DSM ?

Okay. Here we go again. You should, of course, combine these results with those from the previous script to avoid computing everything twice. Assuming you have your original (raw) flight strips in a folder called "./strips_raw" then this pipeline should create a high-quality DTM:

:: include LAStools in PATH to allow running script from anywhere

set PATH=%PATH%;C:\software\lastools\bin;
:: be stored in the 'tiles_cloudfree' folder. if we have multiple
:: input files this process runs on %NUM_CORES% many cores.

lasheight -i tiles_ground\*.laz ^
                -drop_above 50 -drop_below -3 ^
                -odir tiles_cloudfree -olaz ^
                -cores %NUM_CORES%

:: create clean folder for the raster DSMs in BIL/HDR format

rmdir .\tiles_dsms /s /q
mkdir .\tiles_dsms

:: run las2dem on the ground-classified tiles to create raster DSMs
:: in binary BIL format (*.bil) for each individual tile. the '-first_only'
:: flag lets only the first returns through. in addition we use the
:: '-thin_with_grid 0.075' filter to have only one first return per
:: 0.075m by 0.075m area. this assures that we construct and
:: sample a TIN appropriate for the output resolution of 1.0m by
:: 1.0m that is set by '-step 0.15'. important is the '-use_tile_bb' 
:: parameter that limits rasterizing the TIN to the area *without* 
:: the buffer that was added by lastile thereby minimizing potential
:: artifacts along the tile boundaries. the '-odir  tiles_dsms -obil'
:: flags specify to output the resulting DSMs in binary BIL format
:: in the folder 'tiles_dsms' using the same name as the LAZ file
:: but with a *.bil
 extension. if we have multiple tiles this process
:: will run on as many cores as specified by %NUM_CORES%
:: set above. The flag '-extra_pass' makes two reading passes
:: to count the number of points used for TIN creation to lower
:: the memory requirements.

las2dem -i tiles_cloudfree\*.laz ^
                -first_only -thin_with_grid 0.075 ^
                -extra_pass ^
                -step 0.15 -use_tile_bb ^
                -odir tiles_dsms -obil ^
                -cores %NUM_CORES%

:: combine the individual DTMs into one large DTM

lasgrid -i tiles_dsms\*.bil -merged ^
             -step 0.15 ^
             -o dsm.img

Hope this helps. You may need to edit a few parts to work for your particular setup.

Regards,

Martin @rapidlasso

PS: This DSM may, however, have so called "pits" due to laser points penetrating deep into the canopy before producing the first return. There will be a poster by Khosravipour et al. in Silvilaser 2013 (which is happening in two weeks in Beijing) that addresses the removal of such pits in a similar product - the CHM. Stay tuned for that.

Anahita Khosravipour

unread,
Oct 30, 2013, 11:42:07 AM10/30/13
to last...@googlegroups.com
Dear Martin,

i followed the code below for creating DTM. but, the raster DTM has nodata cell like a grid inside of the DTM. I recognized that the nodata cells are result of retiling process. i attached the result here.
my question is what is exactly happening in the process and how i can solve it.

thanks in advance
Anahita
tiling.jpg
rasterDTM.jpg
Reply all
Reply to author
Forward
0 new messages