OpencvSURFdrawLinesMatchSURF Main.OpencvSURFdrawLinesMatchSURF HistoryHide minor edits - Show changes to output Changed line 12 from:
* Cette fonction permet de to:
* Cette fonction permet de tracer les lignes de correspondances à partir de 2 tableaux de Keypoint, typiquement 1 tableau de Keypoint pour l'image objet et un tableau de Keypoint pour l'image scene. Changed lines 8-11 from:
%center%Path:/mes_images/javacvpro/ to:
%center%%width=400px%[[Path:/mes_images/javacvpro/javacvpro_exemple_SURF_detectMatchSURF_keypointsMatchSURF.png|Path:/mes_images/javacvpro/javacvpro_exemple_SURF_detectMatchSURF_keypointsMatchSURF.png]] Added lines 24-32:
public boolean drawLinesMatchSURF ( Keypoint[] keypointsObjectMatchIn, // le tableau de Keypoint match de l'objet int xRefObject, int yRefObject, // coordonnées référence image objet Keypoint[] keypointsSceneMatchIn, // le tableau de Keypoint match de la scene int xRefScene, int yRefScene, // coordonnées référence image scene float scaleIn, int colorStrokeIn, int strokeWeightIn, // paramètres graphiques boolean debug // debug ) Added lines 39-47:
opencv.drawLinesMatchSURF ( keypointsObjectMatch, // le tableau de Keypoint match de l'objet xRefObject, yRefObject, // coordonnées référence image objet keypointsSceneMatch, // le tableau de Keypoint match de la scene xRefScene, yRefScene, // coordonnées référence image scene scale, colorStroke, strokeWeight, // paramètres graphiques boolean debug // drapeau pour affichage messages ) Changed lines 54-55 from:
* to:
* Keypoint[] keypointsObjectMatch, : le tableau de Keypoint de concordances de l'objet * int xRefObject, int yRefObject, : coordonnées référence image objet - le coin supérieur gauche de l'image objet * Keypoint[] keypointsSceneMatch, : le tableau de Keypoint de concordances de la scene * int xRefScene, int yRefScene, : coordonnées référence image scene - le coin supérieur gauche de l'image scene * float scale, int colorStroke, int strokeWeight, : paramètres graphiques - facteur d'échelle (=1 par défaut), couleur et épaisseur tracé * boolean debug : drapeau pour affichage messages Changed lines 63-64 from:
Aucune to:
Aucune. Trace les lignes de correspondance. Changed lines 67-68 from:
* to:
* Dessin des lignes de correspondances entre les points clés de l'image objet et les points clés de l'image scène. Added lines 71-74:
%center%%red% L'exemple complet suivant est à copier dans Processing et est exécutable immédiatement si vous êtes connectés à internet : Changed lines 77-83 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 détection et tracé des correspondances // 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 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 ); noLoop(); } // fin Setup void draw() { // fonction exécutée en boucle } Added lines 1-74:
(:notitle:) (:include HautPageReference:)\\ [[Main.LibrairieJavacvPro|Librairie JavacvPro]] ! Classe OpenCV : drawLinesMatchSURF() ---- %center%Path:/mes_images/javacvpro/bandeau_javacvpro_processing_opencv_400.png %center%%width=400px%[[Path:|Path:]] !! Description * Cette fonction permet de tracé les lignes de correspondances à partir de 2 tableaux de Keypoint, typiquement 1 tableau de Keypoint pour l'image objet et un tableau de Keypoint pour l'image scene. * Les tableaux de Keypoint de correspondances pourront être obtenus à l'aide des fonctions telles que keypointsMatchSURF() ou keypointsGoodMatchSURF(). * Une correspondance est tracée entre les 2 points ayant le même index dans les 2 tableaux. * 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 |