Purpose: Ronchifit is used determine the orientation of each
calibrated ronchi image and generate an ASCII output table of the results.
How does it work?
The steps performed by Ronchifit on each input ronchi image are outlined
- Using a 2-D cubic convolution interpolator 
go along vectors from one edge of the ronchi image, through the
center, to the opposite edge, along the direction k, where k is in
degrees, measured counter-clockwise from the positive x-axis.
Do this for 0 <= k <= 180 degrees.
- When the vector is perpendicular to the ronchi ridges, the spacing
between adjacent ridges is ~10 pixels. When the vector is parallel to
the ridges one sees a constant (technically an infinite period). Slices
through one ronchi image at several different angle are shown here:
(Sample cuts through ronchi image at different
- The code actually produces three, interleaved, slices along each
slice 1 uses pixels 1, 4, 7, ....
slice 2 uses pixels 2, 5, 8, ....
slice 3 uses pixels 3, 6, 9, ....
This provides adequate sampling for the smallest expected period (10
degrees) and significant over-sampling as the vector gets closer to being
aligned with the ronchi ridges and the period approaches infinity.
- Each slice is forced to have a zero mean, and a cosine-bell apodization
is applied over the outer 20% on both ends.
- The Fourier transform of each slice is computed.
- Then cross-spectra (of slices 1&2, 1&3, 2&3) are generated and averaged.
- The location of the of the peak is determined by first finding the
where the maximum occurs and then refining this value using a 3-point
parabolic interpolator. This gives the period for 1 vector.
- This process is repeated for every vector.
- When all of the vectors are processed we have a measure of the period
for every angle. The location of the peak provides the an initial
estimate for the direction along the ronchi ridges.
(Measured Period vs. Angle for a single
Using this approach alone allows one to measure the angle to ~0.05
degree. We need significantly better accuracy than that.
- If we take the measured period as a function of angle, take it's
inverse and rescale it to have unit amplitude, we find that the resultant
curve can be modeled very well by the function:
This plot compares the measured function to the above model:
Modeling 1/Period vs. Angle
- The model is "slid" across the scaled 1/Period function, using
small steps in theta. At each step the code computes the sum of the
square of the differences between the measured curve and the modeled function.
When this hits a minimum, the estimated angle is updated and the same
process is repeated using smaller steps and a narrower range around the
latest estimate. This is repeated three times, each time reducing the
search zone and decreasing the step size. The estimated error on each
final measurement is on the order of 0.001 degrees.
- The results of the calculations are recorded in arrays as the input
ronchi images are processed.
- Once all of the images have been processed, the linear trend
(how the camera would have been turning if the camera rotator had
perfectly circular gears) is subtracted off.
- Now the code estimates the amplitudes of expected periods using
, determines their significance using
 and sorts the expected periods
according to significance.
- Finally, the results are written to an ACSII table. The file should
adhere to the following naming convention:
ssrchyymmdd, where ss is the
2-character site abreviaion, rch is the 3-character code for "ronchi
history file", yy is the 2-digit year, mm is the 2-digit month, and
dd is the 2-digit day of when the ronchi data set was recorded.
A sample "rch" file can be viewed here:
(Sample ronchi history file (udrch021215))
Last updated by Cliff Toner on Friday, August 14, 2005, 11:40