In the world of computers and geographic information systems (GIS), creation of tinted or "painted" relief is not as direct a process as it once was. In the past, relief maps were created by cartographers using artistic implements such as pen and pad, water colors, or air brush and ink to directly apply terrain information to the page. Today's map makers must create "painted relief" by manipulating digital data with computer programs which in turn command mechanical devices to paint the computer screen or plotter paper. Fortunately, ArcInfo provides an abundance of software tools which can be used to easily create beautiful renditions of the Earth's surface for this purpose and since there are ample digital elevation data universally available, painted relief could be created for nearly anywhere on Earth. The diagram below shows a simplified processing model for creating painted relief from digital elevation model data (DEM) utilizing the Arc/Grid System. This processing model was used for generating the examples in this paper.
Diagram 1. Process Model for creating Painted Relief.
The first step in creating any shaded relief map is to render the areas of shadow and light in accordance to a hypothetical position of the sun in relation to the terrain of the map area. The values of darks and lights across the landscape are a function of the sun's lighting as it strikes the undulations and angular faces of the surface of the land. Recording these darks and lights carefully reveals the underlying morphology of the landscape. Whenever the patterns of shadow and light are displayed, the illusion of a "shaded relief" landscape is created.
In ancient cartography, the illusion of terrain was created by artists who actually drew the mountains in picture form where relief was believed to be. In more recent times, cartographers created relief information by interpreting contour lines and shading the relief with an airbrush. This was a very time consuming, tedious and expensive process, yet the results were impressive. In the digital world, sophisticated software and widely available off-the-shelf digital elevation data, such as shown in Figure 1, interact with powerful computers to create relief information automatically. Most major GIS systems have a special function to create shaded relief. These programs generate shaded relief based on values in a digital elevation file.
Figure 1. Gray scale elevation image of Crater Lake, Oregon. This
figure as drawn using the following Grid command:
Grid: GRIDPAINT elevation_map value linear nowrap gray
The capability to construct shaded relief is available in the ArcInfo Grid subsystem through the HILLSHADE function. Using this function on a digital elevation dataset, a user could specify the generation of illumination patterns for nearly any lighting situation. But for cartographic purposes, a typical terrain presentation may use a northwesterly azimuth value of 315 degrees and an afternoon solar altitude of 65 degrees. The vertical differences of the elevation values may be exaggerated as much as three or four hundred percent to make the terrain seem more dramatic.
What follows is a command line example of the HILLSHADE function:
Grid: hillshade_map = HILLSHADE(craterlake_elev,315,65,all,3.2)
As shown in Figure 2, most digital shaded relief backdrops use a simple gray scale to portray the relief and that has come to be a "defacto" standard coloration. However, Figure 3 shows that monochromatic displays can be created with equally dramatic results. Whether displayed in a gray scale or monochromatic color scheme, landform and relief patterns become strikingly apparent.
Figure 2. Gray scale shaded relief image of Crater Lake, Oregon.
This figure was drawn using the following Grid command:
Grid: GRIDPAINT hillshade_map value linear nowrap gray
Figure 3. Monochromatic shaded relief image of Crater Lake, Oregon.
The figure was created by first setting a display color
range using the Grid SHADECOLORRAMP command, then the Grid GRIDSHADES command.
Below is that command sequence:
Grid: SHADECOLORRAMP 0 255 brown bisque
Grid: GRIDSHADES hillshade_map
Development of the shaded relief (hillshade) model is critical to building relief displays because the pattern of shadows defined by this image reveal the shape and form of the landscape. Conceptually, painted relief techniques superimpose color, texture, and pattern upon the morphology of the land according to distribution of the thematic information being portrayed. Furthermore, the digital values contained in the shaded relief image are critical, mathematically speaking, to any additional processing needed to incorporate and manipulate color, value, and pattern in the development of "Painted Relief."
The product of the Arc/Grid HILLSHADE function is a new dataset with values ranging from 0 to 255. These values are indicative of an 8-bit scale computer programmers often use and are somewhat meaningless in a natural or conceptual model. A more native and useful measurement for hillshade would be "percent illumination." The results of HILLSHADE command can be converted to "percent illumination" by dividing values the HILLSHADE dataset by 255. This creates a new dataset where values range from zero to one. Fully illuminated terrain have pixel values of one or 100 percent, half illuminated pixels have a value of .5 or 50 percent illuminated and totally dark areas have a value of zero or zero percent illuminated. Thinking in terms of percent illuminated, is a more natural way of thinking about illumination in relation to color value. This also facilitates combining the relief information with other information to create dramatic and useful painted relief maps.
Creating the colorful terrain backdrops for a map is easy, once the basic relationship between color and shadow is understood. Color behavior on the landscape appears is a function of the sun's relationship to the shape of the land. Changes in a color's value exhibit a linear relationship to the distribution of highlights and shadows as they drape across the land's many folds and undulations. This hypothesis agrees with common sense: a color's value diminishes as shadows darken (green is green in full light but becomes darker green in less light and black in no light). This phenomena is the essential kernel in the processing model for creating "painted relief." A relationship model which resembles these principles is expressed by the simple formula:
P = A * I
where
P is the shaded color value
A is the color
I is the landscape illumination value
The elevation category map for this example was created with the following
command line:
Elev_cat_map = reclass(elev_map * 3.28089,elev.lut)
A scale factor of 3.28089 was applied to the elevation map to convert meters
to feet. The resulting grid is displayed in Figure 4.
Figure 4. Gray scale elevation category image of Crater Lake, Oregon.
This figure was drawn using the following Grid command:
Grid: GRIDPAINT elev_cat_map value identity nowrap gray
Figure 4 shows a gray scale rendition of the classified elevation map. To assign color to the same elevation dataset, another look-up table is used to relate the reclass value to the RGB value for the desired color. These values are stored in a file called color.lut (shown below). The resulting display is shown in Figure 5.
Figure 5. Color elevation category image of Crater Lake, Oregon.
This figure was drawn using the following Grid command:
Grid: GRIDPAINT elev_cat_map value identity nowrap color.lut
The above process from creating the shaded relief, reclassing the elevation map, and running the color2(x) commands has been captured in an AML program shown below:
Figure 6. "Painted relief" image of Crater Lake, Oregon.
This image was drawn using the following Grid command:
Grid: GRIDCOMPOSITE RGB red green blue
Once this question has been addressed, manipulating color can be present a whole set of technical problems to solve. I have prepared two hypothetical examples to explore some of the possibilities.
(1) Suppose the hypothetical requirement is for a painted relief map of elevation
categories (like those in the single theme example), but the client wants
road corridors and a visitor center highlighted in different colors to
illustrate different categories of access. Hypothetical road corridors can be
created by buffering roads to a 600 meter width to illustrate traffic types. Each type
of access can be assigned a simple color, such as magenta for major road access, cyan for paved access, and
orange for other access. Once this theme has been developed, several possible
display regimes can be tried. Figure 7 shows what this hypothetical_access theme looks like:
Figure 7. Hypothetical Road Access Corridors of Crater Lake, Oregon.
This figure was drawn using the following Grid command:
Grid: GRIDPAINT Hypothetical_access_map value identity nowrap access.lut
One display possibility would be to imbed the ACCESS theme corridors into the
painted relief using opaque colors. Datasets may be merged a number of ways
in the ARC/GRID system. The procedure to use to generate the combination of
the Elev_cat_map and the Hypothetical_access_map is the CON function. The CON
function command string used to generate the Elev_access_map is shown below:
Elev_access_MAP = con(Hypothetical_access_map lt 4, Hypothetical_access_map, Elev_cat_map)
The command is actually telling the computer to make the final map equal to
the Elev_cat_map except where the Hypothetical_access_map is less than four.
In that case, make the values equal to those in the Hypothetical_access_map but
add 100 to those values to avoid confusion in the color look-up table. A new colormap
was created which contained combinations of the values in the color.lut and
access.lut. That file is shown below:
Figure 8. Elevation and Hypothetical Road Access Corridors of Crater Lake, Oregon.
This figure was drawn using the following Grid command:
Grid: GRIDPAINT Elev_access_map value identity nowrap Elev_access.lut
This Elev_access_map can now be fed the color2(X) commands discussed in the previous section and the painted relief containing access corridors will be complete.
Figure 9 was generated using the modified code from the relief.aml.
Figure 9. "Painted relief" of Hypothetical Access Corridors for Crater Lake, Oregon.
This image was drawn using the following Grid commands:
red_access = int(con(isnull(color2red(Elev_access,Elev_access.lut,nowrap) *
illum),255,(color2red(Elev_access,Elev_access.lut,nowrap) * illum)))
green_access = int(con(isnull(color2green(Elev_access,Elev_access.lut,nowrap) *
illum),255,(color2green(Elev_access,Elev_access.lut,nowrap) * illum)))
blue_access = int(con(isnull(color2blue(Elev_access,Elev_access.lut,nowrap) *
illum),255,(color2blue(Elev_access,Elev_access.lut,nowrap) * illum)))
Grid: GRIDCOMPSITE RGB red_access green_access blue_access
(2) The previous example shows how to add additional themes with opaque color. The second hypothetical example shows how to generate and merge a theme using "transparent" color. In this "made-up" example, the customer wants all the themes shown in the previous map, but in addition wants to show an 8000 meter buffer around the Crater Lake Visitor Center in red. If this feature were to be merged using opaque colors, many important features would be obliterated. Figure 10 shows the 8000 meter buffer area of Crater Lake Visitor Center, Oregon.
Figure 10. "8000 meter buffer zone image of Crater Lake Vistior Center,
Oregon.
This image was drawn using the following Grid command:
Grid: GRIDPAINT bufferzone
To merge color "transparently," the following AML was written to build "painted relief" of the previous Hypothetical_access and Elevation_category map when the visitor buffer map is added transparently. The AML program uses a CON function and basically takes the average rgb value of the corridor and elevation categories and the buffer zone where the buffer zone exists and multiplies those values by the illumination values. Where the buffer zone does not exist it multiplies the rgb values of the access corridor values by the illumination values.
/* transparent.aml
&if [exists visbuf_red -grid] &then; kill visbuf_red
&if [exists visbuf_green -grid] &then; kill visbuf_green
&if [exists visbuf_blue -grid] &then; kill visbuf_blue
/* visbuf.lut is a one color look-up file containing "1 255 0 0"
visbuf_red = con(visbuff == 2,~
((color2red(slicerdsbuf,Elev_access.lut) + ~
color2red(visbuff,visbuff.lut)) / 2),~
color2red(slicerdsbuf,Elev_access.lut)) * float(hill) / 255
visbuf_green = con(visbuff == 2,~
((color2green(slicerdsbuf,Elev_access.lut) + ~
color2green(visbuff,visbuff.lut)) / 2),~
color2green(slicerdsbuf,Elev_access.lut)) * float(hill) / 255
visbuf_blue = con(visbuff == 2,~
((color2blue(slicerdsbuf,Elev_access.lut) + ~
color2blue(visbuff,visbuff.lut)) / 2),~
color2blue(slicerdsbuf,Elev_access.lut)) * float(hill) / 255
gridcomposite rgb visbuf_red visbuf_green visbuf_blue
Figure 11. "Painted Relief" of Buffer zone, Access Corridors and Elevation Categories of Crater Lake, Oregon.
This image display was drawn using the following Grid command:
Grid: gridcomposite rgb visbuf_red visbuf_green visbuf_blue
Figure 11 was generated by the transparent.aml program and demonstrates how transparent color can be used with opaque colors combined with relief. This capability adds the ability to display overlapping themes in color and greatly increases the use and utility of multi-theme painted relief.
Figure 12. TM Imagery (bands 4,5,3)of Crater Lake, Oregon.
This satellite image of the crater lake area shows many surface
disturbances such as agriculture, forestry and patchiness due to
volcanic activity and snow.
One way to capture these patterns and textures is to calculate the "Normalized Difference Vegetation Index" (NDVI) from TM imagery. NDVI measures vegetative biomass and wetness. The higher (whiter) the NDVI value, the greater the vegetative biomass and moisture. The lower NCVI values (darker regions in the image) represent areas of lower vegetative boimass, and are an indicator of surface disturbances, or breaks in the forest canopy. These are the patterns and textures that are to be incorporated into the painted relief image. The NDVI in Figure 13 was generated in ERDAS Imagine software, then imported to ARC/GRID. To isolate the darker (lower) values, Figure 14 was generated in ARC/GRID using the CON function. Areas of low NDVI are show in white (value of 1) and represent all NDVI areas where the pixel value is less than one standard deviation below the mean. A statistical readout of the value in the NDVI image indicated a mean brightness of 111 and a standard deviation of 28, thus the desired values for the Low_NDVI map are all values less than 83.
Figure 13. NDVI image of Crater Lake, Oregon generated in Erdas Imagine.
Figure 14. Low NDVI areas of Crater Lake, Oregon. (Shown in White)
Oregon.
This image was made using the CON Arc/Grid Function and then
displayed with the Grid commands as follows:
Grid: Low_NDVI = CON(NDVI < 83,1,0)
Grid: GRIDPAINT Low_NDVI
Since the purpose of incorporating texture and pattern from imagery is to enhance
the smooth appearance of the landscape in painted relief, modifications to both the
elevation values and the brightnesses of the hillshade image will be made based on
the distribution of the low NDVI values. This process happens in several steps.
(1) Using the Arc/Grid CON function, ten meters are subtracted from the crater lake
elevation map whereever the low_NDVI map is equal to one (white).
(2) Then the Arc/Grid HILLSHADE function is performed on that dataset.
(3) The resulting texturized hillshade map is
enhanced by brightening pixel values where they correspond to low NDVI values.
The new pixel brightness value is calculated by the following formula:
new_pixval = current_pixval + ((255 - current_pixval) * .9)
This process creates a "dimpled" effect in the grayscale illumination model.
The "floor" of each dimple is a lighter shade than the surrounding pixel
values. This is displayed in Figure 15.
Figure 15. Enhanced hillshade map of Crater Lake, Oregon.
Oregon.
Below are the Grid commands used to generate the Enhanced Hillshade map:
/* comment - Subtract 10 meters from the elevation map
fcl_elv10 = crater_elv - (fcl_bright10 * 10)
/* generate enhanced hillshade map in two steps
/* 1 hillshade
Hill_map = hillshade(fcl_elv10,345,65,#,3.2)
/* 2 bright hillshade
enhanced_hill = con(Low_NDVI == 1,~
Hill_map + ((255 - Hill_map) * .90),Hill_map)
/* then convert enhanced_hill to enhanced_illum
enhance_illum = float(enhanced_hill) / 255
Figure 16. Texturized Painted Relief Map of Crater Lake, Oregon.
What follows are the Grid commands used to generate the Texturized painted relief map:
/* Creating the painted relief backdrop
/* use color2(X) commands at the same time use other functions
/* int reduces the size of final Grids
/* con(isnull(),255 takes care of nulls in the map and assigns them
"white"
red_texture = int(con(isnull(color2red(slice,color.lut,nowrap) *
enhanced_illum),255,(color2red(slice,color.lut,nowrap)~
* enhanced_illum)))
green_texture = int(con(isnull(color2green(slice,color.lut,nowrap) *
enhanced_illum),255,(color2green(slice,color.lut,nowrap)~
* enhanced_illum)))
blue_texture = int(con(isnull(color2blue(slice,color.lut,nowrap) *
enhanced_illum),255,(color2blue(slice,color.lut,nowrap)~
* enhanced_illum)))
/* use "Gridcomposite rgb red green blue" to display the results
Gridcomposite rgb red green blue