Skip to main content

Image Matching Models (IMM)

A unified API for quickly and easily trying 50+ (and growing!) image matching models.

Open In Colab Model on HF

Jump to: Install | Use | Models | Add a Model / Contributing | Acknowledgements | Cite

Matching Examples

Compare matching models across various scenes. For example, we show SIFT-LightGlue and LoFTR matches on pairs:

(1) outdoor, (2) indoor, (3) satellite remote sensing, (4) paintings, (5) a false positive, and (6) spherical.

SIFT-LightGlue

LoFTR

Extraction Examples

You can also extract keypoints and associated descriptors.

SIFT and DeDoDe

Install

IMM can be installed directly from PyPi using pip or uv (faster)

pip install image-matching-models
# or
uv pip install image-matching-models

or, for development, clone this git repo and install with:

# Clone recursively
git clone --recursive https://github.com/gmberton/image-matching-models
cd image-matching-models

# install packages
pip install .
# or, if you want an editable install for dev work
pip install -e . 

Some models require additional optional dependencies which are not included in the default list, like torch-geometric (required by SphereGlue) and tensorflow (required by OmniGlue). To install these, use

pip install .[all]
# or 
uv pip install ".[all]"

Use

You can use any of the over 50 matchers simply like this. All model weights are automatically downloaded by the IMM.

Python API

from imm import get_matcher
from imm.viz import plot_matches, plot_kpts

# Choose any of the 50+ matchers listed below
matcher = get_matcher("superpoint-lightglue", device="cuda")
img_size = 512  # optional

img0 = matcher.load_image("assets/example_pairs/outdoor/montmartre_close.jpg", resize=img_size)
img1 = matcher.load_image("assets/example_pairs/outdoor/montmartre_far.jpg", resize=img_size)

result = matcher(img0, img1)
# result.keys() = ["num_inliers", "H", "all_kpts0", "all_kpts1", "all_desc0", "all_desc1", "matched_kpts0", "matched_kpts1", "inlier_kpts0", "inlier_kpts1"]

# This will plot visualizations for matches as shown in the figures above
plot_matches(img0, img1, result, save_path="plot_matches.png")

# Or you can extract and visualize keypoints as easily as
result = matcher.extract(img0)
# result.keys() = ["all_kpts0", "all_desc0"]
plot_kpts(img0, result, save_path="plot_kpts.png")

Command Line Interface / Standalone Scripts

You can also run matching or extraction as standalone scripts, to get the same results as above.

Matching:

# if you cloned this repo, imm_match.py is available, else see CLI below
python imm_match.py --matcher superpoint-lightglue --out-dir outputs/superpoint-lightglue --input assets/example_pairs/outdoor/montmartre_close.jpg assets/example_pairs/outdoor/montmartre_far.jpg
# or
uv run imm_match.py --matcher superpoint-lightglue --out-dir outputs/superpoint-lightglue --input assets/example_pairs/outdoor/montmartre_close.jpg assets/example_pairs/outdoor/montmartre_far.jpg

From any location where an python enviroment with IMM installed is active, you can also run

# for PyPi install, use CLI entry point
imm-match --matcher superpoint-lightglue --out-dir outputs/superpoint-lightglue --input path/to/img0 --input path/to/img2

Keypoints extraction:

# if you cloned this repo, imm_extract.py is available, else see CLI below
python imm_extract.py --matcher superpoint-lightglue --out-dir outputs/superpoint-lightglue --input assets/example_pairs/outdoor/montmartre_close.jpg
# or
uv run imm_extract.py --matcher superpoint-lightglue --out-dir outputs/superpoint-lightglue --input assets/example_pairs/outdoor/montmartre_close.jpg

From any location where an python enviroment with IMM installed is active, you can also run

# for PyPi install, use CLI entry point
imm-extract --matcher superpoint-lightglue --out-dir outputs/superpoint-lightglue --input path/to/img0

These scripts can take as input images, folders with multiple images (or multiple pairs of images), or files with pairs of images paths. To see all possible parameters run

python imm_match.py -h
# or
python imm_extract.py -h

Available Models

We support the following methods:

Dense: roma, tiny-roma, duster, master, minima-roma, ufm

Semi-dense: loftr, eloftr, se2loftr, xoftr, minima-loftr, aspanformer, matchformer, xfeat-star, xfeat-star-steerers[-perm/-learned], edm, rdd-star, topicfm[-plus]

Sparse: [sift, superpoint, disk, aliked, dedode, doghardnet, gim, xfeat]-lightglue, dedode, steerers, affine-steerers, xfeat-steerers[-perm/learned], dedode-kornia, [sift, orb, doghardnet]-nn, patch2pix, superglue, r2d2, d2net, gim-dkm, xfeat, omniglue, [dedode, xfeat, aliked]-subpx, [sift, superpoint]-sphereglue, minima-superpoint-lightglue, liftfeat, rdd-[sparse,lightglue, aliked], ripe, lisrd

See Model Details to see runtimes, supported devices, and source of each model.

Adding a new method

See CONTRIBUTING.md for details. We follow the 1st principle of PyTorch: Usability over Performance

Acknowledgements

Special thanks to the authors of all models included in this repo (links in Model Details), and to authors of other libraries we wrap like the Image Matching Toolbox and Kornia.

Cite

This repo was created as part of the EarthMatch paper. Please cite EarthMatch if this repo is helpful to you!

@InProceedings{Berton_2024_EarthMatch,
    author    = {Berton, Gabriele and Goletto, Gabriele and Trivigno, Gabriele and Stoken, Alex and Caputo, Barbara and Masone, Carlo},
    title     = {EarthMatch: Iterative Coregistration for Fine-grained Localization of Astronaut Photography},
    booktitle = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR) Workshops},
    month     = {June},
    year      = {2024},
}

Metadata

Release files for image-matching-models 1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for image-matching-models 1.1.0
File Size Uploaded
image_matching_models-1.1.0.tar.gz 29.3 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for image-matching-models 1.1.0
File Interpreter ABI Platform
image_matching_models-1.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 59.7 MB

Release files / image_matching_models-1.1.0.tar.gz

Download URL image_matching_models-1.1.0.tar.gz
Size 29.3 MB
Tags Source
SHA-256 checksum
How to use checksums
d2fa7112b8fe86bd7a69c0b8e6a76f8fee105c79b76abe6a9828c375c023982b
BLAKE2b-256 checksum
How to use checksums
7151d8458f5d8b5327a26245316e3aa112a1ca0bba27d830fb5cff677c4a0e0e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.11

Release files / image_matching_models-1.1.0-py3-none-any.whl

Download URL image_matching_models-1.1.0-py3-none-any.whl
Size 30.4 MB
Tags Python 3
SHA-256 checksum
How to use checksums
48503a972801714afc9b477e6819b06e40ec62e09afc74b34916d0335e1d2bd4
BLAKE2b-256 checksum
How to use checksums
16a20030a3fe6bdda13bb435d2bc66a6d62710ecb4f50a6a36d2bda06964de4a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.11

Release history Release notifications | RSS feed

This release

1.1.0 This release

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page