Spin the drone photo: which point matchers keep up?
Two overlapping aerial frames, cropped to circles. The right one is rotated through a full turn in 5° steps, and ten matchers try to find corresponding points at every angle. Green lines agree with the true camera geometry; red ones do not.
0°
✓ correct✗ wrong
–matches returned
–correct matches
–precision
–time per pair
Precision through a full rotation
Share of returned matches that are correct. Colour marks the method family and line style the variant. Hover to compare at one angle, click to jump the viewer there, or pick a method in the legend.
How many correct matches survive
Correct matches per angle, on a log scale. Dense and semi-dense methods (LoFTR, RoMa, RoMa v2, MASt3R) return a fixed or very large budget of matches, so compare their counts with care; precision is the fairer comparison.
Summary
Sorted by worst-case precision over all 72 angles.
How this was measured
- Two consecutive frames from a fixed-wing drone survey, center-cropped to circles and resized to px, so rotating one never pushes image content out of frame.
- Every method sees exactly the same 72 rotated copies of the right image (0°–355°, counter-clockwise), with each method's default settings and its own internal resizing.
- Because the rotation is known, each match in the rotated image can be mapped back to the original. A match counts as correct when its epipolar (Sampson) error is below px under a fundamental matrix fitted with MAGSAC to the pooled 0° matches of all methods. The scene has real depth (buildings, trees), so an epipolar check is used rather than a single homography.
- RoMa and RoMa v2 are sampled to 5,000 matches; MASt3R uses reciprocal nearest neighbours on an 8 px grid at 512 px; LoFTR (outdoor weights) runs at 840 px. Sparse methods (SuperPoint and ALIKED with 2,048 keypoints) return whatever their default filtering keeps.
- Matches with either end in the black area outside the image circle are discarded for every method before scoring; LoFTR in particular pairs up the featureless black corners.
- RoMa v2 runs at its default "precise" setting. Its fused correlation kernel had no build for the PyTorch version used, and the native fallback ran out of memory on a 12 GB GPU, so it was patched to compute the same correlation in row chunks.
- Timings are on an NVIDIA GTX TITAN X (2015, Maxwell): useful to compare methods, but far slower than a current GPU.
- One image pair is an anecdote, not a benchmark. Easy, textured top-down scenes flatter everyone.