`Back to the index page`

`For eye-contigent display changes, fast online eye-state categorization
is necessary. The original version of the algorithm was developed by Andreas
De Troy. The version that we currently
use is described below. It may look a bit strange. This is because the
formulas are "tuned" in a trial-and-error way, and are not explicitly based
on some velocity or acceleration criterion. But it works really well!`

`The ( x,y) eye position is sampled every ms (with a DPI
Eye-tracker). Two status bits of the DPI tracker pre-categorize the eye
state as blink, signal error, or track. If the eye
state according to the DPI tracker is track, our algorithm determines
if the eye is fixating or saccading, based on the current eye-position
sample, the previous five eye-position samples, and the previous eye state.
This is done in the following way:`

`Let's first define some symbols:
x(t) = sample of horizontal eye position
(in visual degrees) at time t (t=0 is the most recent sample,
t=-1
is the previous sample, etc.).
y(t) = sample of vertical eye position
(in visual degrees) at time t
state(t) = eye state (blink, signal error,
fixation, or saccade) at time t
|x|= absolute value of x
`

`Now, calculate two variability statistics, named xvar and yvar:`

`xvar = |x(-5) - x(-4)| +`
` |x(-4) - x(-3)| +`
` |x(-2) - x(0)| +`
` |x(-3) - x(0)| +`
` |x(-4) - x(0)| +`
` |x(-5) - x(0)| +`
` ( (x(-3) - x(-2)) ^{2} +`

`yvar = |y(-5) - y(-4)| +`
` |y(-4) - y(-3)| +`
` |y(-2) - y(0)| +`
` |y(-3) - y(0)| +`
` |y(-4) - y(0)| +`
` |y(-5) - y(0)| +`
` ( (y(-3) - y(-2)) ^{2} +`

`Generally, low values for xvar and yvar denote a fixation. One
could simply choose a criterion to compare the values of xvar and yvar
with. Better, two criteria should be set, a lower lowcrit, and a
higher highcrit. When the previous eye state was categorized as
a fixation, compare xvar and yvar with highcrit. Otherwise, compare xvar
and yvar with lowcrit: In this way, a hysteresis is created for a change
in eye state. We use lowcrit = 0.08, and highcrit = 0.36.`

`if state(-1)= fixation
{
if xvar < highcrit, and yvar <
highcrit, then state(0)= fixation, else state(0)= saccade
}`

`if state(-1)= saccade, blink, or error
{
if xvar < lowcrit, and yvar <
lowcrit, then state(0)= fixation, else state(0)= saccade
}`

`The above algorithm could be improved further, by combining the formulas
for xvar and yvar, resulting in a single variability statistic, that is
independent on the direction of an eye movement. The original algorithm
was developed to run on a 286 PC, which is why the formulas could not be
too complex. Of course, this is not really an issue anymore.`