# Calibration of an eye tracking device: transformation from known gaze points

I am creating a calibration system for an eye tracking device. This calibration involves having the user look at five points on a screen. The eye tracker then reports where it believes the user was looking. The result is a map of five co-ordinates that are likely to be stretched, twisted and translated with respect to the actual co-ordinates. Something like this:

So, I now know where the eye tracker thinks the user is looking for each of those five points. From this, it should be possible to calculate where the user is really looking for any co-ordinates, so long as they lie within the calibrated zone.

The way I do this at present is by treating both the X and Y axes separately. I plot the real vs. measured X co-ordinates on a scatterplot and find the linear regression equation, and do the same for the Y co-ordinates.

Thus, I end up with a 'y = mx + c' equation for both the horizontal and vertical axes (i.e. a 'scale' and 'intercept' value for each axis). In order to then find out where the user is actually looking for any measured co-ordinates, I simply transform the X and Y axis data separately using these scale and intercept values.

However; I am not a mathematician. I have recently come across the concept of 'eigenvectors' and wonder if this (or another approach) could provide a more robust method of ensuring I am translating my calibration correctly.

In other words, I think I'm doing this correctly, but I really think I ought to run it by someone who is likely to know for sure whether this is likely to work (given that there can be stretch, twist and translation). Any wisdom would be gratefully received.

-

Eigenvectors are a big thing, so the question as to whether they can be used is quite apt, and also quite difficult to answer. Eigenvectors are used in all sorts of applications, so the question as to whether you could use them is probably "yes." (The question of whether you should use them is another matter).

The first thing to note is that an eigenvector is simply a vector that solves the equation $(A-\lambda I)v = 0$. The key is to understand what your matrix $A$ is, and that depends a lot on how you approach the problem.

One thing that you could do is compute a Principal Component Analysis of the calibration data, which would align the data that has the most variance (say, $x$-offset) along one principal axis, and the data with the second most along another axis. These axes are related to the eigenvectors of the correlation matrix of the data. The result is somewhat similar to performing a least-squares analysis of your data. This is probably overkill, however.

Really, the appropriate solution depends on a few things: the accuracy demanded by your solution, the character and the generality of your data (do you need to calibrate for each user, or for all users?), and so forth.

Really, I think that your approach is on the right track (I have used a similar computation in the head-tracking work that I have done). Essentially, you have an affine transform. You want to compute the rotation of the scene, the scale of the scene, and how much it has shifted from center.

I do not think you would gain appreciable accuracy in a single calibration by attempting a more advanced solution. I would only advocate exploring more complicated statistical analysis techniques if you have to calibrate to a large population size.

-