View  Edit  Attributes  History  Attach  Print  Search


ACCUEIL | DOCUMENTATION | STRATEGIES | TESTS

OpencvSURFdetectObjectIntoSceneSURF

Main.OpencvSURFdetectObjectIntoSceneSURF History

Hide minor edits - Show changes to output

Changed lines 292-293 from:
true //boolean debug // drapeau d'affichage des messages
to:
                               true, //boolean debug // drapeau d'affichage des messages
true // drapeau d'affichage des dessins à partir données natives
Changed line 11 from:
%center% En violet : le cadre entourant l'objet dans la scene après application de la transformée de perspective.\\
to:
%center% En violet : le cadre entourant l'objet dans la scène après application de la transformation de perspective.\\
Changed lines 9-11 from:
%center% En rouge : les correspondances (match) renvoyées par l'algorithme SURF
%center% En vert : les correspondances significatives (goodmatch).
%center% En violet : le cadre entourant l'objet dans la scene après application de la transformée de perspective.
to:
%center% En rouge : les correspondances (match) renvoyées par l'algorithme SURF.\\
%center% En vert : les correspondances significatives (goodmatch).\\
%center% En violet : le cadre entourant l'objet dans la scene après application de la transformée de perspective.\\
Added lines 9-11:
%center% En rouge : les correspondances (match) renvoyées par l'algorithme SURF
%center% En vert : les correspondances significatives (goodmatch).
%center% En violet : le cadre entourant l'objet dans la scene après application de la transformée de perspective.
Deleted lines 41-42:

Changed line 13 from:
* Cette fonction calcule la transformation de perspective de 'limage objet dans l'image scene à partir des points de concordances significatifs de l'image scene. La fonction renvoie un tableau de 4 points correspondant aux 4 points du cadre en perspective entourant l'objet dans la scène. 
to:
* Cette fonction calcule la transformation de perspective de l'image objet dans l'image scene à partir des points de concordances significatifs de l'image scene. La fonction renvoie un tableau de 4 points correspondant aux 4 points du cadre en perspective entourant l'objet dans la scène. 
Added lines 27-31:
boolean debug // drapeau d'affichage des messages
)

public Point[] detectObjectIntoSceneSURF (
opencv_core.IplImage iplImgObjectIn, // image Objet de départ
Added lines 43-44:

Changed lines 47-48 from:
xRefScene, yRefScene, // coordonnées de l'image de la scène - coin supérieur gauche
debug // drapeau d'affichage des messages
to:
xRefScene, yRefScene, // coordonnées de l'image de la scène - coin supérieur gauche - utilisé seulement si drawDebug=true
debug, // drapeau d'affichage des messages
drawDebug // drapeau d'affichage des dessins à partir données natives
Changed lines 58-59 from:
*
to:
* pointsArray : un tableau de Point (objet Java - import java.awt.*;)
* opencv_core.IplImage iplImgObjectIn, : image Objet de départ
* int xRefScene, int yRefScene, : coordonnées de l'image de la scène - utilisé si drawDebug=true
* boolean debug : drapeau d'affichage des messages
* boolean drawDebug : drapeau d'affichage des dessin à partir données natives

Changed lines 66-67 from:
Aucune
to:
* Tableau de 4 points correspondant aux coins du cadre de l'image objet dans la scène calculé à partir de la transformation de perspective elle-même calculée à partir des points-clés des correspondances significatives de l'image scene.
Changed lines 70-71 from:
*
to:
* Pour encadrer un objet détecté dans une scène.
Added lines 74-76:
%center%%red% L'exemple complet suivant est à copier dans Processing et est exécutable immédiatement si vous êtes connectés à internet :

Changed lines 79-86 from:

(:sourcend:)

%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 :)

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

// Exemple de tracé du pourtour d'un objet détecté dans une scene
// par calcul de la transformation de perspective
// à partir des concordances 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
                );

      //------- detection de l'objet par calcul de la transformation de perspective à partir des concordances utiles ------

      Point[] objectInScene=opencv.detectObjectIntoSceneSURF(
      opencv.Memory, //opencv_core.IplImage iplImgObjectIn, // image Objet de départ
imgObjet.width,0,//int xRefScene, int yRefScene, // coordonnées de l'image de la scène
true //boolean debug // drapeau d'affichage des messages
                                );

      //------- affiche la forme à partir du tableau de points ---------
      opencv.drawShape(objectInScene,imgObjet.width,0,1, color(255,0,255), 2, false,0,true );
 

  noLoop();
 
} // fin Setup


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

}
Changed line 27 from:
int xRefScene, int yRefScene, // coordonnées de l'image de la scène
to:
int xRefScene, int yRefScene, // coordonnées de l'image de la scène - utilisé si drawDebug=true
Added line 29:
boolean drawDebug // drapeau d'affichage des dessin à partir données natives
Changed lines 13-16 from:
*

* Voir également :

to:
* Cette fonction calcule la transformation de perspective de 'limage objet dans l'image scene à partir des points de concordances significatifs de l'image scene. La fonction renvoie un tableau de 4 points correspondant aux 4 points du cadre en perspective entourant l'objet dans la scène. 

* Cette fonction est utilisable une fois que l'on a appelé la fonction selectGoodMatchSURF().

* Le tableau de points obtenus pourra être facilement dessiné à l'aide de la fonction drawShape().

* Voir également : initSURF(), keypointsSURF(), detectMatchSURF(), keypointsMatchSURF(), selectGoodMatchSURF(), keypointsGoodMatchSURF(), drawLinesMatchSURF(), detectObjectIntoSceneSURF(), targetObjectIntoSceneSURF()

Added lines 25-30:
public Point[] detectObjectIntoSceneSURF (
opencv_core.IplImage iplImgObjectIn, // image Objet de départ
int xRefScene, int yRefScene, // coordonnées de l'image de la scène
boolean debug // drapeau d'affichage des messages
)

Added lines 36-41:

pointsArray = detectObjectIntoSceneSURF (
iplImgObject, // image Objet de départ
xRefScene, yRefScene, // coordonnées de l'image de la scène - coin supérieur gauche
debug // drapeau d'affichage des messages
)
Deleted line 7:
%center%Path:/mes_images/javacvpro/bandeau_javacvpro_processing_opencv_400.png
Added lines 1-70:
(:notitle:)
(:include HautPageReference:)\\
[[Main.LibrairieJavacvPro|Librairie JavacvPro]]

! Classe OpenCV : detectObjectIntoSceneSURF()
----

%center%Path:/mes_images/javacvpro/bandeau_javacvpro_processing_opencv_400.png
%center%%width=400px%[[Path:/mes_images/javacvpro/javacvpro_exemple_SURF_detectObjectIntoSceneSURF.png|Path:/mes_images/javacvpro/javacvpro_exemple_SURF_detectObjectIntoSceneSURF.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

(:source lang=processing :)


(:sourcend:)

%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 :)


(: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