In [1]:
from IPython.display import IFrame, Image, YouTubeVideo, SVG
import pandas
import matplotlib.pyplot as plt
import json
import gmaps

2014 Aerial Laser Scan of Dublin

The dataset contains the following components:

  • Flight trajectory data
  • Point cloud without waveform data in LAS and TXT formats
  • Ortho-photos in GeoTiff and ECW formats

Merits and potential usefulness

  • The 2014 scan has the same coverage and flight altitude as the 2015 scan but with a different flight grid (i.e. wider spacing and different orientation). The data may be useful for validating flight optimization strategies.
  • The ortho-photos fully cover the project area and have a comparable resolution (6 cm vs. 5 cm of the 2015 capture). They might be used to replace the damaged imagery files of the 2015 scan.
  • The noise level is higher than the 2015 dataset but better than the 2007 scan.

Demerits

  • The point density of 170 points/m2 is much lower than both the 2015 and 2017 scan.
  • No full waveform data.
  • The ortho-photos have only 3 bands RGB without infrared.
  • The metadata (e.g. instrument information, quality control report) are not available. That would defer the data usability.

Flight path

The flight paths of the scan are plotted in the map below and their features are compared against the other 2 scans of Dublin in the Table 1. I thought the flight was deployed at a higher altitude and that was thought as the reason for the insufficient density. But the flight trajectory data shows that the average altitude was actually around 300 m. Except the wider spacing between adjacent flight paths (140 m vs. 100 m spacing of the 2015 scan), all other features (e.g. flight speed) are not worse than the 2007 or the 2015 scan. A remaining factor likely to contribute to the low density is the pulse repetition frequency of the LiDAR equipment. The exact scanning instrument is not known so I cannot validate that argument right away but would be able to do some reverse engineering from the captured point data (which will take some time).

One notable feature that makes the 2014 scan potentially useful is its different flight path direction compared to the other flights. The 2014 flight grid makes an angle of about 25o with the 2015 scan (Figure 1) making it potentially useful for works that require flight path analyses such as validating flight path optimization strategies.


Table 1 - Comparison of flight path features
Features 2014 2007 2015
Number of flight paths 36 44 42
Flight date 7&9-Mar-2014 20-Feb-2007 26-Mar-2015
Flight speed (m/s) 13-18 15-19 15-18
Flight altitude (m) 300 400 300
Flight path spacing (m) 140 ? 100
In [2]:
IFrame('https://www.google.com/maps/d/embed?mid=1Bb7R9s84yLWikEHHoeGu3mPh8j8', width='100%', height=600)
Out[2]:


Figure 1 - Angular divergence between the 2014 flight gird (bold green) and the 2015 flight grid (thin gray)
flight-direction-d14-vs-d15

Point cloud

Density

The 2014 point cloud covers the same area as for the 2015 scan but at a much lower density (170 vs. 280 points/m2). The local surface density indexes of all 3 scans are presented in Table 2. Figure 2 overlays the 3 scans for visual comparison. The surface density histograms are computed and plotted in Figure 3. All of those prove that the 2014 scan is much sparser than the other 2 scans.


Table 2 - Comparison of point cloud features
Features 2014 2007 2015
Total no. points (millions) 353 225 1,423
Domiant surface density* (points/m2) 170 290 280

(*) There are more than one way to compute density. The surface density values in this table are computed using CloudCompare's surface density computation with the radius value of 0.25 m.

$density=\frac{numberOfNeighbors}{\pi*r^2}$


Figure 2 - Visual comparison of the 3 LiDAR scans of Dublin
density-comparison

In [71]:
#fields = ['Surface density (r=0.2)']
df07 = pandas.read_csv('data/d07-surface-density-r25.csv', sep=',', usecols=['Surface density (r=0.25)'])
df14 = pandas.read_csv('data/d14-surface-density-r25.csv', sep=',', usecols=['Surface density (r=0.25)'])
df15 = pandas.read_csv('data/d15-surface-density-r25.csv', sep=',', usecols=['Surface density (r=0.25)'])
In [126]:
plt.rcParams['figure.figsize'] = (15,10)
Figure 3 - Local surface density hitograms of the 3 scans
In [128]:
n_bins = 500

plt.hist(df07['Surface density (r=0.25)'], 200, color='r',normed=False, histtype='stepfilled',alpha=0.5,fill=True,label='2007')
plt.hist(df14['Surface density (r=0.25)'], 100, color='g',normed=False, histtype='stepfilled',alpha=0.5,fill=True,label='2014')
plt.hist(df15['Surface density (r=0.25)'], 500, color='b',normed=False, histtype='stepfilled',alpha=0.5,fill=True,label='2015')

xv=25
xh=290
c='red'
plt.axvline(xv,ls='--',linewidth=3, color=c)
plt.text(xv+3,350000,xv,rotation=90)
plt.axvline(xh,ls='-',linewidth=3, color=c)
plt.text(xh-7,350000,xh,rotation=90)

xv=20
xh=170
c='green'
plt.axvline(xv,ls='--',linewidth=3, color=c)
plt.text(xv-7,350000,xv,rotation=90)
plt.axvline(xh,ls='-',linewidth=3, color=c)
plt.text(xh-7,350000,xh,rotation=90)

xv=65
xh=280
c='blue'
plt.axvline(xv,ls='--',linewidth=3, color=c)
plt.text(xv-7,350000,xv,rotation=90)
plt.axvline(xh,ls='-',linewidth=3, color=c)
plt.text(xh-7,350000,xh,rotation=90)

axes = plt.gca()
axes.set_xlim([0,500])

plt.xlabel('Surface density')
plt.ylabel('Number of points')

plt.legend()
plt.show()

Accuracy

To compare the levels of noise of the 3 point clouds, I take 3 identical flat roof segments of the TCD's Long Room building, perform a plane fitting and compare the RMS of the point deviation from the fitting planes (i.e. residual). Since the roof patches are supposed to be (relatively) flat, the residual value can be taken as an indicator of the level of noise in the data. Table 3 presents the plane fitting results. The 2014 appears to be better than the 2007 scan but worse than the 2015 scan. That can also be observed visually in Figure 4.


Table 3 - Noise level comparison
Features 2014 2007 2015
RMSD (m) 0.025 0.038 0.018
Inlier ratio (%) 59.8 43.0 75.1


Figure 4 - Visual comparison of the 3 LiDAR scans of Dublin with respect to noise level
density-comparison

Ortho-photos

There are ortho-rectified aerial photos for the entire project area as seen in Figure 5 below. The resolution is slightly lower than the 2015 dataset (6 cm vs. 5 cm). The images has 3 bands RGB, and does not have infra-red. The ortho-rectification is imperfect as seen in Figure 6. Since some of the orthophoto files in the 2015 datasets are defected, we can consider the 2014 imagery dataset as a replacement. However, we cannot expect complete matching between the 2 scans due to the temporal divergence.

Figure 5 - Ortho-photo coverage
ortho-photos

Figure 6 - Imperfect ortho-rectification
ortho-photos

In [ ]: