This is the fifth blog in a series on Lidar Solutions in ArcGIS. It was written by Clayton Crawford, Product Engineer on the 3D Analyst team in ESRI’s Software Products group in Redlands.
Creating Intensity Images from Lidar
Intensity is a measure, collected for every point, of the return strength of the laser pulse that generated the point. It’s based, in part, on the reflectivity of the object struck by the pulse. Other descriptions for intensity include ‘return pulse amplitude’ and ‘backscattered intensity of reflection’. Keep in mind, the reflectivity is a function of the wavelength used which is most commonly in the near infrared. Intensity is used as an aid in feature detection and extraction, lidar point classification, and as a substitute for aerial imagery when none is available. If your lidar points include intensity values you can make images from them that look something like black and white aerial photos (Figure 1).
Loading points with intensity
You'll need source lidar in either LAS or ASCII XYZI format. It’s common to use first returns. If your data are in LAS format use the LAS To Multipoint tool with Intensity selected as an attribute to import (Figure 2). If your data are in ASCII XYZI format use the ASCII 3D To Feature Class tool.
The data loading process results in a multipoint feature class with an attribute field containing the intensity values (Figure 3). You can't read these directly because they're packed into BLOBs (Binary Large OBjects). Every vertex of a multipoint has its intensity mapped into the BLOB stored for that multipoint record.
Substituting intensity for z
A custom VBA script is used to replace every multipoint vertex z with intensity. It does this on a copy of the data. Find the script here; to use it follow the instructions included in the script.
For the ArcObjects geeks out there, take a look at the code to see what it’s doing. Note, there’s a TerrainBlobReader object used to decode the BLOBs. See also that the multipoint vertex ID’s (automatically assigned during import) are used to map into the BLOB value arrays. For the adventurous, note that ArcObjects also provides a TerrainBlobWriter object. If you have a lot of points that need to be stored as multipoints for the sake of efficiency, but also need per-point attribution, these utility objects come in handy.
Another potentially useful script converts, or explodes, multipoints for an area of interest (AOI) into points. Its real utility is that it decodes the lidar attributes stored in BLOBs into readable/usable numeric values placed in the output point feature class attribute table. A word of warning: make sure your AOI is not too large. Keep it small enough so it contains fewer than roughly three million points (adjust according to how patient you consider yourself to be). Find this script here.
Note: Starting with ArcGIS 9.4, the portion of the workflow involving the substitution of intensity for z will not be necessary. The Point to Raster tool will be able to rasterize using the intensity BLOB field directly.
Rasterize the points
Use the Point to Raster tool on the feature class created by the script that swaps intensity with z and set the Value field to Shape (Figure 4). This tells the tool to rasterize using the shape z's which we know are actually intensity. Select MEAN as a rasterization method. The resulting raster is the intensity image. [As a side note: you may find one of the other options is useful for analysis (e.g., using RANGE of intensity as a variable used in feature detection)].
Before moving on, review the presence of NoData. Significant numbers of NoData cells will result if the output cellsize you specified is too small relative to the density of the lidar points. You can see NoData by assigning a color to it on the Symbology tab of the raster layer Properties dialog. If there’s too much, the easiest thing to do is go back and re-run Point to Raster with a larger cellsize. Alternately, you can use a method described in a previous post to fill in missing values using an expression in the Spatial Analyst calculator (see Lidar Solutions in ArcGIS_part2).
The range of values in the image is hard to predict without knowing details about how your data was collected and processed. For one thing, the original intensity values are sensor dependent. Secondly, the values may have been adjusted by the vendor (e.g., normalized to a range of 0-255). Because of this it’s hard to say what the best display options are. You will need to experiment with the raster layer stretch type and contrast. Turning on bilinear re-sampling is probably a good idea. If you’re looking for more display possibilities consider combining intensity with another variable such as hillshade (Figure 5).
The return intensity collected for every lidar point can be used to make images. These images have a variety of uses in GIS applications including feature detection and extraction. ArcGIS provides tools to make these images.
That concludes this part of Lidar Solutions in ArcGIS. Subscribe to this blog or check back in a month or so for a discussion on how to update terrain datasets with new measurements.