Local Features and Image Matching
=================================
This module provides a set of tools to detect and describe local features in images. The module is designed to be
compatible with the PyTorch ecosystem and provides a set of models and differentiable operations to be used in deep learning
pipelines.
The module is divided into three main components:
1. **Detectors**: These are models that are used to detect keypoints in images. The module provides a set of detectors that
are based on different algorithms such as Harris, GFTT, Hessian, and DoG. The module also provides a set of detectors that
are based on deep learning models such as KeyNet, DISK and DeDoDe.
2. **Descriptors**: These are models that are used to describe the local features detected by the detectors. The module
provides a set of descriptors that are based on different algorithms such as SIFT, HardNet, and TFeat. The module also
provides a set of descriptors that are based on deep learning models such as HyNet, SOSNet, and LAFDescriptor.
3. **Matching**: These are models that are used to match the local features detected and described by the detectors and
descriptors. The module provides a set of matching algorithms such as nearest neighbor, mutual nearest neighbor, and
geometrically aware matching. Besides this, the module also contains AdaLAM hancrafted and LightGlue learned matchers.
Finally, the module provides LoFTR - detector-less semi-dense image matching model.
Besides this, the module also provides a set of tools to work with local affine frames (LAF) such as extracting patches,
normalizing, denormalizing, and rotating LAFs. The module also provides a set of models to estimate the affine shape of
LAFs such as LAFAffineShapeEstimator and PatchAffineShapeEstimator. The module also provides a set of models to estimate
the orientation of LAFs such as OriNet and LAFOrienter.
Finally, kind of addition, module contains a DeFMO model for the task of video frame interpolation, specifically high speed objects debluring.
Benchmarks and recommendations
--------------------------------
The following table shows the performance of the different models on `IMC2021 benchmark `_ .
.. list-table:: IMC2021 Benchmark, 8000 features
:widths: 50 50 50 50 50
:header-rows: 1
* - Feature name
- Stereo mAA @ 10 degrees, PhotoTourism.
- Multiview mAA @ 10 degrees, PhotoTourism.
- Stereo mAA @ 10 degrees, PragueParks.
- Multiview mAA @ 10 degrees, PragueParks.
* - DISK-LightGlue
- 0.6184
- 0.7741
- 0.6116
- 0.4988
* - LoFTR
- 0.6090
- 0.7609
- 0.7546
- 0.4711
* - OpenCV-DoG-HardNet-LightGlue
- 0.5850
- 0.7587
- 0.6525
- 0.4973
* - OpenCV-DoG-AffNet-HardNet8-AdaLAM
- 0.5502
- 0.7522
- 0.5998
- 0.4712
* - Upright SIFT (OpenCV)
- 0.5122
- 0.6849
- 0.6060
- 0.4439
.. list-table:: IMC2021 Benchmark, 2048 features
:widths: 50 50 50 50 50
:header-rows: 1
* - Feature name
- Stereo mAA @ 10 degrees, PhotoTourism.
- Multiview mAA @ 10 degrees, PhotoTourism.
- Stereo mAA @ 10 degrees, PragueParks.
- Multiview mAA @ 10 degrees, PragueParks.
* - DISK-LightGlue
- 0.5720
- 0.7543
- 0.5099
- 0.4565
* - OpenCV-DoG-HardNet-LightGlue
- 0.3954
- 0.6272
- 0.5157
- 0.4456
* - Upright SIFT (OpenCV)
- 0.3827
- 0.5545
- 0.4136
- 0.3607
LoFTR works the best for indoor scenes, whereas DISK and DeDoDe + LightGlue work the best for outdoor scenes.
The DeDoDe and speed benchmarks are coming soon.
For some other use-cases you may want to use SIFT, or SIFT + HardNet + LightGlue, e.g. for remote sensing or medical imaging.
.. currentmodule:: kornia.feature
Detectors
---------
.. autofunction:: gftt_response
.. autofunction:: harris_response
.. autofunction:: hessian_response
.. autofunction:: dog_response
.. autofunction:: dog_response_single
.. autoclass:: BlobHessian
.. autoclass:: CornerGFTT
.. autoclass:: CornerHarris
.. autoclass:: BlobDoG
.. autoclass:: BlobDoGSingle
.. autoclass:: KeyNet
.. autoclass:: MultiResolutionDetector
:members: forward, remove_borders, detect_features_on_single_level, detect
.. autoclass:: ScaleSpaceDetector
:members: forward
.. autoclass:: KeyNetDetector
:members: forward
Descriptors
-----------
.. autoclass:: DenseSIFTDescriptor
.. autoclass:: SIFTDescriptor
.. autoclass:: MKDDescriptor
.. autoclass:: HardNet
.. autoclass:: HardNet8
.. autoclass:: HyNet
.. autoclass:: TFeat
.. autoclass:: SOSNet
.. autoclass:: LAFDescriptor
:members: forward
.. autoclass:: SOLD2
:members: forward
.. autofunction:: get_laf_descriptors
Local Features (Detector and Descriptors together)
---------------------------------------------------
.. autoclass:: LocalFeature
:members: forward
.. autoclass:: SOLD2_detector
:members: forward
.. autoclass:: DeDoDe
:members: forward, from_pretrained, describe, detect
.. autoclass:: DISK
:members: forward, from_pretrained, heatmap_and_dense_descriptors
.. autoclass:: DISKFeatures
:undoc-members:
:members: x, y, to
.. autoclass:: SIFTFeature
:members: forward
.. autoclass:: SIFTFeatureScaleSpace
:members: forward
.. autoclass:: GFTTAffNetHardNet
:members: forward
.. autoclass::HesAffNetHardNet
:members: forward
.. autoclass:: KeyNetAffNetHardNet
:members: forward
.. autoclass:: KeyNetHardNet
:members: forward
Matching
--------
.. autofunction:: match_nn
.. autofunction:: match_mnn
.. autofunction:: match_snn
.. autofunction:: match_smnn
.. autofunction:: match_fginn
.. autofunction:: match_adalam
.. autoclass:: DescriptorMatcher
:members: forward
.. autoclass:: GeometryAwareDescriptorMatcher
:members: forward
.. autoclass:: LocalFeatureMatcher
:members: forward
.. autoclass:: LightGlueMatcher
:members: forward
.. autoclass:: LightGlue
:members: forward
.. autoclass:: LoFTR
:members: forward
Interactive Demo
~~~~~~~~~~~~~~~~
.. raw:: html
.. autoclass:: OnnxLightGlue
:members: forward
Local Affine Frames (LAF)
-------------------------
.. autofunction:: extract_patches_from_pyramid
.. autofunction:: extract_patches_simple
.. autofunction:: normalize_laf
.. autofunction:: denormalize_laf
.. autofunction:: laf_to_boundary_points
.. autofunction:: ellipse_to_laf
.. autofunction:: make_upright
.. autofunction:: scale_laf
.. autofunction:: get_laf_scale
.. autofunction:: get_laf_center
.. autofunction:: rotate_laf
.. autofunction:: get_laf_orientation
.. autofunction:: set_laf_orientation
.. autofunction:: laf_from_center_scale_ori
.. autofunction:: laf_is_inside_image
.. autofunction:: laf_to_three_points
.. autofunction:: laf_from_three_points
.. autofunction:: KORNIA_CHECK_LAF
.. autofunction:: perspective_transform_lafs
.. autoclass:: PassLAF
:members: forward
.. autoclass:: PatchAffineShapeEstimator
:members: forward
.. autoclass:: LAFAffineShapeEstimator
:members: forward
.. autoclass:: LAFOrienter
:members: forward
.. autoclass:: PatchDominantGradientOrientation
:members: forward
.. autoclass:: OriNet
:members: forward
.. autoclass:: LAFAffNetShapeEstimator
:members: forward
Layers
------
.. autoclass:: FilterResponseNorm2d
.. autoclass:: TLU
Other
------
.. autoclass:: DeFMO
:members: forward