\figsiz{6}{4.5}
\picfig{4-1}{U:CARSPO.PIC[DIA,HPM]}{The cart in its calibration posture before
the calibration pattern. A program automatically locates the cross
and the spots, and deduces the camera's focal length and distortion.}
The cart camera, like most vidicons, has peculiar geometric
properties. Its precision has been enhanced by an automatic focal length
and distortion determining program.
The cart is parked a precise distance in front of a wall of many
spots and one cross (Figure 4-1). The program digitizes an image of the spot
array, locates the spots and the cross, and constructs a a two dimensional
polynomial that relates the position of the spots in the image to their
position in an ideal unity focal length camera, and another polynomial
that converts points from the ideal camera to points in the image. These
polynomials are used to correct the positions of perceived objects in
later scenes.
\picfig{4-2}{U:AUG25.PIC[DIA,HPM]}{The spot array, as digitized by the cart camera.}
The program tolerates a wide range of spot parameters (about 3 to
12 spots across), arbitrary image rotation, and is very robust. After
being intensely fiddled with to work successfully on an initial set of 20
widely varying images, it has worked without error on 50 successive
images. The test pattern for the cart is a 3 meter square painted on a
wall, with 5 cm spots at 30 cm intervals. The program has also been used
successfully with a small array (22 x 28 cm) to calibrate cameras other
than the cart's \ref{W1}.
\figsiz{3.2}{3.2}\figsiza{3.2}{3.2}
\pipifig{4-3}{U:FOU.PIC[DIA,HPM]}{U:FOUFOL.PIC[DIA,HPM]}{
Power spectrum of Figure 4-2, and folded transform}
\topgra\figsiz{7}{5.25}
\grafig{4-4}{U:SPOT.GOD[DIA,HPM]}{Results of the calibration program.
The distortion polynomial it produced has been used to map an undistorted
grid of ideal spot positions into the calculated real world ones.
The result is superimposed on the original digitized spot
image, making any discrepancies obvious.}
\topgra
\grafig{4-5}{U:W10.GOD[DIA,HPM]}{Another instance of the distortion
corrector at work; a longer focal length lens}
\topgra
\grafig{4-6}{U:W13.GOD[DIA,HPM]}{Yet another example; a rotation}
\topgra
\grafig{4-7}{U:W14.GOD[DIA,HPM]}{And yet another example}
The algorithm reads in an image of such an array, and begins
by determining its approximate spacing and orientation.
It trims the picture to make it square, reduces it by averaging to
64 by 64, calculates the Fourier transform of the reduced image
and takes its power spectrum, arriving at a 2D transform symmetric
about the origin, and having strong peaks at frequencies corresponding
to the horizontal and vertical and half-diagonal spacings,
with weaker peaks at the harmonics.
It multiplies each point $[i,j]$ in this transform by point $[-j,i]$ and
points $[j-i,j+i]$ and $[i+j,j-i]$, effectively folding the primary peaks
onto one another. The strongest peak in the $90\deg$ wedge around the
y axis gives the spacing and orientation information needed by the
next part of the process.
The directional variance interest operator described later (Chapter 5)
is applied to roughly locate a spot near the center of the image. A special
operator examines a window surrounding this position, generates a
histogram of intensity values within the window, decides a threshold for
separating the black spot from the white background, and calculates the
centroid and first and second moment of the spot. This operator is again
applied at a displacement from the first centroid indicated by the
orientation and spacing of the grid, and so on, the region of found spots
growing outward from the seed.
A binary template for the expected appearance of the cross in the middle
of the array is constructed from the orientation/spacing determined
determined by the Fourier transform step. The area around each of the
found spots is thresholded on the basis of the expected cross area,
and the resulting two valued pattern is convolved with the cross template.
The closest match in the central
portion of the picture is declared to be the origin.
Two least-squares polynomials (one for X and one for Y)
of third (or sometimes fourth) degree in two variables,
relating the actual positions of the spots to the ideal positions in a
unity focal length camera, are then generated and written into a file.
The polynomials are used in the obstacle avoider to correct
for camera roll, tilt, focal length and long term variations in the
vidicon geometry.
\vfill\eject