Tennis video arbitration

How accurately can two phones on tripods decide whether a ball landed in or out?

A serve on clay with the ball detected and circled
Ball detected by background subtraction, indoor clay court, 60 fps.
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

  1. 2D detection by background subtraction: median reference frame, threshold, morphology, remove the player, keep ball-sized blobs, choose by trajectory continuity.
  2. Six landmarks with known world coordinates: four corners plus the two net-post tops (six coplanar points cannot fix a projection matrix).
  3. DLT calibration: one 3×4 matrix P = K[R|t] per phone, Hartley-normalized, solved by SVD; reprojection RMSE as the sanity check.
  4. Triangulation: two rays, A·X = 0 by SVD.
  5. Bounce: a parabola fitted around the lowest sample recovers the contact instant between frames; signed distance to the nearest line gives the call.
Court lines detected by Hough transform with the six landmarks
Court lines and landmarks.
Reconstructed 3D trajectory of a serve over a scale court
Triangulated 3D trajectory.

Numbers

MeasurementValue
Mean absolute error, indoor, 60 fps, 20 serves19 mm
Correct calls20 / 20
Same protocol at 30 fps42 mm
Detection, indoor / outdoor (true positives)84% / 23%
← All projects