Hello. I tried to send this to the list yesterday, but it did not get
through?
I have experimented with the dataset. It it great to have data from five
different IPaqs! Thanks to all who took the time
I have split the calibration into two steps:
1: Linearization: This step is common to all h22xx's and compensates for
the nonlinear caracteristics of the touch screen. The linearization
model is based on the collected calibration data set, and no end user
input is necessary.
2: End user calibration: An affine transformation is applied to the
output of the linearization. This transformation will compensate for
variation among individual IPaqs.
I hope that doing it this way, we can put the linearization in the
driver, and use the standard five point calibration aplication to
calculate the affine transformation.
The best model so far for the linearization is a third order polynomial
transformation:
[u v] = [1 x y x*y x2 y2 y*x2 x*y2 x3 y3] * P
P = [ -13.5144761565401 169.146683157845
0.998899227471411 -0.280826216841311
0.123636132161507 0.242456275259165
0.000123883680025348 0.000519612258770896
-0.000118403906345277 0.000384506154739729
-0.000300069459121329 0.00104141788329123
-1.31410637329959e-008 -3.9945242143434e-007
-7.06672602334653e-008 -2.68145145298739e-007
9.57105105568427e-008 -9.13633711164999e-008
1.93619413302605e-007 -4.09974235004995e-007]
This results in an average error of approximately three pixels. The
average error of all pixels excluding the top and bottom rows is 1.73
pixles.
A second order model is almost as good (3.7 and 2.2 pixels average
errors), and practical experiments are neeed to determine if 3rd order
is worth the extra CPU cycles:
[u v] = [1 x y x*y x2 y2] * P
P = [ 14.0274374997464 -10.4143500663246
0.963183808844262 0.123820939383483
-0.0175631972840528 0.90783932803656
3.01072646091237e-005 -0.00022066295637918
1.78550793439434e-005 5.26174785439132e-006
1.24328256232492e-006 0.000171150736110672]
These transformations sould be universal to all h22xx's, at least they
work on all five in the data set The output of these transforms should
then be calibrated to the individual device. I used Matlab for this but
i think it already is in the existing touchscreen code? The affine
transformation can be calculated with only three points, but more is of
course better. The affine transformations for the five IPaqs in the
data set are:
[a b] = [u v 1] * T
Benny1:
T = [ 0.347031105676483 -0.0587183862521103 0
0.000145765314088345 -0.589594893801541 0
-57.7329530191106
543.212635880364 1 ]
Benny2:
T = [0.339879402959298 -0.0621329739170978 0
-0.00503055139392168 -0.612077395632859 0
-50.6689148930821
567.560244957969 1]
Gwyneth:
T = [ 0.339568651391204 -0.0696094713714111 0
-0.00294074572954289 -0.619592349460165 0
-53.0255447763019
576.000235135976 1]
Koen:
T = [ 0.364890847638164 -0.0529917736473928 0
-0.00482153787846888 -0.578973138103026 0
-62.9405440502082
531.040706134086 1]
Michael:
T = [ 0.340536161198627 -0.062376136449147 0
-0.00308001751551877 -0.596462792592348 0
-51.4786054092152
551.666266797593 1]
These transformations should create points (a, b) in screen coordinates.
If a more elaborate model is required, we will probably need an even
better data set. It would be very interesting to see multiple "harvests"
from the same IPaq. Then it would be possible to distinguish noise from
"real" nonlineraity.
Any volunteers for creating a test implementation in the driver?
Best Regards
Lau
Received on Tue May 18 2004 - 08:19:49 EDT
This archive was generated by hypermail 2.2.0 : Mon Jul 25 2005 - 17:19:27 EDT