View  Edit  Attributes  History  Attach  Print  Search


ACCUEIL | DOCUMENTATION | STRATEGIES | TESTS

OpencvSURFkeypointsGoodMatchSURF

Main.OpencvSURFkeypointsGoodMatchSURF History

Hide minor edits - Show changes to output

Added lines 25-29:
public Keypoint[] keypointsGoodMatchSURF(
boolean modeIn, // fixe le type de points clés - false = object - true = scene
boolean debug // drapeau d'affichage des messages
)

Added lines 36-39:
keypointArray=opencv.keypointsGoodMatchSURF(
mode, // fixe le type de points clés - false = object - true = scene
debug // drapeau d'affichage des messages
)
Changed lines 46-47 from:
*
to:
* keypointArray : un tableau d'objet Keypoint
* boolean mode, : fixe le type de points clés - false = object - true = scene. Utiliser identifiant opencv.SCENE et opencv.OBJECT
* boolean debug : drapeau d'affichage des messages - affiche messages si true

Changed lines 52-53 from:
Aucune
to:
* Le tableau des points clés ayant une concordance. Les concordances sont symétriques entre l'image objet et l'image scene : le Keypoint d'index n du tableau renvoyé pour l'image objet a une correspondance avec le Keypoint d'index n du tableau renvoyé pour l'image scene.
Changed line 56 from:
*
to:
* Utilisée pour récupérer les points-clés des concordances entre l'image objet et l'image scene après appel de la fonction selectGoodMatchSURF().
Added line 14:
Added line 16:
Added line 18:
Changed lines 13-15 from:
*

* Voir également :
to:
* Cette fonction renvoie un tableau d'objets Keypoint des concordances de l'image objet ou de l'image scene. Elle peut être utilisée une fois que les correspondances auront été recherchées et mémorisées avec la fonction selectGoodMatchSURF().
* Les concordances sont symétriques entre l'image objet et l'image scene : le Keypoint d'index n du tableau renvoyé pour l'image objet a une correspondance avec le Keypoint d'index n du tableau renvoyé pour l'image scene.
* Les correspondances pourront être dessinées avec la fonction drawLinesMatchSURF().
* Voir également : keypointsSURF(), drawKeypoints(), detectMatchSURF(), keypointsMatchSURF(), drawLinesMatchSURF(), selectGoodMatchSURF(), keypointsGoodMatchSURF()
Added lines 1-280:
(:notitle:)
(:include HautPageReference:)\\
[[Main.LibrairieJavacvPro|Librairie JavacvPro]]

! Classe OpenCV : keypointsGoodMatchSURF()
----

%center%%width=400px%[[Path:/mes_images/javacvpro/javacvpro_exemple_SURF_detect_keypoints_GoodMatchSURF.png|Path:/mes_images/javacvpro/javacvpro_exemple_SURF_detect_keypoints_GoodMatchSURF.png]]


!! Description

*

* Voir également :

!! Déclaration source java

(:source lang=java :)

(:sourcend:)

!! Syntaxe

(:source lang=processing :)

(:sourcend:)


!! Paramètres

* opencv : un objet OpenCV déclaré avec le constructeur [[OpencvOpencv|OpenCV]].
*

!! Valeur renvoyée

Aucune

!! Utilisation type

*

!! Exemple


%center%%red% L'exemple complet suivant est à copier dans Processing et est exécutable immédiatement si vous êtes connectés à internet :


(:source lang=processing :)

// Programme d'exemple de la librairie javacvPro
// par X. HINAULT - decembre 2011
// Tous droits réservés - Licence GPLv3

// Exemple de détection et tracé des correspondances significatives
// calculées avec l'algorithme SURF
// entre une image objet et une image scene

import monclubelec.javacvPro.*; // importe la librairie javacvPro

import java.awt.*; // pour Objets Java Point, Rectangle, etc..

PImage imgObjet, imgScene; // déclare 2 objets PImage (conteneur image Processing)

