Converting from PLS to LAS

67 views
Skip to first unread message

Peter Boucher

unread,
Oct 15, 2019, 6:03:16 AM10/15/19
to PulseWaves - no pulse left behind
Hi All, 

I need to use tool for voxelizing waveform lidar data that only takes in Las 1.3 or higher format. All the waveform data that I have is in pulsewaves. While the pulsetopulse tool does convert las 1.3 to pls, it unfortunately does not seem to be able to do the reverse (pls to las). 

I've had a look around, but the only solution I can see is to use pylidar or spdlibrary to convert the waveform data from pls to spd to las. I am a little worried about this conversion process, however, since I am having trouble producing readable files. 

Does anyone have other suggestions for converting between waveform lidar formats? Am I wrong that pulsetopulse only goes one-way (las to pulse)? Thanks in advance!

-Peter

Martin Isenburg

unread,
Oct 16, 2019, 8:03:39 PM10/16/19
to PulseWaves - no pulse left behind
Hello,

could you send one or two pulseinfo reports to the discussion list so we can see whether your type of PulseWaves content does allow an easy conversion to the LAS FWF extension? One of the reasons for the development of PulseWaves was that some aspects of the waveform digitization could not easily be stored to LAS FWF. such as sampling of the returning waveform with multiple segments (if there are long "empty" areas after the first hit) or sampling of the returning waveform with receivers of different sensitivity (as sometimes a very faint object is hit and sometimes a specular reflection is received that would be hard to detect accurately with the sensitivity range of a single receiver). A pulseinfo report for a typical data set of yours will tell me how much work such a conversion would be.

Regards,

Martin

--
--
Post to "PulseWaves" by email to pulse...@googlegroups.com
Unsubscribe by email to pulsewaves+...@googlegroups.com
Visit this group's message archives at http://pulsewaves.org

---
You received this message because you are subscribed to the Google Groups "PulseWaves - no pulse left behind" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pulsewaves+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/pulsewaves/b999f82a-837f-40c6-8059-a51afec853a1%40googlegroups.com.

Peter Boucher

unread,
Oct 31, 2019, 9:54:47 AM10/31/19
to PulseWaves - no pulse left behind
Hi Martin, 

Thanks for the quick response! My data are a set of flightlines from NEON over Harvard Forest. I've attached a pulseinfo file for one of the flightlines.

Peter

On Wednesday, October 16, 2019 at 8:03:39 PM UTC-4, Martin Isenburg wrote:
Hello,

could you send one or two pulseinfo reports to the discussion list so we can see whether your type of PulseWaves content does allow an easy conversion to the LAS FWF extension? One of the reasons for the development of PulseWaves was that some aspects of the waveform digitization could not easily be stored to LAS FWF. such as sampling of the returning waveform with multiple segments (if there are long "empty" areas after the first hit) or sampling of the returning waveform with receivers of different sensitivity (as sometimes a very faint object is hit and sometimes a specular reflection is received that would be hard to detect accurately with the sensitivity range of a single receiver). A pulseinfo report for a typical data set of yours will tell me how much work such a conversion would be.

Regards,

Martin

On Tue, Oct 15, 2019 at 12:03 PM Peter Boucher <peterb...@gmail.com> wrote:
Hi All, 

I need to use tool for voxelizing waveform lidar data that only takes in Las 1.3 or higher format. All the waveform data that I have is in pulsewaves. While the pulsetopulse tool does convert las 1.3 to pls, it unfortunately does not seem to be able to do the reverse (pls to las). 

I've had a look around, but the only solution I can see is to use pylidar or spdlibrary to convert the waveform data from pls to spd to las. I am a little worried about this conversion process, however, since I am having trouble producing readable files. 

Does anyone have other suggestions for converting between waveform lidar formats? Am I wrong that pulsetopulse only goes one-way (las to pulse)? Thanks in advance!

-Peter

--
--
Post to "PulseWaves" by email to pulse...@googlegroups.com
Unsubscribe by email to pulse...@googlegroups.com

Visit this group's message archives at http://pulsewaves.org

---
You received this message because you are subscribed to the Google Groups "PulseWaves - no pulse left behind" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pulse...@googlegroups.com.
pulseinfotxt.txt

Martin Isenburg

unread,
Oct 31, 2019, 2:40:31 PM10/31/19
to PulseWaves - no pulse left behind
Hello,

it seems your PulseWaves file makes use of several different PulseDescriptors:

[...]
  descriptor_index     2   5
[...]

Below we look only at number 2 and number 5 (although 3 and 4 may also be used).

