Originally the sundial reader was implemented using ATM camera modules. However, it has now been reimplemented using a CORBA based image server built upon omniORB2 - our own CORBA 2 compliant ORB.
To tell the time, we must detect two lines in the image: the vertical edge of the wall on the right, and the line defined by the shadow of the gnomon. The first line is required to correct for any disturbances to the camera mounting. The shadow is detected using a "dark bar" filter, and a straight line computed using a robust fitting algorithm. We set thresholds to prevent it from detecting the gnomon or hourly rulings when it is cloudy.
The gradient of the angle between the wall edge and the shadow line is transformed according to a 1D projectivity to obtain the sun's position in the sky around the celestial equator. This is converted to apparent solar time. The transformation was calibrated in advance, from the orientations of the hourly rulings.
Depending on the season, apparent solar time may differ by as much as 16 minutes from the mean time shown by a regular clock. This is because the sun's motion around the sky is not uniform over the year. The correction to apparent time (the equation of time) is modelled as the sum of two sinusoids: one represents the eccentricity of the earth's orbit and has a period of one year; the other represents the obliquity of its axis and has a period of six months.
Cambridge local time is approximately 30 seconds ahead of Greenwich time.