String urlObjet="http://www.mon-club-elec.fr/mes_images/online/objet2.png"; // String contenant l'adresse internet de l'image à utiliser
String urlScene="http://www.mon-club-elec.fr/mes_images/online/scene2b.png"; // String contenant l'adresse internet de l'image à utiliser

//String urlObjet="http://www.mon-club-elec.fr/mes_images/online/pumaobjet.jpg"; // String contenant l'adresse internet de l'image à utiliser
//String urlScene="http://www.mon-club-elec.fr/mes_images/online/pumascene.jpg"; // String contenant l'adresse internet de l'image à utiliser

OpenCV opencv; // déclare un objet OpenCV principal

Keypoint[] keypointsObjetArray=null; // déclaration d'un tableau pour le stockage des points clés de l'objet
Keypoint[] keypointsSceneArray=null; // déclaration d'un tableau pour le stockage des points clés de la scene

Keypoint[] keypointsObjetMatchArray=null; // déclaration d'un tableau pour le stockage des points clés de concordance de l'objet
Keypoint[] keypointsSceneMatchArray=null; // déclaration d'un tableau pour le stockage des points clés de concordance de la scene

Keypoint[] keypointsObjetGoodMatchArray=null; // déclaration d'un tableau pour le stockage des points clés de concordance significatifs de l'objet
Keypoint[] keypointsSceneGoodMatchArray=null; // déclaration d'un tableau pour le stockage des points clés de concordance significatifs de la scene

