A Toolbox for Image Feature Matching and Evaluations

Overview

A Toolbox for Image Feature Matching and Evaluations

In this repository, we provide easy interfaces for several exisiting SotA methods to match image feature correspondences between image pairs. We provide scripts to evaluate their predicted correspondences on common benchmarks for the tasks of image matching, homography estimation and visual localization.

Notice

  • This repository is expected to be actively maintained (at least before I graduate šŸ¤£ šŸ¤£ ) and gradually (slowly) grow for new features of interest.
  • Suggestions regarding how to improve this repo, such as adding new SotA image matching methods or new benchmark evaluations, are welcome šŸ‘ .

Regarding Patch2Pix

With this reprository, one can reproduce the tables reported in our paper accepted at CVPR2021: Patch2Pix: Epipolar-Guided Pixel-Level Correspondences[pdf]. Check our patch2pix repository for its training code.

Disclaimer

  • All of the supported methods and evaluations are not implemented from scratch by us. Instead, we modularize their original code to define unified interfaces.
  • If you are using the results of a method, remember to cite the corresponding paper.
  • All credits of the implemetation of those methods belong to their authors .

Supported Methods & Evaluations

Keypoint-based Matching:

Keypoint/Detection-free Matching:

Supported Evaluations :

  • Image feature matching on HPatches
  • Homography estimation on HPatches
  • Visual localization benchmarks:
    • InLoc
    • Aachen (original + v1.1)

Repository Overview

The repository is structured as follows:

  • configs/: Each method has its own yaml (.yml) file to configure its testing parameters.
  • data/: All datasets should be placed under this folder following our instructions described in Data Preparation.
  • immatch/: It contains implementations of method wrappers and evaluation interfaces.
  • outputs/: All evaluation results are supposed to be saved here. One folder per benchmark.
  • pretrained/: It contains the pretrained models of the supported methods.
  • third_party/: The real implementation of the supported methods from their original repositories, as git submodules.
  • notebooks/: It contains jupyter notebooks that show example codes to quickly access the methods implemented in this repo.
  • docs/: It contains separate documentation about installation and evaluation. To keep a clean face of this repo :).

šŸ‘‰ Refer to install.md for details about installation.

šŸ‘‰ Refer to evaluation.md for details about evaluation on benchmarks.

Example Code for Quick Testing

To use a specific method to perform the matching task, you simply need to do:

  • Initialize a matcher using its config file. See examples of config yaml files under configs folder, eg., patch2pix.yml. Each config file contains multiple sections, each section corresponds to one setting. Here, we use the setting (tagged by 'example') for testing on example image pairs.
  • Perform matching
import immatch
import yaml
from immatch.utils import plot_matches

