cropped reduced digital photograph, run 4
gridded elevation, 4 mm spacing (white = highs, black = lows)
filtered and smoothed elevation
local relative height (5x5 moving window)
oblique 3-d view
In order to address issues related to landscape form, we used stereo digital
photographs to develop gridded elevation models of the landform. The process
involves several steps. First, the photographs are rotated 90 degrees into rough
parallelism with the basin reference frame, and converted to gray scale (pixel
values 0-255). Photographic coordinates of measured benchmarks on the basin
walls were collected for each photograph. The stereo pairs were then cropped,
and automatically correlated at an arbitrary grid spacing, usually every 4-8
pixels. To perform the correlation, a two dimensional projective transformation
was calculated for reference points appearing in both photographs:
x2 = (a1,1 * x1 + a1,2 * y1 + c1) / ( a3,1 * x1 + a3,2 * y1 + 1)
y2 = (a2,1 * x1 + a2,2 * y1 + c2) / ( a3,1 * x1 + a3,2 * y1 + 1),
where ai,j are elements in a scaling matrix, c1 and c2 are translation constants.
Given at least 4 correlated points in each photograph, the 8 transformation
parameters can be computed. We used from 4 to 14 correlated points and a least
squares inversion algorithm to determine the transformation parameters. As a
side note, a two dimensional conformal transformation was tried initially, but
this transform only works for photographic planes that are parallel to each
other, and does not account well for arbitrarily oriented photographs. Additionally,
the elevation field calculated (via collinearity) from a plane and a projective
transform of that plane results in another plane. The elevation field calculated
from a plane and a conformal transform of that plane is a curved surface. The
residual difference between measured correlated coordinates and transformed
coordinates is substantially smaller for a projective transform (~1-5 pixels)
as opposed to a conformal transform (~5-10 pixels). This fact allows for smaller
search regions in the target photograph during correlation, and corresponding
reductions in computing time.
The correlation proceeds by stepping across one of the photographs, transforming
the photographic coordinates into the second photograph, and searching the second
photograph for the smallest square root sum of squared differences between pixel
color values within a moving search box around the targeted transformed point.
During initial tests, it was discovered that an improved correlation could be
obtained by searching in the photographic offset direction (i.e., the flight
line direction), instead of searching in all directions around the target pixel.
The flight line direction can be calculated using a projective transform from
the ground reference frame to the target photograph, projecting camera ground
x and y coordinates onto the photograph, and calculating the direction between
camera coordinates in the photographic reference frame. This method of correlation
works moderately well, but is not bullet proof. Correlations also depend on
search window dimensions. Trial and error suggests that a window of 16 x 16
pixels and search distances ~10 pixels generate reasonable correlations in most
cases.
After correlation, camera orientations are calculated using the well-known collinearity
equations:
xp = foc * (A11 * delx + A12 * dely + A13 * delz
) / (A31 *delx + A32 * dely + A33 *delz )
yp = foc * (A21 * delx + A22 * dely + A23 * delz
) / (A31 *delx + A32 * dely + A33 *delz ),
delx = (xg - xci)
dely = (yg - yci)
delz = (zg - zci),
where p refers to photographic coordinates, g refers to ground
reference frame coordinates, ci refers to camera location coordinates
in the ground reference frame, foc is effective camera focal length in dimensions
of ground reference frame, and Aij is the rotation matrix,
A(1, 1) = Cos(phi) * Cos(kappa)
A(1, 2) = Cos(omega) * Sin(kappa) + Sin(omega) * Sin(phi) * Cos(kappa)
A(1, 3) = Sin(omega) * Sin(kappa) - Cos(omega) * Sin(phi) * Cos(kappa)
A(2, 1) = -Cos(phi) * Sin(kappa)
A(2, 2) = -Sin(omega) * Sin(phi) * Sin(kappa) + Cos(omega) * Cos(kappa)
A(2, 3) = Cos(omega) * Sin(phi) * Sin(kappa) + Sin(omega) * Cos(kappa)
A(3, 1) = Sin(phi)
A(3, 2) = -Sin(omega) * Cos(phi)
A(3, 3) = Cos(omega) * Cos(phi),
where omega is rotation around the x axis, phi is rotation around the y axis,
and kappa is rotation around the z axis. Angles are in radians. Positive rotations
indicate counterclockwise rotation when looking down the axis toward the origin.
The rotation matrix accounts for the rotations to go from the photographic to
the ground reference frame. A set of collinearity equations can be written for
any point appearing in a photograph. The collinearity equations contain 11 variables.
We treated measured ground control and photographic points and camera locations
as known variables, leaving 4 unknowns, the three rotations and effective camera
focal length. These can be determined if at least 2 ground control points are
known (i.e., 2 points yield 4 equations in 4 unknowns). Since the collinearity
equations are nonlinear, we employed a numerical scheme that linearized the
collinearity equations, and iterated until changes in the unknowns were negligible.
Once the camera parameters have been determined, ground coordinates of correlated
points can be calculated, again with collinearity equations. These ground coordinates
are then read into an arbitrarily spaced grid, filtered for extreme or missing
values, and smoothed. We report statistics on grids with 7 mm horizontal spacing.
The precision of photogrammetric solutions using a 1280 x 960 pixel resolution
camera is not all that impressive. Elevation ranges calculated for single pixel
shifts are in the range from 7 to 20 mm, depending on the distance between the
ground surface and camera and the field of view. The elevation models should
be viewed as approximations to the ground surface. Nonetheless, a fair amount
of detail can be discriminated from the elevation fields derived from this method.
page last modified June 11, 2001 by Les Hasbargen