← Back to site

MATCH

1

Your image

Start with an image

A photo, a scan or a satellite frame. It stays on your computer.

Most image formats, plus TIFF, JP2 and PDFi
JPEG, PNG, WebP, GIF and BMP are decoded by the browser. TIFF, GeoTIFF, JPEG 2000 and PDF are not — those use geotiff.js, an openjpeg build and pdf.js, each fetched only when a file needs it. A big TIFF is read downsampled, so its size costs little. A GeoTIFF that already knows where it is says so.
Your images never leave this machine.i
They are read into a canvas and matched on your own GPU, which is also why there is no server bill behind this page. Fetching a reference sends the area you chose — not the image — so the right tiles come back. Choosing your own reference sends nothing at all.

, reduced to 1024 px for matching.
Or try an example
2

Where is it?

Where is it?

Search for a place, or drag on the map to draw a box round what the image shows.

Drag on the map to draw a box.
Type coordinates instead
Draw the box round what the image showsi
Not the region it sits in. A reference much coarser than the image stops matching: measured on one scan, a reference 3.4× coarser gave 2 matches where 1.3× gave 180. If it finds nothing it halves the area once and tries again.
3

Reference

What should it compare with?

A current picture of the same place. The tool finds the same features in both.

About Sentinel-2i
Free to use commercially, which the sharper basemaps are not: Esri restricts commercial use and EOX's cloudless mosaic is non-commercial. Expect weaker matches than against sub-metre imagery — a 10 m reference cannot resolve what a 2 m photograph shows.
A rendered map against OSM gave 134 inliers here and recovered the rotation to 0.04°; a photograph against OSM gave 2 and got it 59° wrong. Both sides being line work is the reason.

A 19th-century engraved plate is a different matter. Tested against a National Library of Australia sheet: 2 inliers, and land/sea masking did not rescue it. Modern renderings match; antique engraving does not, yet.
4

Match

Matching

EXPERIMENTAL VERSION

This tool is an experiment. Please read this before you use it.

ABOUT, AND WHO MADE THE PARTS

Free while it is a prototype. Everything here runs on your own machine, so there is no server cost to pass on. A paid tier is planned for the things that cannot work that way — larger maps, batches, sharper reference imagery and higher-order transforms for scans with paper distortion. Nothing you can do today will move behind it.

A prototype means a prototype: check the result before you rely on it. The fit is an affine, which cannot represent paper distortion or a projection change.

DATA

Reference imagery Copernicus Sentinel-2 L2A, © ESA. Free and open, commercial use permitted.
Imagery catalogue Earth Search by Element 84, over AWS Open Data.
Map rendering © OpenStreetMap contributors, ODbL. Tiles from the OSMF, whose usage policy rules out production traffic — a hosted version will render its own.
Place search Nominatim, OpenStreetMap Foundation. Non-commercial terms; a paid geocoder replaces it.

METHOD

Feature detection SuperPoint — DeTone, Malisiewicz & Rabinovich, Magic Leap, 2018.
Feature matching LightGlue — Lindenberger, Sarlin & Pollefeys, ETH Zürich, ICCV 2023.
Fit Affine by RANSAC, refined by least squares on the inliers.

SOFTWARE

onnxruntime-web (Microsoft, MIT) runs the models on WebGPU · geotiff.js (MIT) reads TIFF and the Sentinel-2 COGs · openjpeg via @cornerstonejs (BSD) reads JPEG 2000 · pdf.js (Mozilla, Apache 2.0) renders PDF · proj4js (MIT) converts coordinates · Leaflet (BSD) draws the picker.

The models were exported to ONNX for this tool; the export script and its notes are part of the project.