View  Edit  Attributes  History  Attach  Print  Search


ACCUEIL | DOCUMENTATION | STRATEGIES | TESTS


Librairie JavacvPro

Classe OpenCV : SURF : Principe de fonctionnement


Description

  • L'algorithme SURF ( Speeded Up Robust Feature ) est l'algorithme le plus puissant existant actuellement parmi les algorithmes de détection d'objet dans une scène par détection de concordances de points (Feature Description). Le taux de détection atteint 85% de réussite avec un bon paramétrage.
  • L'algorithme est annoncé invariant d'échelle et de rotation.
  • Cet algorithme permettra typiquement de détecter un objet dans une scène à partir d'une image en mémoire de cet objet.
  • Il s'agit d'un algorithme avancé que la librairie Javacvpro implémente de façon simplifiée en se basant sur les fonctions natives de la librairie OpenCV. La librairie javacvPro permet notamment la mémorisation d'une ou plusieurs images objets dans des buffers images qui pourront être de taille différente du buffer image principal.
  • Le grand intérêt ici, au prix d'une certaine puissance de calcul, est de permettre une détection et un suivi d'objet à partir d'une simple image de cet objet. Cette détection permettra de s'affranchir des problématiques de soustraction du fond, de segmentation, etc...
  • A titre indicatif, il sera ainsi possible de réaliser du suivi/reconnaissance d'objet sur un flux vidéo continu issu d'une webcam avec des débits de 10 fps en résolution 320x240.
  • Voir également :
  • Pour une vue d'ensemble des techniques de vision par ordinateur, voir : http://en.wikipedia.org/wiki/Feature_detection_%28computer_vision%29
  • L'algorithme SURF dérive de l'algorithme SIFT : http://fr.wikipedia.org/wiki/Scale-invariant_feature_transform

Principe d'utilisation de l'algorithme SURF natif

  • La mise en oeuvre de l'algorithme SURF natif passe par plusieurs étapes successives :
    • Détection de points-clés dans l'image objet et dans l'image scène. Les points clés associent dans un même objet les coordonnées du point, une taille, un angle et un octave.
    • Calcul d'un descripteur pour chaque point-clé de l'image objet et de l'image scène. Un descripteur est une valeur calculée sur 64 ou 128 éléments.
    • Détection des concordances entre les descripteurs des points-clé de l'image objet et de l'image scène. Chaque concordance (appelée DMatch) se caractérise par l'index du point objet, l'index du point scene correspondant et une grandeur "distance".

Les descripteurs présentent l'avantage d'être invariants à l'orientation et à la résolution de l'image, et peu sensibles à son exposition, à sa netteté ainsi qu'au point de vue 3D. Ils possèdent ainsi des propriétés similaires à celles des neurones du gyrus temporal inférieur utilisées en détection d'objet en vision primaire. (Source wikipédia)

Ensuite, on pourra :

  • sélectionner les concordances utiles significatives
  • analyser la transformation de perspective entre l'objet de départ et l'objet dans la scene
  • tracer le cadre entourant l'objet dans la scène ou tracer simplement le centre des points de concordances retenus.

Les fonctions JavacvPro disponibles

  • La librairie Javacvpro implémente toutes ces étapes de façon simplifiée au travers de fonctions accessibles depuis Processing et qui gèrent en interne l'ensemble de la "machinerie" opencv native permettant d'obtenir le résultat attendu. Les différentes fonctions disponibles permettent une mise en oeuvre "pas à pas" de l'algorithme SURF qui permet de contrôler efficacement chaque étape de la détection.
  • Ces mêmes fonctions disposent de formes simplifiées qui permettront à l'inverse une mise en oeuvre simplifiée en quelques lignes de l'algorithme de détection SURF.
  • La fonction initSURF() permet d'initialiser l'algorithme SURF, soit avec les paramètres par défaut, soit avec un paramétrage personnalisé.
  • La classe Keypoint représente un points-clé d'une image. Chaque point clé se caractérise par ses coordonnées, une taille, un angle et une valeur d'octave.
  • La fonction keypointsSURF renvoie les points-clés d'une image. Cette fonction permet la détection initiale des points-clés de l'image objet et de l'image scène. Le tableau de Keypoint obtenu pourra être affiché à l'aide de la fonction drawKeypoints.
  • La fonction detectMatchSURF détecte les correspondances entre les points-clés de l'image objet et de l'image scene (via les descripteurs utilisés en interne par la fonction). La fonction keypointsMatchSURF permettra de récupérer le tableau de Keypoint de chaque image objet et scene.
  • La fonction selectGoodMatchSURF sélectionne les correspondances utiles significatives parmi les correspondances renvoyées par la fonction detectMatchSURF. La fonction keypointsMatchSURF permettra de récupérer le tableau de Keypoint de chaque image objet et scene.
  • Chaque tableau de Keypoint obtenu avec keypointsMatchSURF ou keypointsGoodMatchSURF pourra ensuite être affiché au besoin à l'aide de la fonction drawKeypoints. La fonction drawLinesMatchSURF permet enfin de tracer simplement les lignes de correspondances entre l'image objet et l'image scene.
  • La fonction detectObjectIntoSceneSURF calcule la transformation de perspective entre l'image objet et l'image scene à partir des points-clés significatifs retenus. Cette fonction renvoie un tableau de 4 points correspondant au cadre de l'objet détecté dans la scene et qui pourra être tracé à l'aide de la fonction drawShape.
  • Enfin, la fonction keypointsToPoints permet de convertir un tableau de Keypoint en un tableau de Point. La fonction meanPoints calcule au besoin les coordonnées moyennes d'un groupe de point et renvoie le point correspondant, ce qui pourra être utiliser pour cible simplement l'objet dans la scène.
  • Voici en bleu les principales fonctions SURF de la librairie JavacvPro en parallèle du code OpenCV natif exécuté :

Commentaires utilisateurs

Aucun

Cette page est une création originale de Xavier HINAULT - Tous droits réservés - 2011