Skip to content
NAMEFRAMEApply for Pilot

Off-frame landmarks: annotating points outside the image

A camera standing on a football pitch sees perhaps a fifth of it. The far corner, the penalty mark at the other end, the halfway line off the left edge: all still known, because the ground and the camera both are. Those are facts rather than observations, so they can be written down even though no pixel in the frame contains them.

Grounds
A football pitch and a tennis court, to regulation
Projections
147 across six frames
Outside their frame
53, each with a coordinate
Checks
Two, and both refuse rather than warn

The one thing nobody can do by hand

Ask an annotator to mark the far corner of a pitch in a frame that does not contain it and there is nothing for them to click. The information is not in the picture. It is in the world, and a renderer knows the world and the camera, so the projection is arithmetic rather than observation.

Anyone recovering a homography from partial views needs exactly this and cannot get it from real footage. It is the clearest case on this site of a thing synthetic data provides that no amount of labelling budget buys.

The lit rectangle is the photograph. Everything on black is outside itL_FootballPitch, marked to the IFAB Laws at 105 by 68 metres
CameraIn the frameOutside itBehind it
High on the halfway line23120
Eye level at the touchline15146
Close on the east penalty area12815
Total503421

From the touchline, most of the pitch is elsewhere

Standing where a touchline camera stands, at eye level, fifteen landmarks are in the frame, fourteen are outside it and six are behind the camera. The pitch has not moved.

Eye level at the touchlineNamed points are the ones furthest out
Close on the east penalty areaFifteen of the thirty-five are behind this camera and are not drawn at all

A small ground is not a fully observed one

A pitch makes the point by being enormous. A tennis court makes it more sharply, because it is small enough that a viewer expects to see all of it. From behind the baseline the whole court appears to be in shot, and four of its fourteen landmarks are below the bottom edge.

Across the three court cameras it comes out at exactly half: nineteen landmarks in their frames and nineteen outside them.

Behind the baseline. The court looks complete; four corners are below the frameL_TennisCourt, marked to the ITF regulation
CameraIn the frameOutside itBehind it
Behind the baseline1040
Beside the net at eye level572
Inside the court, on the service boxes482
Total19194
Beside the net at eye levelInside the court, on the service boxes

Three states, not two

Whether a point is inside the frame and whether anything is hiding it are different questions, and one flag forces a choice between them. So every landmark carries both, separately, and a point at or behind the camera plane carries a third: outside the frustum, occlusion is not false, it is undefined, and a refusal to answer is not a coordinate.

Twenty-one of the pitch’s hundred and five projections and four of the court’s forty-two are behind their camera. They are counted and they are not drawn.

How an invisible label is checked

An off-frame label cannot be eyeballed. There is no pixel to look at, so a wrong one looks exactly like a right one, which means the usual defence against a bad label does not exist here.

Every frame is therefore projected twice, once through the vector form the labeller uses and once through an independent matrix form, and the worst disagreement is recorded. Where the points are coplanar, which on a marked ground they are, a homography is fitted from metres to pixels and its residual is recorded too.

CheckWorst, footballWorst, tennisRefuses above
The two projections disagree3.0e-09 px0.0 px0.05 px
Homography residual4.2e-12 px1.2e-11 px1.0e-06 px

Both limits refuse to write rather than warn. That is not caution for its own sake: an axis-convention flip in this repository’s own sweep once produced zero visible corners from every elevated camera and looked entirely plausible. The reprojection check would have caught it on the first frame.

The limit: no export can carry these

COCO and YOLO both define a point outside the image as not labelled and write zeros. An off-frame landmark cannot travel in a pose file at all, so this is a limit of the formats rather than of the capture, and it is the reason landmarks are their own concept with a file of their own rather than extra keypoint rows.

What that means in practice: a consumer who wants this geometry reads landmarks.json, which carries the world position, the image coordinate, the three states and the depth for every point in every frame.

Running it yourself

Both grounds are built by script and marked to regulation. For each, the painted lines in the level and the landmarks projected through the camera come from one module. That is not tidiness: a corpus whose geometry and whose recorded points are generated separately is how a dataset ships with its lines most of a metre out while every self-consistency check it has passes.

The scene scripts, the capture jobs, the point files, the figure script and every number behind them are in the repository under docs/showcase/off_frame_landmarks.