Skip to main content

Easily test and apply pairwise image matching models

Project description

Image Matching Models (IMM)

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

Open In Colab

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 and install packages:
```bash
git clone --recursive https://github.com/gmberton/image-matching-models
cd image-matching-models

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 matching import get_matcher
from matching.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},
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

image_matching_models-1.0.0.tar.gz (2.3 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

image_matching_models-1.0.0-py3-none-any.whl (3.3 MB view details)

Uploaded Python 3

File details

Details for the file image_matching_models-1.0.0.tar.gz.

File metadata

  • Download URL: image_matching_models-1.0.0.tar.gz
  • Upload date:
  • Size: 2.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.11

File hashes

Hashes for image_matching_models-1.0.0.tar.gz
Algorithm Hash digest
SHA256 945df0381493d00673ae344b39c38f6bf877b9eb9d56730092f869847f49e491
MD5 ebb773631296f40c39db224547f89389
BLAKE2b-256 3cad15ad70ed504cf4832988b7526620a5b1cf648a3cf36fdf190e26143f1577

See more details on using hashes here.

File details

Details for the file image_matching_models-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for image_matching_models-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e1c506975abf823d1ac2d6a4d5ef65e222cdb4dc26b1e02b1a156daf5c5be68a
MD5 57fd98b832300e2541a9703caa0cfc02
BLAKE2b-256 b4c9d3a1c8e5a7871aa4f42f20401576c93ed369953cf36195f61e66b66b3f5e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page