Image Matching WebUI (IMCUI)
efficiently matches image pairs using multiple famous image matching algorithms. The tool features a Graphical User Interface (GUI) designed using gradio. You can effortlessly select two images and a matching algorithm and obtain a precise matching result.
Note: the images source can be either local images or webcam images.
Here is a demo of the tool:
imw.mp4
The tool currently supports various popular image matching algorithms, namely:
Algorithm | Supported | Conference/Journal | Year | GitHub Link |
---|---|---|---|---|
MINIMA | β | ARXIV | 2024 | Link |
XoFTR | β | CVPR | 2024 | Link |
EfficientLoFTR | β | CVPR | 2024 | Link |
MASt3R | β | CVPR | 2024 | Link |
DUSt3R | β | CVPR | 2024 | Link |
OmniGlue | β | CVPR | 2024 | Link |
XFeat | β | CVPR | 2024 | Link |
RoMa | β | CVPR | 2024 | Link |
DeDoDe | β | 3DV | 2024 | Link |
Mickey | β | CVPR | 2024 | Link |
GIM | β | ICLR | 2024 | Link |
ALIKED | β | ICCV | 2023 | Link |
LightGlue | β | ICCV | 2023 | Link |
DarkFeat | β | AAAI | 2023 | Link |
SFD2 | β | CVPR | 2023 | Link |
IMP | β | CVPR | 2023 | Link |
ASTR | β | CVPR | 2023 | Link |
SEM | β | CVPR | 2023 | Link |
DeepLSD | β | CVPR | 2023 | Link |
GlueStick | β | ICCV | 2023 | Link |
ConvMatch | β | AAAI | 2023 | Link |
LoFTR | β | CVPR | 2021 | Link |
SOLD2 | β | CVPR | 2021 | Link |
LineTR | β | RA-L | 2021 | Link |
DKM | β | CVPR | 2023 | Link |
NCMNet | β | CVPR | 2023 | Link |
TopicFM | β | AAAI | 2023 | Link |
AspanFormer | β | ECCV | 2022 | Link |
LANet | β | ACCV | 2022 | Link |
LISRD | β | ECCV | 2022 | Link |
REKD | β | CVPR | 2022 | Link |
CoTR | β | ICCV | 2021 | Link |
ALIKE | β | TMM | 2022 | Link |
RoRD | β | IROS | 2021 | Link |
SGMNet | β | ICCV | 2021 | Link |
SuperPoint | β | CVPRW | 2018 | Link |
SuperGlue | β | CVPR | 2020 | Link |
D2Net | β | CVPR | 2019 | Link |
R2D2 | β | NeurIPS | 2019 | Link |
DISK | β | NeurIPS | 2020 | Link |
Key.Net | β | ICCV | 2019 | Link |
OANet | β | ICCV | 2019 | Link |
SOSNet | β | CVPR | 2019 | Link |
HardNet | β | NeurIPS | 2017 | Link |
SIFT | β | IJCV | 2004 | Link |
or deploy it locally following the instructions below.
Update: now support install from pip, just run:
pip install imcui
git clone --recursive https://github.com/Vincentqyw/image-matching-webui.git
cd image-matching-webui
conda env create -f environment.yaml
conda activate imw
pip install -e .
or using docker:
docker pull vincentqin/image-matching-webui:latest
docker run -it -p 7860:7860 vincentqin/image-matching-webui:latest python app.py --server_name "0.0.0.0" --server_port=7860
Deploy to Railway, setting up a Custom Start Command
in Deploy
section:
python -m imcui.api.server
python app.py --config ./config/config.yaml
then open http://localhost:7860 in your browser.
I provide an example to add local feature in imcui/hloc/extractors/example.py. Then add feature settings in confs
in file imcui/hloc/extract_features.py. Last step is adding some settings to matcher_zoo
in file imcui/ui/config.yaml.
IMCUI hosts all models on Huggingface. You can upload your model to Huggingface and add it to the Realcat/imcui_checkpoints repository.
External contributions are very much welcome. Please follow the PEP8 style guidelines using a linter like flake8. This is a non-exhaustive list of features that might be valuable additions:
- support pip install command
- add CPU CI
- add webcam support
- add line feature matching algorithms
- example to add a new feature extractor / matcher
- ransac to filter outliers
- add rotation images options before matching
- support export matches to colmap (#issue 6)
- add config file to set default parameters
- dynamically load models and reduce GPU overload
Adding local features / matchers as submodules is very easy. For example, to add the GlueStick:
git submodule add https://github.com/cvg/GlueStick.git imcui/third_party/GlueStick
If remote submodule repositories are updated, don't forget to pull submodules with:
git submodule update --init --recursive # init and download
git submodule update --remote # update
if you only want to update one submodule, use git submodule update --remote imcui/third_party/GlueStick
.
To format code before committing, run:
pre-commit run -a # Auto-checks and fixes
This code is built based on Hierarchical-Localization. We express our gratitude to the authors for their valuable source code.