Traitement d`images sous LabVIEW

Transcription

Traitement d`images sous LabVIEW
1
Traitement d’images sous LabVIEW
Sujet
« Structure d’un banc de test de traitement d’images »
Polytech’ Clermont - Année 2011 / 2012
Kévin BRENET
2
Traitement d’images sous LabVIEW
INTRODUCTION
Dans le cadre du projet P11A05 Système de comptage de poissons par vision, nous avons
réalisé un banc de test, sous le logiciel LabVIEW, qui permet de tester les différents
algorithmes étudiés. Nous allons donc étudier la structure du programme en question et plus
particulièrement la démarche à suivre pour établir une telle structure.
STRUCTURE DU BANC DE TEST
Avant de nous intéresser de plus près aux sous-blocs qui composent l’intégralité du
programme, voici l’architecture générale :
Figure 1 : Architecture générale du programme
Il y a tout d’abord une boucle While dont la condition de Stop est fausse ce qui fait que le
programme tourne en permanence dès lors que vous l’exécutez. Ensuite, afin de ne pas
monopoliser le processeur, nous avons ajouté une temporisation de 10ms.
Dans l’interface client, l’utilisateur peut choisir la provenance des images à traiter. Ce choix
se fait à partir d’un menu déroulant que l’on retrouve dans l’interface programmeur. Parmi ces
choix, il y a l’USB qui permet de faire du traitement d’images en temps réel, le traitement à
partir d’une banque d’images, le traitement à partir d’une vidéo AVI. D’autres possibilités
pourraient, bien évidemment, être ajoutées.
De plus, sur l’interface client, il y a des onglets qui permettent de choisir le mode dans lequel
on souhaite fonctionner. Cela permet ici, par exemple, de pouvoir tester indépendamment les
différents algorithmes dans des onglets de debug. Cette commande d’onglet se retrouve
également sur l’interface programmeur.
Polytech’ Clermont - Année 2011 / 2012
Kévin BRENET
3
Traitement d’images sous LabVIEW
Voici un aperçu de la face avant du programme où l’on retrouve la commande onglet (2) ainsi
que le choix du mode de fonctionnement à partir du menu déroulant (1) :
Figure 2 : Face avant du programme
Dans un premier temps, nous avons défini une variable de type stricte qui permet de gérer les
états dans lesquels le programme est susceptible de se trouver. Parmi ces états, nous
retrouvons Idle (Attente), Start (Initialisation), Run (Exécution), Stop (Arrêt). Pour définir
cette variable, il faut procéder comme suit :
1- Insérer une commande de type enum sur la face avant.
2- Faire un clic droit sur la commande et cliquer sur « éditer les éléments… ».
3- Remplir les éléments et cliquer sur « OK ».
Polytech’ Clermont - Année 2011 / 2012
Kévin BRENET
4
Traitement d’images sous LabVIEW
4- Sélectionner la commande, cliquer sur « Edition », puis cliquer sur « Sélectionner la
commande… ».
5- Une nouvelle fenêtre apparaît, cliquer sur « Commande » puis cliquer sur « Déf. De
type stricte ».
6- Il suffit maintenant d’enregistrer le type enum dans le répertoire de travail pour
pouvoir l’utiliser ultérieurement dans le programme
Nous initialisons cette commande à la valeur Idle par défaut. Cette valeur évoluera dans le
temps à l’aide de la FSM dans la boucle While. On prend cette évolution en compte en
ajoutant un registre à décalage qui permettra de récupérer la précédente valeur de cette
commande.
De la même façon, tout au long du programme, nous surveillons qu’aucune erreur ne
survienne. Par défaut, cette variable d’erreur est initialisée comme fausse. Si jamais une erreur
venait à se produire dans la boucle While, peu importe la raison, nous repasserions en mode
Idle et arrêterions par conséquent le processus de traitement d’images.
Pour comprendre le fonctionnement du programme dans son ensemble, nous allons
approfondir les blocs FSM, commande menu déroulant et commande onglet.
Bloc FSM :
Ce bloc permet de gérer l’état dans lequel se trouve le programme : Idle, Start, Run, Stop. En
fonction de certains boutons ou de certaines conditions, nous allons changer d’état. C’est le
bloc principal du programme. Nous allons voir ci-dessous la décomposition de la machine à
états que nous utilisons dans le projet :
Polytech’ Clermont - Année 2011 / 2012
Kévin BRENET
5
Traitement d’images sous LabVIEW
 Nous restons dans l’état par
défaut, Idle, tant que le bouton
Start de notre programme n’a
pas été pressé. Si le bouton est
appuyé, nous passons en état
Start.
 Lorsque nous sommes dans
l’état Start, nous passons dans
l’état Run obligatoirement en
laissant le bouton Start actif si
aucune erreur n’est apparue.
Mais, dès lors qu’une erreur
survient, nous retournons dans
l’état Idle et nous repassons le
bouton Start au repos.
 Nous restons dans l’état Run
tant qu’aucune erreur n’est
survenue et tant que le bouton
Start reste actif. S’il y a une
erreur, nous passons dans l’état
Stop et nous désactivons le
bouton Start.
Polytech’ Clermont - Année 2011 / 2012
Kévin BRENET
6
Traitement d’images sous LabVIEW
 Quand nous sommes dans l’état
