Note sur Grafite

Transcription

Note sur Grafite
Notice explicative, Laurent Goutière le 13/11/2007
Grafite
1. Grafite ?
Grafite, acronyme de “GRAnular Fow Imaging Techniques”, est une librairie
développée en Matlab par Hervé Capart et Benoît Spinewine depuis 1999, permettant
l’analyse d’écoulements granulaires par techniques d’imagerie digitale. Une documentation
html partielle de cette librairie a été écrite et en décrit les fonctions principales. Cette librairie
est en ce moment développée en C++ afin de l’optimiser. Les fonction d’édition, edit, et
d’aide, help, Matlab sont disponibles pour les routines de la librairie.
2. Une image en Matlab
2.1. Définition
Les images en Matlab sont représentées par des matrices :
o les images couleurs par une matrice en 3D de dimensions MxNxP, où M est la
largeur de l’image en pixels, N est la hauteur de l’image en pixels et P vaut 3 et
permet de définir le code RGB (red, green, blue) d’un pixel. Un élément de la
matrice représente un pixel et a une valeur entre 0 et 256 :
o sa position dans les dimensions M et N représente la position du pixel
dans l’image
o suivant qu’il soit d’indice 1, 2 ou 3 dans la troisième dimension, sa
valeur représente, respectivement, l’intensité de couleur rouge, verte ou
bleue du pixel
o Les images en noir et blanc par une matrice “image” en 2D de dimensions
MxN associée à une matrice “colormap” de dimensions 256x3, où M est la
largeur de l’image en pixels et N est la hauteur de l’image en pixels. Un
élément de la matrice représente un pixel et a une valeur comprise entre 0 et
256 :
o sa position dans les dimensions M et N représente la position du pixel
dans l’image
o sa valeur est un indice d’une ligne de la colormap associée qui défini
256 niveaux de gris, du noir au blanc.
2.2. Quelques fonctions
o imread : lit une image à partir d’un fichier
o image couleur : im = imread(filename), im est une matrice 3D
1/6
Notice explicative, Laurent Goutière le 13/11/2007
o image N/B : [im,cm] = imread(filename), im est la matrice 2D et cm la
colormap
o imshow : affiche une image : imshow(im)
3. Le fonctionnement de Grafite
3.1. Les accès
Pour faciliter l’accès aux différentes routines de la libraire Grafite, une fonction
Matlab permet simplement d’ajouter les chemins d’accès des répertoires de la librairie dans
les chemins d’accès de Matlab. Pour ce faire il faut :
1. placer le fichier grafite.m dans le “workspace” par défaut de Matlab.
2. modifier le chemin d’accès des répertoires des routines, la variable name.
3. mettre en commentaire ou enlever des commentaires les répertoires des
routines qui seront utilisées ou non.
4. lancer la fonction grafite.m pour que les chemins d’accès soient ajoutés et les
routines seront utilisables directement.
Les étapes 1, 2 et 3 ne sont généralement à faire qu’une seule fois, tandis que l’étape 4
permettra d’ajouter les chemins d’accès quand il vous est nécessaire d’utiliser les routines
d’imagerie.
3.2. Initialisation des paramètres
Il est nécessaire de définir certains paramètres propres aux séquences et aux particules
pour appliquer les routines de traitement d’image. Ces paramètres sont définis par des
structures en Matlab.
Les paramètres propres aux séquences :
La structure seq qui peut être définie à partir de la routine initseq.m dont les variables
sont :
o path : le chemin d’accès des images de la séquence, type : string
o name : le nom générique des images, type : string
o begindex : le premier indice de la séquence d’images à analyser, type : integer
o endindex : le dernier indice de la séquence d’images à analyser, type : integer
o format : le format des images, type : string
o window : la taille de la fenêtre d’intérêt des images. Cette fenêtre est définie
par un vecteur de 4 valeurs qui correspondent, respectivement au minimum et
au maximum des valeurs en X et au minimum et au maximum des valeurs en
Y, l’origine de l’image étant le coin supérieur gauche de l’image et les valeurs
en Y étant négatives. Par exemple, pour une image de 800 x 600 pixels dont
toute l’image est la zone d’intérêt, la valeur de window est [0 799 -599 0], le
premier pixel étant en coordonnée (0,0).
2/6
Notice explicative, Laurent Goutière le 13/11/2007
Les paramètres propres aux particules :
La structure par qui peut être définie à partir de la routine initpar.m dont les variables
sont :
o diameter : le diamètre des particules, observable sur l’image, type : integer
o threshold : seuil d’intensité lumineuse pour la détection des particules, type :
integer
o redres : facteur de résolution avant l’identification des particules, par défaut de
valeur 1 pour une résolution optimale, type : double (0 … 1).
o max_temp et max_path : facteur pour les filtres lagrangiens et eulérien, à ne
pas modifier.
o u_0, v_0, w_1 et w_2 : définition de l’ellipse des positions possibles pour la
correspondance d’une particule entre 2 images. u_0 et w_0, le déplacement
moyen supposé des particules. w_1 et w_2, les demi-axes majeurs et mineurs
de l’ellipse dont le centre est donné par u_0 et v_0.
o plotcolor : couleur des traits pour les différents graphiques de résultats.
Ces deux variables sont à définir pour chaque séquence.
3.3. Les routines de base
Cette section a pour but de détailler les 5 routines qui permettent d’analyser le
mouvement de particules d’un écoulement en 2D et d’en obtenir les trajectoires et les vitesses.
pointset : méthode de segmentation des images : identification des centres des
particules :
o arguments :
o seq : structure contenant les paramètres de la séquence
o par : structure contenant les paramètres des particules
o i : i+n : vecteur d’entiers qui sont les indices des images à analyser
o dispflag : boolean pour l’affichage de l’image et des particules
identifiées (0/1)
o appels :
o pointset(seq, par, i : i+n, dispflag) : reconnaissance des particules
sur les images du vecteur i : i+n mais n’enregistre pas les données
dans une variable
o [r{1 : n+1,1}] = pointset(seq, par, i : i+n, dispflag) :
reconnaissance des particules et enregistrement des données dans la
variable r qui est un tableau de cellules (section 4)
o résultats : r est un tableau de cellules de taille égale au nombre d'images
analysées (1 ligne par image). Chaque cellule contient une matrice des
coordonnées 2D des centres des particules identifiées, dont chaque ligne
représente une particule (nombre de lignes égal au nombre de particules), la
première colonne est la position en x de la particule et la seconde colonne la
position en y.
3/6
Notice explicative, Laurent Goutière le 13/11/2007
eulmatch : méthode de correspondance des particules identifiées sur deux images :
o arguments :
o r(1 : n+1,1) : tableau de cellules résultat de la méthode pointset (1
ligne par image). La correspondance se fera entre les images i à
i+n.
o seq : structure contenant les paramètres de la séquence
o par : structure contenant les paramètres des particules
o dispflag : boolean pour l’affichage de l’image et de la
correspondance des particules (0/1)
o appels :
o eulmatch(r(1 : n+1,1), seq, par, dispflag) : correspondance des
particules entre les images i à i+n mais n’enregistre pas les données
dans une variable
o [m{1 : n,1}] = eulmatch(r(1 : n+1,1), seq, par, dispflag) :
correspondance entre les images et enregistrement des données
dans la variable m qui est un tableau de cellules (section 4)
o résultats : m est un tableau avec un nombre de cellules égal au nombre d'entreimages. Chaque cellule contient une matrice dont le nombre de ligne est égal
au nombre de particules de la première image le nombre de colonne égal au
nombre de particules sur la seconde image. Pour une ligne de la matrice (qui
représente donc une particule sur la première image), l’indice de la colonne qui
contient une valeur égale à 1 (0 pour toutes les autres valeurs de la ligne) sur
cette ligne est l’indice de la particule sur la seconde image qui correspond à la
particule considérée sur la première image. Une ligne ne peut contenir qu’une
valeur 1 puisqu’une particule ne correspond qu’à une seule autre particule.
pathmat : méthode de construction des trajectoires des particules d'une séquence
d'images.
o arguments :
o r(1 : n+1,1) : tableau de cellules résultat de la méthode pointset (1
ligne par image)
o m(1 : n,1) : tableau de cellules résultat de la méthode eulmatch (1
ligne par entre-image)
o seq : structure contenant les paramètres de la séquence
o dispflag : boolean pour l’affichage de l’image et des trajectoires
(0/1)
o appels :
o pathmat(r(1 : n+1,1), m(1 : n,1), seq, dispflag) : construction des
trajectoires entre les images i à i+n mais n’enregistre pas les
données dans une variable
o p = pathmat(r(1 : n+1,1), m(1 : n,1), seq, dispflag) : construction
des trajectoires entre les images et enregistrement des données dans
la variable p qui est une matrice
o résultats : p est une matrice dont chaque ligne représente une trajectoire et les
colonnes correspondent aux images. Si l’élément d'indice (i,j) de la matrice est
4/6
Notice explicative, Laurent Goutière le 13/11/2007
non nul, cela signifie que la trajectoire i contient la particule de l'image j
d'indice égal à la valeur de l’élément considéré. Les trajectoires peuvent ne pas
s’étendre sur toutes les images de la séquence, soit si la particule entre ou sort
de l’image pendant la séquence, soit si il y a une erreur de correspondance
entre deux images. Le nombre de trajectoires peut donc être supérieur au
nombre de particules.
o remarque : il faut faire attention au paramètre min_path_length interne à la
méthode qui indique la longueur minimale des trajectoires pour les afficher.
pathplot : méthode qui trace les trajectoires calculées.
o arguments :
o r(1 : n+1,1) : tableau de cellules résultat de la méthode pointset (1
ligne par image)
o p : matrice des trajectoires résultat de la méthode pathmat
o seq : structure contenant les paramètres de la séquence
o appels : pathplot(r(1 : n+1,1) ,p, seq)
velset : méthode qui calcule les vitesses relatives aux trajectoires en pixel/tick (tick =
temps entre deux images).
o arguments :
o r(1 : n+1,1) : tableau de cellules résultat de la méthode pointset (1
ligne par image)
o m(1 : n,1) : tableau de cellules résultat de la méthode eulmatch (1
ligne par entre-image)
o dispflag : boolean pour l’affichage de l’image et des vitesses (0/1)
o par : structure contenant les paramètres des particules
o appels :
o velset(r(1 : n+1,1), m(1 : n,1), dispflag, par) : calcul des vitesses
entre les images i à i+n mais n’enregistre pas les données dans une
variable
o [v{1 :n}] = velset(r(1 : n+1,1), m(1 : n,1), dispflag, par) :
construction des trajectoires entre les images et enregistrement des
données dans la variable v qui est un tableau de cellules
o résultats : v est un tableau de cellule de taille égale au nombre d’entre-images.
Chaque cellule contient une matrice dont chaque ligne représente une particule
et les colonnes correspondent respectivement à la position X, la position Y, la
vitesse suivant l’axe X et la vitesse suivant l’axe Y des particules entre 2
images successives. Si une particule n’a pas de correspondance avec une
particule de l’image suivante les vitesses n’existent pas.
4. Un peu de Matlab…
o who : affiche le contenu du workspace
o whos : affiche le contenu du workspace avec les détails
5/6
Notice explicative, Laurent Goutière le 13/11/2007
o taleau de cellules : tableau d'éléments qui peuvent être de types différents et de
tailles différentes. Pour un tableau de cellule r :
o r : renvoie le type des cellules.
o r(1) : renvoie le type de la cellule à cet indice là du tableau.
o r{1} : renvoie le contenu de la cellule à cet indice là du tableau
6/6