Table des matières PDFMathematica

Repérage manuel de points

1. Relevé de points sur une image

On commence par lire une image :

Needs['CV`'];
CVOpen[];
img=CVLoadImage['../hough/pic5.png',CVLoadImageUnchanged];
s=CVGetSize[img];
            

puis on créée un éditeur d'image et on lui fournit l'image :

edit=CVJImageEditor['image',True];
CVJShowImage[edit,img];
            

Dans le cas présent, le deuxième argument de CVJImageEditor indique que la fenêtre est modale : le retour au programme mathematica (ou au notebook) se fait lorsque la fenêtre est fermée par l'utilisateur. Dans le cas de l'utilisation d'un notebook, il est possible d'ouvrir une fenêtre non modale à condition de placer les deux instructions précédentes dans un bloc d'exécution séparée de la suite.

Les points sont sélectionnés et placés dans une liste cliquant avec la souris sur l'image. Deux types de coordonnées sont mémorisés :

L'utilisateur définit son repère en pointant l'origine puis le point de coordonnées (0,a), où a est une unité arbitraire. Il est également possible de définir le point (a,0), ce qui revient à définir l'axe Y. Dans tous les cas, le repère défini est direct (contrairement au repère en unité de pixels).

Dans le cas présent, les points (0,0) et (1,0) ont été définis en bas de l'image (cercles rouge et bleu) et trois points ont étés sélectionnés (sommets du triangle) :

fenetreA

La liste des points en unité de pixels est obtenue par :

liste1=CVJGetPixelPointList[edit]
{{122., 58.}, {212., 149.}, {83., 118.}}

Dans le cas d'une fenêtre non modale, il est possible d'ajouter des points puis d'exécuter à nouveau CVJGetPixelPointList. La liste des coordonnées dans le repère de l'utilisateur est obtenue par :

 liste2=CVJGetUserPointList[edit]
{{0.28333333134651184, 0.6527777910232544}, {0.5333333611488342, 0.4000000059604645}, {0.17499999701976776, 0.4861111044883728}}
ListPlot[liste2,PlotRange->{{0,1},{0,1}},AspectRatio->1]
figA.pngfigA.pdf

2. Relevé de rectangles

L'éditeur d'image permet aussi de définir des zones rectangulaires, dont les côtés sont parallèles à ceux de l'image. Dans l'exemple ci-dessous, un rectangle est choisi dans la zone verte, l'autre dans la zone blanche :

CVJShowImage[edit,img];
liste3 = CVJGetPixelRectangleList[edit]
            
{{118., 92., 25., 24.}, {65., 70., 22., 23.}}

Pour chaque rectangle de la liste, le 4-uplet est constitué des coordonnées du coin supérieur gauche suivies de la taille du rectangle (largeur et hauteur). La principale utilisation de cette fonction est la sélection de zones pour le traitement d'image (en unité de pixels). Il est toutefois possible de récupérer les rectangles en coordonnées utilisateur avec CVJGetUserRectangleList.

3. Relevé de points sur une vidéo

Le relevé de points sur une vidéo se fait comme sur une image fixe. On ouvre un éditeur d'image puis on lui fournit la vidéo à lire :

video=CVCaptureFromFile["toupie.mpg"];
edit2=CVJImageEditor["toupie",True];           
CVJShowVideoFrames[edit2,video,10];
            

Les images sont affichées une par une. Lorsque l'utilisateur appuie sur la flèche verte, un saut de n images est effectué (ici n=10). Dans l'exemple ci-dessous, la position du centre de la toupie a été sélectionnée toute les 10 images (60 images par sec) de manière à reconstituer sa trajectoire :

La liste des points est récupérée comme précédemment.

CVClose[];
Creative Commons LicenseTextes et figures sont mis à disposition sous contrat Creative Commons.