# Initialize model
with open('configs/patch2pix.yml, 'r') as f:
    args = yaml.load(f, Loader=yaml.FullLoader)['example']
model = immatch.__dict__[args['class']](args)
matcher = lambda im1, im2: model.match_pairs(im1, im2)

# Specify the image pair
im1 = 'third_party/patch2pix/examples/images/pair_2/1.jpg'
im2 = 'third_party/patch2pix/examples/images/pair_2/2.jpg'

# Match and visualize
matches, _, _, _ = matcher(im1, im2)    
plot_matches(im1, im2, matches, radius=2, lines=True)

example matches

šŸ‘‰ Try out the code using example notebook .

TODOs & Updates

- [x] Add LoFTR method (2021-7-8)
- [x] Add simple match visualization (2021-7-8)
- [ ] Localize on RobotCar 
Owner
Qunjie Zhou
PhD Candidate at the Dynamic Vision and Learning Group.
Qunjie Zhou
A simple Streamlit Component to compare images in Streamlit apps. It integrates Knightlab's JuxtaposeJS

streamlit-image-juxtapose A simple Streamlit Component to compare images in Streamlit apps using Knightlab's JuxtaposeJS. The images are saved to the

Robin 30 Dec 31, 2022
Labelme is a graphical image annotation tool, It is written in Python and uses Qt for its graphical interface

Image Polygonal Annotation with Python (polygon, rectangle, circle, line, point and image-level flag annotation).

Kentaro Wada 9.6k Jan 09, 2023
A Blender add-on to create interesting meshes using symmetry

Procedural Symmetries This Blender add-on automates the process of iteratively applying a set of reflection planes to a base mesh. The result will con

1 Dec 29, 2021
A tool and a library for SVG path data transformations.

SVG path data transformation toolkit A tool and a library for SVG path data transformations. Currently it supports a translation and a scaling. Usage

Igor Mikushkin 2 Mar 07, 2022
Generate meme GIFs in which an image you choose can be viewed by the user only after they wait a whole hour.

Generate meme GIFs in which an image you choose can be viewed by the user only after they wait a whole hour.

Feliks Maak 1 Jan 31, 2022
The friendly PIL fork (Python Imaging Library)

Pillow Python Imaging Library (Fork) Pillow is the friendly PIL fork by Alex Clark and Contributors. PIL is the Python Imaging Library by Fredrik Lund

Pillow 10.4k Dec 31, 2022
A Python Script to convert Normal PNG Image to Apple iDOT PNG Image.

idot-png-encoder A Python Script to convert Normal PNG Image to Apple iDOT PNG Image (Multi-threaded Decoding PNG). Usage idotpngencoder.py -i inputf

Lrdcq 2 Feb 17, 2022
Utilities for SteamVR on Linux

This project contains scripts to improve the functionally of SteamVR on Linux:

86 Dec 29, 2022
Glyph-graph - A simple, yet versatile, package for graphing equations on a 2-dimensional text canvas

Glyth Graph Revision for 0.01 A simple, yet versatile, package for graphing equations on a 2-dimensional text canvas List of contents: Brief Introduct

Ivan 2 Oct 21, 2022
impy is an all-in-one image analysis library, equipped with parallel processing, GPU support, GUI based tools and so on.

impy is All You Need in Image Analysis impy is an all-in-one image analysis library, equipped with parallel processing, GPU support, GUI based tools a

24 Dec 20, 2022
An executor that wraps 3D mesh models and encodes 3D content documents to d-dimension vector.

3D Mesh Encoder An Executor that receives Documents containing point sets data in its blob attribute, with shape (N, 3) and encodes it to embeddings o

Jina AI 11 Dec 14, 2022
Extract the temperature data of each wire from the thermal imager raw data.

Wire-Tempurature-Detection Extract the temperature data of each wire from the thermal imager raw data. The motivation of this computer vision project

JohanAckerman 1 Nov 03, 2021
PyGram Instagram-like image filters.

PyGram Instagram-like image filters. Usage First, import the client: from filters import * Instanciate a filter and apply it: f = Nashville("image.jp

Ajay Kumar Nagaraj 102 Feb 21, 2022
A ray tracing render implemented using Taichi language.

A ray tracing render implemented using Taichi language.

Mingrui Zhang 45 Oct 23, 2022
šŸ›¹ Turn an SVG into an STL for stencil creation purposes

svg2stl This repository provides a script which takes as input an SVG such as this one: It outputs an STL file like this one: You can also see an inte

Max Halford 3 Dec 29, 2021
A simple programme for converting url into a qr code (.png file)

QrTk A simple lightweight programme for converting url into a qr code (.png file) Pre-Requisites Before installing the programme , you need to run the

Juss Patel 4 Nov 08, 2021
Python Image Optimizer Script

Image-Optimizer Download and Install git clone https://github.com/stefankumpan/Image-Optimizer-Script.git cd Image-Optimizer-Script pip install -r req

Stefan Kumpan 0 Jul 15, 2021
PyLibTiff - a wrapper to the libtiff library to Python using ctypes

PyLibTiff is a package that provides: a wrapper to the libtiff library to Python using ctypes. a pure Python module for reading and writing TIFF and L

Pearu Peterson 105 Dec 21, 2022
ć€ččŽ‰å›¾ē‰‡ē®—ę³•ć€‘é«˜ęŸå›¾åƒåŽ‹ē¼©ē®—ę³•ļ¼ļ¼Ÿ

ć€ččŽ‰å›¾ē‰‡ē®—ę³•ć€‘é«˜ęŸå›¾åƒåŽ‹ē¼©ē®—ę³•ļ¼ļ¼Ÿ ęˆ‘åˆå‘ę˜Žå‡ŗꖰē®—ę³•äŗ†ļ¼ čæ™ę¬”ęˆ‘å‘ę˜Žēš„ę˜Æę–°åž‹é«˜ęŸå›¾åƒåŽ‹ē¼©ē®—ę³•ā€”ā€”ččŽ‰å›¾ē‰‡ē®—ę³•ļ¼äøŗ什么ę˜ÆččŽ‰å›¾ē‰‡ļ¼Œčæ™ę˜Æ因äøŗ它ę˜Æä½æåŠØē”Øę³•ļ¼Œč®©å›¾ē‰‡å˜å°ę‰€ä»„ę˜ÆččŽ‰å›¾ē‰‡ļ¼Œå¤§å®¶äø€å®šč¦å­¦å„½čÆ­ę–‡å“¦ļ¼ 压ē¼©ę•ˆęžœ å¤Ŗē„žå„‡äŗ†ļ¼åŽ‹ē¼©ēŽ‡ē«Ÿē„¶é«˜č¾¾99.97%ļ¼ äøŽåøøč§åŽ‹ē¼©ē®—ę³•åƹęƔ åœØ图ē‰‡ęœ€ē»ˆå¤§å°äøŗ1KBēš„ęƒ…å†µ

黄巍 49 Oct 17, 2022
Blender addon to generate better building models from satellite imagery.

Blender addon to generate better building models from satellite imagery.

Ivan Ereshchenko 24 Apr 14, 2022