balltrack op• Data kinds: none → signal (an op determined by its arguments alone — it takes no image or data input)
• Call: import fullseye as fs; fs.ledger.marker_direction(marker_uv, center_uv, radius_px, K=None) -> 'np.ndarray' (to call the implementation directly, import balltrack; balltrack.marker_direction(marker_uv, center_uv, radius_px, K=None) -> 'np.ndarray'; from the registry, opsdrive.get("marker_direction"))
Position of a marker in the image (col, row) → direction on the sphere (unit vector in the camera frame, front hemisphere: x right, y up, z toward the viewer).
If K (3, 3) is passed, it solves exactly under perspective: from the sphere's angular radius α = atan(radius px / f) it derives the distance to the centre (1/sin α with radius 1) and the line of sight to the centre, intersects the lines of sight of the pattern pixels with the sphere, and returns the normals at the intersections. ★Without K, the disc is treated as an orthographic projection, and the answer is given in a frame whose z is the line of sight through the centre —— if the sphere is off the optical axis the whole frame rotates, and in footage of a moving sphere the change of the line of sight becomes apparent rotation as is (for a sphere crossing 0.6 m away at 6 m/s, the line of sight rotates 0.01 rad in 1 ms, adding 7 % on top of the 0.15 rad rotation per frame. 2026-09-30, the close-up camera of PoC ㉔). Without K, behaviour is as before.
• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).
• Operator provenance and references — the sources of the research/methods this op family came from.
• The canonical algorithm (author, year) and its uses are named in the family usage guide above.
• poc_ball_bounce — py -3.11 examples/poc_ball_bounce.py
• poc_table_tennis_bounce — py -3.11 examples/poc_table_tennis_bounce.py
• poc_table_tennis_spin — py -3.11 examples/poc_table_tennis_spin.py
signal as input)flight_vacuum · magnus_lift_coefficient · drag_coefficient_sphere · restitution_from_apexes · restitution_from_intervals · fit_parabola · flight_fit · fit_aero
balltrack)ball_detect · ball_track · kalman_ca · triangulate_dlt · track_triangulate · bounce_detect · spin_from_markers · spin_from_marker_sequence
*Provenance: balltrack.py — DRIVE operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.