You can see that they both have a digitized outgoing waveform and that will not be able to be represented in LAS FWF. But okay. This information may be used to remove possible jitter in the timing of the shots to measure the exact outgoing peak to returning peak duration for correct ranging but that could be part of the PulseWaves to LAS FWF conversion process. The intensity of the outgoing shot would be lost in case there is also a jitter in the amount of photons emitted (to normalize the returning photons by the number of emitted ones) but that may be okay to omit for your application.

The both have a digitized returning waveform and the difference between number 2 and number 5 is that this returning waveform is digitized in 1 versus 4 separate segments. The pulse descriptors with index 3 and 4 are used for waveforms that are digitized in 2 or 3 separate segment. Digitizing a waveform in multiple segments is useful when there are large empty areas between the multiple hits of a single shot of photons. For example when you hit a bird at 50 meters above the ground, and a transmission wire at 25 meters above the ground, and a branch at 15 meters above the ground and then the ground, it may make sense to *not* store the many zeroes (or the many close to zeroes noise values) of the digitization but only a few samples before and after the actual interactions of the photons with some object.

The LAS FWF format does not support this. Here we would have to merge all those segments into a single segments and fill up the empty space between them with zeroes. Because the length of each digitized waveform is specified by one of 255 Waveform Packet Descriptors in the LAS header we will also need to pad that waveform in the beginning and/or the end as LAS FWF only supports a maximum of 255 different digitization lengths.

That pulse2pulse tool that does all these things, however, does not readily exist and it would require some effort to create this unless someone else has already done this. Anyone?

Regards from Costa Rica,

Martin

variable length header record 4 of 7:
  reserved             0
  user ID              'PulseWaves_Spec'
  record ID            200002
  length after header  300
  description          'VLR Pulse Descriptor'
    PULSEdescriptor 2
      optical_center_to_anchor_point:  0x0 ('coincide')
      number_of_extra_waves_bytes:     0
      number_of_samplings:             2
      sample_units:                    1 [nanoseconds]
      scanner_index:                   1
      compression:                     0
      description:                     'Pulse Composition'
        sampling[0]
          type:        1 ('outgoing')
          channel:     0
          bits_for_duration_from_anchor:            32
          scale_for_duration_from_anchor:            1
          offset_for_duration_from_anchor:           0
          bits_for_number_of_segments:               0
          bits_for_number_of_samples:               16
          number_of_segments:   1
          number_of_samples:    0
          bits_per_sample:     16
          lookup_table_index:   0 ('undefined')
          sample_units:       1.0 [nanoseconds]
          compression:          0
          description:        'Sampling Descriptor'
        sampling[1]
          type:        2 ('returning')
          channel:     0
          bits_for_duration_from_anchor:            32
          scale_for_duration_from_anchor:            1
          offset_for_duration_from_anchor:           0
          bits_for_number_of_segments:               0
          bits_for_number_of_samples:               16
          number_of_segments:   1
          number_of_samples:    0
          bits_per_sample:     16
          lookup_table_index:   0 ('undefined')
          sample_units:       1.0 [nanoseconds]
          compression:          0
          description:        'Sampling Descriptor'


variable length header record 7 of 7:
  reserved             0
  user ID              'PulseWaves_Spec'
  record ID            200005
  length after header  300
  description          'VLR Pulse Descriptor'
    PULSEdescriptor 5
      optical_center_to_anchor_point:  0x0 ('coincide')
      number_of_extra_waves_bytes:     0
      number_of_samplings:             2
      sample_units:                    1 [nanoseconds]
      scanner_index:                   1
      compression:                     0
      description:                     'Pulse Composition'
        sampling[0]
          type:        1 ('outgoing')
          channel:     0
          bits_for_duration_from_anchor:            32
          scale_for_duration_from_anchor:            1
          offset_for_duration_from_anchor:           0
          bits_for_number_of_segments:               0
          bits_for_number_of_samples:               16
          number_of_segments:   1
          number_of_samples:    0
          bits_per_sample:     16
          lookup_table_index:   0 ('undefined')
          sample_units:       1.0 [nanoseconds]
          compression:          0
          description:        'Sampling Descriptor'
        sampling[1]
          type:        2 ('returning')
          channel:     0
          bits_for_duration_from_anchor:            32
          scale_for_duration_from_anchor:            1
          offset_for_duration_from_anchor:           0
          bits_for_number_of_segments:               0
          bits_for_number_of_samples:               16
          number_of_segments:   4
          number_of_samples:    0
          bits_per_sample:     16
          lookup_table_index:   0 ('undefined')
          sample_units:       1.0 [nanoseconds]
          compression:          0
          description:        'Sampling Descriptor'

Unsubscribe by email to pulsewaves+...@googlegroups.com

Visit this group's message archives at http://pulsewaves.org

---
You received this message because you are subscribed to the Google Groups "PulseWaves - no pulse left behind" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pulsewaves+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/pulsewaves/995527c7-2e04-4e83-a743-b2bae219fa2b%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages