Return to Ferret FAQ

Contouring to Outline a Mask


Question:

I want to contour a mask consisting of 0's and 1's but it doesn't match the grid cells.

Example:

The command "CONTOUR/OVER mask" (fig a) uses a standard iso-line algorithm to draw contour lines, which leads to a smooth path between grid points. In this case we want to see the outline of the grid cells that make up the mask (fig b).
[Graphic:contour] [Graphic:outline]
fig a
fig b

Explanation:

A straightforward contour of a mask grid of 0's and 1's does not produce a nice representation of the mask because the contour lines do not "square up" at the boundaries between grid cells.

Solution:

You will need this script mask_outline.jnl (updated with Ferret v5.8). It regrids the mask to a new grid which when contoured produces squared off boundaries.

Example:

     yes? use etopo60
     yes? set region/x=90w:20e/y=15s:55n
     yes? shade rose

     yes? let ocean_mask = IF rose LT 0 THEN 1 ELSE 0 
     yes? GO mask_outline ocean_mask
     yes? ovmo  ! think "overlay mask outline"

! If the final line segments at the north and east of the plot are missing

     yes? cancel region
     yes? ovmo

! Use "yes? SHOW ALIAS ovmo" to see or modify the contour command
The technique used is to define a modified mask grid as follows: ('+' to indicate the corners of the boundaries between grid cells) Say the original grid of 0's and 1's looks like this:
      0     1     1



   +     +     +     +



      0     0     1



We define a new mask which contains clusters of 4 points a small distance, EPSILON, from one another immediately surrounding the cell corners. (the original values are in parentheses):
     (0)   (1)   (1)

    0   0 1   1 1   1

   +     +     +     +

    0   0 0   0 1   1

     (0)   (0)   (1)
When the value 0.5 is contoured on this mask, the contour lines will pass within EPSILON of the true corners.


Last modified: Nov 1, 2004 [an error occurred while processing this directive]