Finding valley bounds, centerline, and steps


(NB: In the following, I was using a dataset which had been downsampled by 2x in x and y to fit on my screen, so all lengths should be multiplied by 2x, areas and volumes by 4x (not 8x).)

There is a fairly linear trend to the valley bottom in the Lower Knowles Creek dataset:

I've sampled this trend from two points in the valley (data smoothed by 5x5 m filter, samples averaged in 11x11 m square):

The trend is:

Trend: point1=71.704577, point2=108.268860, distance=1419.460461, 
       slope=0.025759, vector=[ 0.89329716  0.44946655]

Trend removal and resetting the minimum to zero yields:

The gradient:

The product of the elevation and gradient pretty clearly indicates the extent of the valley floor:


(Click for larger image)


(Click for larger image)

Here are binary plots of this product for different ranges:

z ≤ 10

z ≤ 20

z ≤ 30

17.5 < z < 22.5

Given time, I could probably come up with a routine that would automatically trace the left and right valley bounds from this image (although skipping over the tributaries might be difficult). But for now, digitizing by hand using the program I've already written for the MNRR project is faster. Here are some points on the two walls:

Interpolated to 10 m:

Centerline automatically calculated:

Results wrt original (smoothed but unleveled) input file:

So, the question is: how does this look? Do you think it accurately delineates the valley boundaries, or is it too wide, or what? I can change the constraints on the elevation and gradient and digitize another binary image. Nevertheless, I think this illustrates the concept, and can be used to test the rest of the volume-finding code. Actually, it might be a good idea to digitize several combinations of elevation and gradient (ideally automatically) and see what effect this has on the resulting volumes.

Note that the centerline is for calculating valley direction only (for the perpendicular bedrock segments). The area and volume will be calculated using the left and right curves (in blue), which form the sides of a long, skinny, polygon. The next step is to calculate and display the directional lines for the bedrock (shown every 20 m, +/- 100 m to each side, after the centerline has been smoothed with a 5 m filter):

The next steps are to:

  1. Calculate intersections between the perpendicular lines and the valley boundaries, and clip the lines to those coordinates.

  2. Eliminate perpendicular lines that cross within the valley boundaries.

  3. Correlate bedrock points with nearest perpendicular lines to calculate the elevation of each horizontal line.

  4. Form quadrilaterals and 'quadri-polygons' of lines and curve segments to delimit the horizontal cross-sections of volumes.

  5. Use the bedrock 'ramp' and the surface elevation within each 'cell' to calculate volumes.

  6. Adjust volume for non-vertical slope of valley walls at delimiting curves.

Sounds easy, eh? Same bat time, same bat channel, next week...


© Sky Coyote 2008.