web-dev-qa-db-fra.com

Existe-t-il des alternatives rapides à SURF et SIFT pour l'extraction de caractéristiques invariantes d'échelle?

SURF est breveté, tout comme SIFT. ORB et BRIEF ne sont pas brevetés, mais leurs caractéristiques ne sont pas invariables à l'échelle, ce qui limite sérieusement leur utilité dans des scénarios complexes.

Existe-t-il des extracteurs de fonctionnalités qui peuvent extraire des fonctionnalités invariables à l'échelle aussi rapidement que SURF et qui ne sont pas aussi strictement brevetés que SURF et SIFT?

32
Diego

Bien que vous choisissiez déjà BRISK, vous pourriez trouver MONSTRE intéressant. L'auteur prétend avoir de meilleurs résultats que BRISK et ORB. Je dois également ajouter que l'ORB est invariable à l'échelle mais a quelques problèmes dans ce domaine. Donc je le recommanderais quand même à quelqu'un pour l'essayer.

Le code source FREAK est compatible avec OpenCV (combien il est facile de les fusionner je ne sais pas) et l'auteur travaille à le soumettre au projet OpenCV.

MODIFIER:

FREAK fait maintenant partie des détecteurs/descripteurs de fonctionnalités ouvertes.

Vous pouvez lire ici plus sur les différences entre plusieurs détecteurs/extracteurs de fonctionnalités, et aussi une série de benchmarks qui inclut FREAK et d'autres populaires.

30
Rui Marques

FREAK est censé être le extracteur de descripteur invariant d'échelle et de rotation le plus rapide , il est open source et vous pouvez l'utiliser facilement car il est implémenté dans OpenCV. Vous avez besoin d'un matcher binaire qui utilise la distance de Hamming, comme le BruteForceMatcher.

Ici, vous avez un exemple sur la façon de l'utiliser, facilement remplaçable par le descripteur SIFT.

12
Jav_Rock

J'ai fini par utiliser Brisk , qui est un détecteur de fonctionnalités avec des performances comparables à SURF mais sous licence BSD. De plus, il a une implémentation C++ open source très agréable qui se connecte facilement au framework OpenCV FeatureDetector, c'est donc comme 2 lignes choisissant d'utiliser Brisk sur SURF dans votre code.

9
Diego

Vous pouvez essayer histogramme multi-échelle de dégradés orientés . Il ne sera pas totalement invariable à l'échelle, mais si vos données sont limitées par un ensemble raisonnable de limites d'échelle (souvent le cas dans la pratique), cela peut probablement fonctionner pour vous.

Une autre approche, dépendant totalement de l'application que vous envisagez, consisterait à utiliser poselets , même s'ils sont construits au-dessus d'un descripteur non invariable à l'échelle comme l'histogramme simple du gradient orienté ou les modèles d'apparence . Si les annotations dans vos données d'entraînement incluent des exemples de différents éléments pour la détection à différentes échelles, la distance de style Procrustes utilisée dans Poselets pour la formation doit prendre en charge beaucoup d'invariance d'échelle. Cela peut ne pas être satisfaisant si votre application principale n'est pas la détection localisée de pièces.

Soit dit en passant, je pense qu'il est plutôt regrettable que SIFT et SURF aient pu être brevetées de cette façon, étant donné qu'elles étaient (au moins en partie) financées par les contribuables grâce à des subventions.

6
ely

Vous pouvez essayer KAZE, il est censé être plus rapide et plus précis (les vidéos semblent fantaisistes, mais je n'ai pas encore pu l'essayer moi-même). Il existe également une version accélérée de celui-ci.

Pablo F. Alcantarilla, Adrien Bartoli et Andrew J. Davison, " KAZE Features ", In European Conference on Computer Vision (ECCV). Fiorenze *, Italie. Octobre 2012.

Pablo F. Alcantarilla, Jesús Nuevo et Adrien Bartoli, " Fast Explicit Diffusion for Accelerated Features in Nonlinear Scale Spaces ", In British Machine Vision Conference (BMVC). Bristol, Royaume-Uni. septembre 2013

Les codes sources, vidéos et plus peuvent être trouvés sur le site Web de l'auteur .

* Firenze

4
the swine

FREAK est maintenant inclus dans OpenCV 2.4.2, vous pouvez l'utiliser facilement :-)

3
Kikohs