Stop, nous passons forcément
dans l’état d’attente Idle. Et
nous repassons par précaution
le bouton Start au repos.
Ce bloc est indispensable, car en fonction de l’état, nous allons faire des opérations différentes
dans les deux autres blocs. En effet, dans les deux autres blocs principaux du programme,
nous utilisons des Switch qui permettent de distinguer les manipulations à effectuer en
fonction de l’état actuel du programme. Il serait bien évidemment possible d’ajouter d’autres
états.
Bloc commande menu déroulant :
Le bloc commande menu déroulant permet de gérer les modes de fonctionnement. Pour vous
illustrer comment fonctionne ce bloc, nous allons étudier le mode de traitement par caméra
USB.
La variable menu déroulant est également une variable de type stricte. Pour ajouter un
nouveau mode, il suffit d’éditer un nouvel élément dans cette commande et de le décrire dans
la partie programmeur. Cette commande « menu déroulant » est connectée à une structure
condition, ce qui permet de retrouver tous les modes de fonctionnement. Dans l’exemple
choisi, le traitement d’images à partir d’une caméra USB correspond au mode n°3. Puis, au
sein de cette condition, nous allons réaliser différentes opérations que l’on soit dans l’état
Idle, Start, Run ou Stop.
 Dans l’état d’attente, nous ne
réalisons aucune opération.
Nous repassons simplement
l’erreur à 0 pour repartir sur de
bonnes bases.
Polytech’ Clermont - Année 2011 / 2012
Kévin BRENET
7
Traitement d’images sous LabVIEW
 Dans
l’état
Start,
nous
préparons la configuration et
démarrons la session USB.
L’étape
de
configuration
consiste à choisir la caméra
USB à utiliser. De plus, nous
initialisons la variable Numero
à 0.
 Dans l’état Run, nous réalisons
l’acquisition d’une image dans
la session USB démarrée
auparavant et nous envoyons
cette image à l’étage suivant
pour la traiter. De plus, nous
incrémentons
la
variable
Numero pour pouvoir identifier
chaque image par un numéro
unique. Maintenant, il est
possible de stopper l’USB en
appuyant sur le bouton « Stop
camera » qui nous envoie dans
l’état Stop.
 Dans l’état Stop, nous coupons
la communication USB et nous
repassons le bouton « Stop
camera » au repos.
Ce bloc permet donc de décrire un fonctionnement plus simplement. C'est-à-dire que nous
distinguons l’étape d’attente, d’initialisation (configuration), de fonctionnement et d’arrêt.
Cette phase de décomposition est primordiale. Elle doit être cohérente. Ce bloc, dans le cadre
du projet, permet donc quelque soit le mode de fonctionnement sélectionné, d’envoyer une
image identifiée par un numéro à l’étage suivant. C’est cet étage qui réalisera le traitement
d’images.
Polytech’ Clermont - Année 2011 / 2012
Kévin BRENET
8
Traitement d’images sous LabVIEW
Bloc commande onglet :
Le bloc commande onglet fonctionne de la même façon, c'est-à-dire qu’en fonction de
l’onglet sur lequel vous vous trouvez sur la face avant, il est possible de faire des traitements
et des affichages différents. Voici l’exemple de l’onglet qui permet de débugger l’algorithme
de comptage. Sur la face avant, nous affichons tous les indicateurs, commandes nécessaires au
debug et dans la partie diagramme, nous décrivons l’algorithme de comptage en distinguant
une fois encore les phases Idle (Attente), Start qui permet d’initialiser toutes les variables
utiles du programme, Run dans laquelle on écrit l’algorithme de comptage, et Stop qui réalise
le calcul des résultats finaux.
Dans l’état Idle, nous sommes en attente, c’est pourquoi il ne se passe strictement rien.
Dans l’état Start, nous réinitialisons toutes les variables utilisées dans l’algorithme.
Polytech’ Clermont - Année 2011 / 2012
Kévin BRENET
9
Traitement d’images sous LabVIEW
Dans l’état Start, l’algorithme de comptage est codé afin de pouvoir estimer le nombre de
poissons dans le cadre de notre projet. Nous restons dans l’état Run tant qu’il reste des images
à traiter.
Puis dans l’état Stop, nous calculons le nombre total de poissons trouvés à partir des images
reçues.
Il est ici aussi possible d’ajouter/supprimer ou modifier des onglets. Pour tester un nouvel
algorithme, il suffit de l’implanter à cet endroit du programme pour vérifier qu’il fonctionne.
Le reste du programme restant inchangé.
Polytech’ Clermont - Année 2011 / 2012
Kévin BRENET
10
Traitement d’images sous LabVIEW
CONCLUSION
Avec la structure de ce programme, il est possible de passer d’un mode de fonctionnement à
un autre ou d’un onglet à un autre en temps réel. Les commandes ayant un impact sur les
algorithmes peuvent également être modifiées en cours de traitement. Au lien d’avoir un
programme séquentiel, nous avons donc un programme réactif en temps réel. De plus, cette
structure est adaptable à tout autre traitement d’images car il suffit simplement d’ajouter,
supprimer ou modifier des modes de fonctionnement, des états, ou des algorithmes. La
structure, elle, reste la même. Ce banc de test est donc transportable sur un autre projet de
traitement d’images.
Polytech’ Clermont - Année 2011 / 2012
Kévin BRENET