void setup(){ // fonction d'initialisation exécutée 1 fois au démarrage

        //--- création objet Opencv principal
opencv = new OpenCV(this); // initialise objet OpenCV à partir du parent This

        // Remarque : l'image objet sera mémorisée dans le buffer Memory et l'image Scene dans le buffer principal
        // La librairie JavacvPro permet d'initialiser le buffer Memory et le buffer principal avec des tailles différentes
     
     
        //-- charge image objet utilisée ---
        imgObjet=loadImage(urlObjet,"png"); // crée un PImage contenant le fichier à partir adresse web
        //imgObjet=loadImage(urlObjet,"jpg"); // crée un PImage contenant le fichier à partir adresse web

        opencv.allocateMemory(imgObjet.width, imgObjet.height); // initialise les buffers Memory OpenCv à la taille de l'image Objet
       
        opencv.remember(imgObjet); // charge le PImage dans le buffer Memory OpenCV
        //opencv.copyToMemory(imgObjet); // charge le PImage dans le buffer OpenCV - idem
       
        //-- charge image scene utilisée ---
        imgScene=loadImage(urlScene,"png"); // crée un PImage contenant le fichier à partir adresse web
        //imgScene=loadImage(urlScene,"jpg"); // crée un PImage contenant le fichier à partir adresse web

        opencv.allocateBuffer(imgScene.width, imgScene.height); // initialise les buffers OpenCv à la taille de l'image Scene
       
        opencv.copy(imgScene); // charge le PImage dans le buffer OpenCV

       
        //--- initialise fenêtre Processing
        size (imgObjet.width+imgScene.width, opencv.height()*2); // crée une fenêtre Processing de la taille voulue
        smooth(); // activation lissage forme
       
        //--- affiche en double les images de départ ---       
        image(opencv.getMemory(),0,0); // affiche le buffer principal OpenCV dans la fenêtre Processing
        image(opencv.getMemory(),0,imgScene.height); // affiche le buffer principal OpenCV dans la fenêtre Processing

        image(opencv.getBuffer(),imgObjet.width,0); // affiche le buffer principal OpenCV dans la fenêtre Processing
        image(opencv.getBuffer(),imgObjet.width,imgScene.height); // affiche le buffer principal OpenCV dans la fenêtre Processing
       
        //----- initialisation SURF ----------
        //opencv.initSURF(); // initialisation par défaut
       
        opencv.initSURF ( // initialisation avec paramètres
500, //float hessianThreshold, // entre 300 et 500 - 400 par défaut
4, //int octaves, // 4 par défaut
6, //int nOctaveLayers, // 2 par défaut
false // boolean upright // false si prise en compte de l'orientation, true sinon = plus rapide 
);

        //--- détection des points clés de l'objet
        // le tableau de point clé va contenir les points clés calculés par l'algorithme SURF
       
        // détection des point-clé de l'objet
        keypointsObjetArray=opencv.keypointsSURF(opencv.Memory,opencv.OBJECT,true); // forme simplifiée utilisant paramètres par défaut
        //keypointsObjetArray=opencv.keypointsSURF(opencv.Memory, 0,imgScene.height,1,opencv.OBJECT, true, false); // forme avec coordonnées Ref pour tracé point natif si debug

        //--- dessin des points clés de l'objet à partir du tableau de points clés obtenu
       
        //opencv.drawKeypoints(keypointsObjetArray, true); // forme simplifiée utilisant paramètres par défaut

       
        opencv.drawKeypoints ( // forme complète fonction
keypointsObjetArray, //Keypoint[] keypointsIn,
0,imgScene.height,1,//int xRefIn, int yRefIn, float scaleIn,
                5, // int radius - utiliser -1 pour rayon des cercles = size des Keypoints
color(0,255,255), 1, //int colorStrokeIn, int strokeWeightIn,
true,color(0,0,255),//boolean fillIn, int colorFillIn,
false //boolean debug
); // fin draw keypoints

        //--- détection des points clés de la scène
        keypointsSceneArray=opencv.keypointsSURF(opencv.Buffer,opencv.SCENE,true); // forme simplifiée
        //keypointsSceneArray=opencv.keypointsSURF(opencv.Buffer, imgObjet.width,imgScene.height,1, opencv.SCENE,true, false); // forme avec coordonnées Ref pour tracé point natif si debug
       
        //--- dessin des points clés de la scene à partir du tableau de points clés obtenu
       
        //opencv.drawKeypoints(keypointsSceneArray, true); // forme simplifiée utilisant paramètres par défaut

       
        opencv.drawKeypoints ( // forme complète fonction
keypointsSceneArray, //Keypoint[] keypointsIn,
imgObjet.width,imgScene.height,1,//int xRefIn, int yRefIn, float scaleIn,
                5, // int radius - utiliser -1 pour rayon des cercles = size des Keypoints
color(255,255,0), 1, //int colorStrokeIn, int strokeWeightIn,
true,color(255,0,0),//boolean fillIn, int colorFillIn,
false //boolean debug
); // fin draw keypoints


      //-------- recherche et tracé des concordances entre les points-clés ---------------
     
      opencv.detectMatchSURF(
          opencv.Memory, // iplImgObject, // image objet au format natif opencv iplimage
          0,imgScene.height, // xRefObject, yRefObject, // coordonnées de référence de l'image objet - utilisées si drawDebug=true
          opencv.Buffer, // iplImgScene, // image scene au format natif opencv iplimage
          imgObjet.width,imgScene.height, // xRefScene, yRefScene, // coordonnées du coin sup gauche de l'image scene - utilisées si drawDebug=true
          false, // debug, // drapeau aiichage des messages
          false // drawDebug // drapeau affichage dessin avec valeur native opencv
          );
 
      // -- affichage des points clé de concordance de l'objet ---
      keypointsObjetMatchArray = opencv.keypointsMatchSURF(opencv.OBJECT,true);  // tableau de keypoint pour stocker les points de concordance de l'objet

      opencv.drawKeypoints ( // forme complète fonction
keypointsObjetMatchArray, //Keypoint[] keypointsIn,
0,imgScene.height,1,//int xRefIn, int yRefIn, float scaleIn,
                5, // int radius - utiliser -1 pour rayon des cercles = size des Keypoints
color(0,0,255), 1, //int colorStrokeIn, int strokeWeightIn,
true,color(0,255,255),//boolean fillIn, int colorFillIn,
false //boolean debug
); // fin draw keypoints

      // -- affichage des points clé de concordance de la scene ---
      keypointsSceneMatchArray = opencv.keypointsMatchSURF(opencv.SCENE,true);  // tableau de keypoint pour stocker les points de concordance de l'objet

      opencv.drawKeypoints ( // forme complète fonction
keypointsSceneMatchArray, //Keypoint[] keypointsIn,
imgObjet.width,imgScene.height,1,//int xRefIn, int yRefIn, float scaleIn,
                5, // int radius - utiliser -1 pour rayon des cercles = size des Keypoints
color(0,0,255), 1, //int colorStrokeIn, int strokeWeightIn,
true,color(0,255,255),//boolean fillIn, int colorFillIn,
false //boolean debug
); // fin draw keypoints

      //---- tracé des lignes de concordances ---
      opencv.drawLinesMatchSURF( // forme complète
keypointsObjetMatchArray, // Keypoint[] keypointsObjectMatchIn, // le tableau de Keypoint match de l'objet
0,imgScene.height,//int xRefObject, int yRefObject, // coordonnées référence objet
keypointsSceneMatchArray,//Keypoint[] keypointsSceneMatchIn, // le tableau de Keypoint match de la scene
imgObjet.width,imgScene.height,// int xRefScene, int yRefScene, // coordonnées référence scene
1, color(255,0,0), 1, //float scaleIn, int colorStrokeIn, int strokeWeightIn, // paramètres graphiques
true // boolean debug
                );
               
    //-------- sélection des concordances significatives entre les points-clés ---------------
     
      println("debut : "+ millis());
      opencv.selectGoodMatchSURF(0.2,true);
      println("fin : "+ millis());       

      // -- affichage des points clé de concordance utiles de l'objet ---
      keypointsObjetGoodMatchArray = opencv.keypointsGoodMatchSURF(opencv.OBJECT,true);  // tableau de keypoint pour stocker les points de concordance de l'objet


      opencv.drawKeypoints ( // forme complète fonction
keypointsObjetGoodMatchArray, //Keypoint[] keypointsIn,
0,imgScene.height,1,//int xRefIn, int yRefIn, float scaleIn,
                5, // int radius - utiliser -1 pour rayon des cercles = size des Keypoints
color(0,255,255), 1, //int colorStrokeIn, int strokeWeightIn,
true,color(0,255,255),//boolean fillIn, int colorFillIn,
false //boolean debug
); // fin draw keypoints

      // -- affichage des points clé de concordance utiles de la scene ---
      keypointsSceneGoodMatchArray = opencv.keypointsGoodMatchSURF(opencv.SCENE,true);  // tableau de keypoint pour stocker les points de concordance de l'objet


      opencv.drawKeypoints ( // forme complète fonction
keypointsSceneGoodMatchArray, //Keypoint[] keypointsIn,
imgObjet.width,imgScene.height,1,//int xRefIn, int yRefIn, float scaleIn,
                5, // int radius - utiliser -1 pour rayon des cercles = size des Keypoints
color(0,255,255), 1, //int colorStrokeIn, int strokeWeightIn,
true,color(0,255,255),//boolean fillIn, int colorFillIn,
false //boolean debug
); // fin draw keypoints

      //---- tracé des lignes de concordances utiles---
      opencv.drawLinesMatchSURF( // forme complète
keypointsObjetGoodMatchArray, // Keypoint[] keypointsObjectMatchIn, // le tableau de Keypoint match de l'objet
0,imgScene.height,//int xRefObject, int yRefObject, // coordonnées référence objet
keypointsSceneGoodMatchArray,//Keypoint[] keypointsSceneMatchIn, // le tableau de Keypoint match de la scene
imgObjet.width,imgScene.height,// int xRefScene, int yRefScene, // coordonnées référence scene
1, color(0,255,0), 1, //float scaleIn, int colorStrokeIn, int strokeWeightIn, // paramètres graphiques
true // boolean debug
                );


  noLoop();
 
} // fin Setup


void  draw() { // fonction exécutée en boucle

}

(:sourcend:)


!! Commentaires utilisateurs

>>bgcolor=#dfd border='3px dotted green'<<

Aucun

>><<

(:include BasPageReference:)

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