Tennis video arbitration
How accurately can two phones on tripods decide whether a ball landed in or out?
- Result
- 19 mm mean error, 20/20 correct calls over twenty serves, against a tape measure · Hawk-Eye: 2.6–3.6 mm with ten high-speed cameras
- When
- Sep 2024 – Jul 2025, supervised research project (TIPE)
- Code
- github.com/NnicolasN/tennis-video-arbitration — MIT · numpy, OpenCV · 39 tests · CI
Method
- 2D detection by background subtraction: median reference frame, threshold, morphology, remove the player, keep ball-sized blobs, choose by trajectory continuity.
- Six landmarks with known world coordinates: four corners plus the two net-post tops (six coplanar points cannot fix a projection matrix).
- DLT calibration: one 3×4 matrix
P = K[R|t]per phone, Hartley-normalized, solved by SVD; reprojection RMSE as the sanity check. - Triangulation: two rays,
A·X = 0by SVD. - Bounce: a parabola fitted around the lowest sample recovers the contact instant between frames; signed distance to the nearest line gives the call.


Numbers
| Measurement | Value |
|---|---|
| Mean absolute error, indoor, 60 fps, 20 serves | 19 mm |
| Correct calls | 20 / 20 |
| Same protocol at 30 fps | 42 mm |
| Detection, indoor / outdoor (true positives) | 84% / 23% |
- The geometry is not the limit: on synthetic data it reproduces ground truth to twelve decimals
- Frame rate dominates: halving it more than doubles the error
- Outdoors, moving shadows break background subtraction — a limit of the method