Note d’application Analyse particulaire Projet GE3 P11A05 Jean-Patrick WANNER – GE3 Etude d’un des algorithmes implanté dans le VI particle analysis report de Labview. Sommaire Introduction............................................................................................................................................. 2 Rappel sur la connectivité ....................................................................................................................... 2 Présentation du bloc Labview particle analysis report ........................................................................... 3 Recherche des algorithmes ..................................................................................................................... 4 Fonctionnement du VI ......................................................................................................................... 4 L’algorithme Moore - Neighbor Tracing .............................................................................................. 5 L’algorithme du Square-Tracing .......................................................................................................... 7 Discussion ............................................................................................................................................ 7 Dimensionnement d’une particule...................................................................................................... 8 Conclusion ............................................................................................................................................... 9 Jean-Patrick WANNER | Analyse particulaire 1 Introduction Les algorithmes de comptage et de mesure implantés dans notre programme Labview ont besoin de détecter les poissons sur chaque image. Plus précisément, il faut détecter tous les poissons sur l’image (en prenant en compte toutes les formes) et connaitre le nombre de pixels qu’occupent ces poissons (particules) afin de calculer leur taille. Le bloc particle analysis report de NI Vision pour Labview donne ces informations et répond à notre demande. Ce bloc (ou Visual Instrument VI) a donc été utilisé dans nos algorithmes. Mais étant fourni par Labview, il est impossible de connaître les algorithmes qu’il contient. Ce rapport présente le résultat des recherches concernant les algorithmes qui semblent être utilisés dans ce bloc pour identifier les particules sur l’image. Il n’est donc pas certain que les algorithmes présentés soient effectivement ceux implantés dans le bloc. Un parallèle entre le résultat obtenu avec le bloc de Labview et le résultat que peut fournir un algorithme de traitement d’images est aussi effectué. Rappel sur la connectivité Sur les images binaires, les pixels sont soit noirs (valeur = 0), soit blancs (= 255). Afin d'identifier des objets dans une image binaire, nous avons besoin de localiser des pixels blancs qui sont «connectés» les uns aux autres. En d'autres termes, les pixels connexes, ou voisins, forment un objet sur une image binaire qu’il faut réussir à identifier. Quand pouvons-nous dire que deux pixels sont voisins ? Puisque nous utilisons des pixels carrés, la réponse à la question précédente n'est pas triviale. La raison à cela est la suivante : dans un pavage carré, les pixels partagent soit une arête, soit un sommet, soit rien. En fait, un pixel peut être en contact avec 8 pixels, liés par une arête ou un sommet. Ces pixels définissent le voisinage de Moore. Ce type de connectivité s’appelle la connectivité 8. Dans le cas où les pixels ne sont liés que par les arêtes, la connectivité est de type 4. Avec la connectivité 4, les pixels voisins du pixel P sont représentés comme ceci : Les pixels voisins de P sont ceux ayant une arête commune avec lui. Jean-Patrick WANNER | Analyse particulaire 2 Avec la connectivité 8 (aussi appelée le voisinage de Moore), les pixels voisins d’un pixel P sont représentés comme ceci : Les pixels voisins de P sont en contact avec ce dernier via leurs arêtes ou via leurs sommets. Présentation du bloc Labview particle analysis report Sur le diagramme de Labview, le bloc est présenté comme ceci : Le bloc retourne le nombre de particules détectées dans une image binaire et un tableau contenant des informations sur les particules le plus couramment utilisées. Ces informations sont par exemple la surface qu’occupe une particule sur l’image, le nombre de trous dans cette particule ou encore la dimension (X, Y) de la particule. Les entrées -Connectivity 4/8 (8) : cette entrée est par défaut à 8 (TRUE), elle spécifie le type de connectivité utilisée par l'algorithme pour la détection des particules. Le mode de connectivité détermine directement si un pixel adjacent appartient à la même particule ou à une particule différente. Autrement dit, sur une même image, le nombre de particules peut être plus ou moins important en fonction de la connectivité utilisée. -Image : correspond à la référence de l’image source. -erreur in : décrit l'état d'erreur avant que ce VI ou cette fonction fonctionne. Les sorties -Number of particules : indique le nombre de particules détectées sur une image. -Image out : cette sortie est la référence de l’image source, elle est utilisée dans le cas où le prochain VI a besoin de l’image. -Particle report (Pixels) : est un tableau qui renvoie un ensemble de mesures en pixels non calibrés à partir des particules détectées. Ce cluster contient les éléments suivants: Area : est la surface en pixels qu’occupe la particule, Number of Holes : est le nombre de trous dans la particule, Jean-Patrick WANNER | Analyse particulaire 3 Bounding Rect : est le plus petit rectangle avec ses côtés parallèles à l'axe des x et des y, qui encadre complètement la particule, Center of Mass : est le point qui représente la position moyenne de la masse totale de la particule. En supposant que chaque point de la particule a une densité constante, la masse m de chaque pixel constituant la particule est identique. Il s’agit tout simplement du barycentre de la particule, L'orientation : est l'angle de la droite qui passe par le barycentre avec le moment d'inertie le plus faible, Dimensions : indique (en nombre de pixels) la hauteur et la largeur de la particule. -Particule report(Real-World) : est un tableau qui renvoie un ensemble de mesures calibrées dans le monde réel à partir des particules détectées. Le cluster est identique à celui du Particle report (Pixels). Si l'image n'a pas d'informations de calibrage, les valeurs sont les mêmes que la sortie Particle report (Pixels). -Error out : contient les informations d’erreurs liées au VI. -Calibration Valid : indique si les informations d'étalonnage pour une particule sont valides pour chaque résultat du Particle report (Real-World). Recherche des algorithmes Ce VI retourne de nombreuses informations sur l’image (nombre de trous dans une particule, centre de masse…) et utilise pour cela plus qu’un algorithme (holes searching, contour tracing…). Les informations que nous utilisons pour nos algorithmes de mesure et de comptage sont le nombre de particules trouvées sur une image ainsi que les dimensions (largeur et hauteur) de la particule. Ma recherche se concentre donc sur les algorithmes qui permettent de détecter les particules sur une image et de connaitre leur dimension. Fonctionnement du VI La première particule détectée par le VI est toujours celle située la plus à gauche en bas de l’image. La dernière est la particule la plus à droite en haut de l’image. Sur une image binaire, l’ordre est donc le suivant : Jean-Patrick WANNER | Analyse particulaire 4 Le VI effectue un balayage de l’image de la gauche vers la droite. Vu l’ordre dans lequel est attribué le numéro de chacune des particules, le balayage se fait par colonne de bas en haut. Lorsque le pixel est blanc on parle de pixel utile, et lorsque le pixel est noir on parle de pixel de fond. L’algorithme balaie les colonnes de pixels de bas en haut et de la gauche vers la droite. Il effectue ce balayage jusqu’à détecter un pixel autre qu’un pixel de fond (valeur≠0). Ce qui donne l’aperçu suivant : Lorsque le premier pixel blanc est détecté, il faut vérifier son voisinage. Si ce pixel est isolé, il constitue une particule à lui tout seul. S’il a des pixels utiles voisins, la particule sera plus grosse. Dans tous les cas, le bloc va scruter le voisinage de ce pixel par le biais de la méthode suivante : le bloc va mémoriser les coordonnées du premier pixel détecté (pixel de départ) et va scruter les pixels voisins. Cet algorithme est un contour tracing, plus précisément le Moore - Neighbor Tracing. Cet algorithme est utilisé pour tracer les contours d’une particule. Une fois la particule trouvée, le bloc continue à balayer les colonnes jusqu’à la détection d’une nouvelle particule et ainsi de suite. Le VI ne considère pas un pixel utile sur lequel il est déjà passé comme étant une nouvelle particule. L’algorithme Moore - Neighbor Tracing On considère sur une image qu’une particule correspond à un ensemble de pixels blanc sur un fond de pixels noir. Autrement dit, les pixels qui nous intéressent sont blancs (pixels utiles) et les pixels noirs représentent l’arrière-plan (le fond). On commence en bas à gauche de l’image et on effectue un balayage des colonnes du bas vers le haut, jusqu’à rencontrer un pixel blanc (pixel qui nous intéresse). Ce pixel est mémorisé comme étant le pixel de départ. A partir de ce moment, à chaque fois qu’on détecte un pixel blanc (nommé P), on retourne sur le dernier pixel noir qui a été scruté, et on se déplace autour du pixel P dans le sens horaire, visitant chaque pixel voisin. Lorsqu’on détecte un pixel blanc, on effectue à nouveau les mêmes opérations. L'algorithme se termine quand le pixel de départ est détecté pour la deuxième fois. Remarque : le sens de déplacement n’a pas d’importance. Cependant, il faut conserver le même tout au long de l’algorithme. A chaque détection d’un pixel blanc, les coordonnées de ce dernier sont mémorisées afin de connaitre le contour de la particule. Visuellement, le comportement de cet algorithme est le suivant : Jean-Patrick WANNER | Analyse particulaire 5 Balayage des colonnes de bas en haut jusqu’à la détection d’un pixel utile. On se place sur le dernier pixel de fond scanné ( ). On balaie ensuite les voisins de Pd dans le sens horaire, jusqu’à détecter un nouveau pixel utile. On se place sur le dernier pixel de fond scanné après la détection de P. On recommence ensuite les différentes étapes à partir de . Dernier pixel de fond scanné après la détection d’un pixel utile P. Balayage des pixels voisins (dans le sens horaire). Pixel de départ détecté deux fois : fin de l’algorithme. Cet algorithme peut être défini de la manière suivante : Entrée : Pavage carré, T, tableau contenant des pixels utiles. Sortie : B, matrice contenant les pixels définissant le contour de la particule, M(P), matrice définissant le voisinage de Moore d’un pixel P, c, prochain pixel à tester (après b, le pixel courant). Jean-Patrick WANNER | Analyse particulaire 6 Début Vider la matrice B Faire Du bas vers le haut et de la gauche vers la droite le balayage des pixels de T Jusqu’à la détection d’un pixel utile Pd Insérer Pd dans B Mettre Pd dans P /*Initialisation de b à P*/ b = P Mettre c (pixel après b dans le sens horaire) dans M(P) Faire /*Retour en arrière sur le dernier pixel de fond si c est un pixel utile*/ Si c est blanc Insérer c dans B b = P P = c c = pixel après b dans le sens horaire dans M(P) /*Pixel de fond donc recherche du pixel suivant dans le sens horaire*/ Sinon b = c c = pixel après b dans le sens horaire dans M(P) Fin si Tant que c n’est pas égal à Pd Fin L’algorithme du Square-Tracing Cet algorithme permet lui aussi de déterminer le contour d’une particule. Cependant il n’est valable que pour des connectivités 4. Or, le bloc de Labview utilise les connectivités 4/8. Il se peut néanmoins que cet algorithme soit utilisé par le VI dans le cas où l’utilisateur sélectionne une connectivité 4 en entrée. Le fonctionnement de l’algorithme du Square-Tracing est assez simple. Une fois le pixel de départ détecté, si on se trouve sur un pixel utile (nommé P), alors on tourne à gauche et si on se trouve sur un pixel de fond, alors on tourne à droite. L’algorithme s’arrête une fois que l’on retombe à nouveau sur le pixel de départ. Le résultat pour une image de connectivité 4 est le suivant: Discussion Dans les images que nous traitons, on remarque que certaines particules ont une connectivité de 8. C’est par exemple le cas pour cette image : Jean-Patrick WANNER | Analyse particulaire 7 Les pixels voisins sont liés par leur sommet, une connectivité de 8 est donc indispensable si l’on souhaite que la particule soit correctement détectée. Cependant, sur l’échantillon de 750 images utilisé dans notre projet, seulement deux images présentaient cette particularité. En effet, les particules ont très souvent cette forme (connectivité de 4) : Lorsque l’entrée du bloc est en connectivité 4 puis 8, l’erreur sur le nombre de particules est inférieure à 1%. Néanmoins une connectivité 8 permet d’obtenir des résultats plus fiables car le VI prend en compte plus de formes différentes pour une particule. Sur un échantillon donné, la précision sera donc meilleure mais le temps de traitement sera plus long. Lorsque des travaux sont réalisés sur des échantillons composés majoritairement d’images de connectivité 4, il pourra être plus judicieux de paramétrer l’entrée connectivity du bloc à 4. Dimensionnement d’une particule Connaitre la hauteur maximale (Y) et la largeur maximale (X) en pixels de la particule est trivial une fois que les coordonnées de chaque pixel définissant la particule sont mémorisées dans un tableau. Il suffit pour cela de balayer ce tableau en cherchant les extrêmes. C’est un algorithme classique de balayage de tableau qui compare chaque coordonnée. La hauteur (Y) correspond à la soustraction entre le pixel le plus haut Ph(x,yh) et le pixel le plus bas de la particule Pb(x,yb). La largeur X quant à Jean-Patrick WANNER | Analyse particulaire 8 elle est définie par le pixel le plus à droite soustrait par le pixel le plus à gauche. La distance obtenue correspond directement au nombre de pixels, puisque l’on se déplace dans le tableau de pixel en pixel. Exemple : Y = (5 - 1) + 1 = 5 pixels de haut. X = (5 - 1) + 1 = 5pixels de large. Conclusion Le bloc particle analysis report de Labview est un VI auquel nous n’avons pas accès. Il nous est donc impossible de connaitre quels algorithmes sont exactement utilisés. Cependant, au vu des résultats obtenus en utilisant ce bloc et en effectuant des recherches sur les algorithmes connus, nous pouvons par analogie penser que l’algorithme utilisé pour détecter le contour des particules est l’algorithme de Moore - Neighbor Tracing. Jean-Patrick WANNER | Analyse particulaire 9