Module Imagerie
Picsou Robotix inc. |
14 décembre 1999
Dans cette partie de projet, le travail consiste à traiter
les images en provenance de la caméra aux fins d'analyse.
L'image du plan de travail du robot est prise par la camera et
est envoyée à notre application. On procède
alors au traitement de l'image par l'analyse des formes (blobs
analysis).
L'équipe de l'imagerie a comme responsabilités:
- Assurer la gestion de l'image en provenance de la caméra
- Développer un protocole de détection de cibles
et obstacles présents sur le terrain (position)
- Développer un protocole de détection du robot
(position et orientation)
 |
Figure 1 - L'espace de travail pour le projet
(cliquer pour obtenir une plus grande image) |
Notre première approche aura été de se bâtir
un outil afin de pouvoir aisément manipuler les images
en provenance de la caméra et de se familiariser avec les
différentes possibilités de la librairie MIL mises
à notre disposition. Par la suite, nous avons construis
les procédures et algorithmes nécessaires à
la détection des objets.
|
3.2 Conception du programme |
Afin de réaliser tous les objectifs mentionnés en
2.0, nous avons décidé d'écrire un programme
en utilisant Microsoft Visual C++ et d'utiliser la librairie
de traitement d'image MIL 6.0. Nous détaillerons quelques
points ayant références au programme principal (PIIP)
ici-bas. Pour plus d'information sur PIIP, veuillez consulter
la section 4.0.
|
3.2.1 Interface usager de traitement manuel des images |
La première partie développée fut l'interface
visuelle qui permet à un utilisateur de traiter manuellement
les images, c'est-à-dire procéder étape par
étape, une opération à la fois. Quant à
nous, elle nous aura permis de raffiner notre procédure
de détection, que nous décrirons dans une prochaine
section.
|
3.2.2 Algorithme de traitement autonome |
Le but de cette section ? Par automatisation, nous voulions que,
via une simple commande, le programme soit capable de nous fournir
les informations nécessaires sur l'emplacement des objets.
Nous avons alors bâti une fonction de traitement qui,
lorsqu'appelé, lance la procédure de traitement
d'image et envoie les données dans le fichier que l'utilisateur
spécifie en paramètre.
Notre première tentative consistait à utiliser
une image statique initiale (en supposant les objets immobiles).
Cependant, pour une question de précision lors des déplacements
du robot, nous avons dû changer cette option pour en prendre
une plus dynamique. C'est-à-dire que la capture de l'image
se ferait en continu (les images seront prises à des intervalles
de temps déterminés) afin de voir les déplacements
du robot à l'écran.
Le traitement autonome se compose de plusieurs fonctions de
la librairie MIL. Entre autres, des fonctions de base telles que
MimBinarize (permet de rendre les pixels noir ou blanc),ou
MimOpen et MimClose (permettent de réduire
le bruit dans l'image à traiter). Nous avons aussi eu recours
à toute la section traitant de la détection de forme.
Le traitement s'effectue en trois phases. La première
cherche à détecter les obstacles, la seconde les
cibles et la dernière le robot lui-même. En imposant
quelques contraintes (aire, rayon, etc.), il était relativement
facile de séparer ces objets. Par la suite, les coordonnées
pixels des centres de gravité des objets du terrain serons
converties en coordonnées réelles, en tenant compte
de la perspective. Pour ce faire, MIL nous permet l'utilisation
d'une fonction qui fait l'interpolation des coordonnées
réelles en utilisant un vecteur reliant des points pixels
connus à des points de la zone de travail (en coordonnées
réelles - i.e. en mètres).
Les résultats (coordonnées des objets) de l'analyse
de formes sont envoyés dans un fichier qui sera lu et analysé
par l'application Java (voir la section traitant de l'application).
|
3.2.2 Procédure pour la détection des objets |
Voici une description sommaire de la procédure de traitement
autonome du terrain capté par la caméra numérique.
Veuillez noter que nous ne considérons pas ici les diverses
étapes de filtrage dont font l'objet chacune des détections
suivantes :
- Détection des cibles :
- - Détection des contours
- Dilatation des contours (pour grossir les pièces)
- Binarisation de l'image avec emphase sur les objets blancs
- Détections des formes
Avec contrainte pour ne capter que de petits objets de
forme ronde.
- Détection des obstacles :
- - Binarisation de l'image avec emphase sur les objets blancs
- Détections des formes
Avec contrainte pour ne capter que de moyennement gros objets
de
forme quelconque.
- Détection du robot :
- - Binarisation de l'image avec emphase sur les objets noirs
(ou très foncés)
- Détections des formes
Avec contrainte pour ne capter que de moyennement gros objets
de
forme quelconque.
- Calcul de l'angle de mouvement
A l'aide de la position dans l'image précedente,
le programme calcul un angle qui donne la
direction du mouvement du robot.
Il est à noter que les formes détectées passent
par un filtrage rigoureux qui détermine finalement si ce
sont des formes viables ou non. Par exemple, les formes se trouvant
hors champ de travail ne seront jamais considérées
(i.e. hors des démarcations blanches sur le planché).
|
3.2.4 Problèmes rencontrés |
Nous avons rencontré plusieurs problèmes durant
la conception du logiciel et de la procédure de traitement,
nous en énumérerons quelques-uns ci-bas :
- La binarisation : Nous obtenions des résultats
pour les moins inattendus lors du traitement initial des images.
Alors que l'image ne devait être composée que de
noir et de blanc après le traitement, elle contenait une
myriade de couleurs. Nous avons par la suite découvert
que pour obtenir des bons résultats, nous devions utiliser
une image en tons de gris. Nous avons donc cherché une
fonction dans MIL pour convertir l'image de couleur à
noir et blanc.
- La perspective : Convertir des coordonnées
pixels en coordonnée réelle n'est pas une mince
affaire, mais lorsqu'elle implique de surcroît la perspective,
elle devient vite un cauchemar. Nous avons opté pour une
solution des plus simple : l'utilisation d'une fonction toute
faite de la librairie MIL 6.0. Cela nous permis de nous concentrer
sur la détection proprement dite sans devoir trop longtemps
se creuser la tête à la recherche de solutions (lire
- algorithmes traitant la perspective).
- La détection des pièces de monnaie aura
été difficile... (les lacunes de l'équipement)
: En effet, comme la caméra est très imprécise
(lire - floue) il est pratiquement impossible de clairement identifier
une pièce de monnaie sur le planché (elle disparaissait
lorsque que nous traitions le bruite dans l'image). Il nous aura
fallu traiter l'image de nombreuse fois pour finalement aboutir
à une série de procédures capables de donnée
des résultats passable et utilisable dans le projet.
|
3.3 Une oeuvre inachevée... |
Il y a certainement quelques points que nous aurions aimé
peauffiner... en voici la liste:
- Meilleure distinction des objets : La détection
en trois phases est très restrictive. Elle ne permet pas,
par exemple, d'avoir des obstacles qui ne sont pas blancs (i.e.
le moindrement foncés). Nous aurions aimé travailler
plus la méthode pour la rendre quelque peu insensible
au ton des couleurs.
- PIIP-bogue : PIIP est malheureusement un logiciel
qui comporte plusieurs bogues. Enter autres, des bogues d'allocations
de mémoire et de libération. Il aurait été
très intéressant d'avoir le temps de tous les fixer...
- Détection de l'orientation : Actuellement,
nous calculons l'orientation du robot en utilisant sa position
initiale et sa position finale. Il aurait été intéressant
de pouvoir détecter cette orientation par le traitement
image.
- Un PIIP plus discret : En ce moment, PIIP est une
application qui roule comme la plupart des applications Windows
et qui possède une fenêtre affichant l'image de
la caméra, bien mais... Nous aurions préféré
un PIIP plus discret, qui roule en arrière-plan.
4.0 Le logiciel : PIIP
[Programme d'Inspection d'Image de Pique-Sous] |
PIIP est un programme d'inspection d'images développé
par l'équipe du traitement d'image et qui utilise la librairie
MIL (Matrox Imaging Library) à plusieur sauces.
Il permet, par le biais d'un simple interface usager, de traiter
une image (érosion, dilatation, détection de contours)
et de
faire une analyse de forme (blob). Cette dernière
nous est des plus utile compte tenu de la nature du projet Cyclope.
Le logiciel est divisé en 4 sections, et deux catégories
d'utilisation. Soit, le mode manuel et le mode automatique.
Le mode manuel permet de faire du traitement d'image en utilisant
les fonction prédéfinis de la librairie MIL. Le
mode automatique, quand à lui, analysera de lui-même
l'image en provenance d'une caméra numérique branché
à l'ordinateur.
Les 4 sections du logiciel, que nous allons parcourir et expliquer,
sont:
- La fenêtre principale
- La barre d'outil et le menu principal
- La boîte de dialogue d'analyse et traitement
- La ligne de commande
|
4.1 La fenêtre principale |
 |
Figure 1 - Fenêtre principale
(cliquer pour obtenir une plus grande image) |
L'application est construite selon le mode standard documents-vues
multiples. C'est à dire que l'on peux ouvrir plusieurs
documents, et chacuns de ceux-ci aura sa propre vue et sera totalement
indépendant des autres. Il est donc possible de travailler
sur plusieurs images en même temps. La fenêtre principale
de l'application comporte une barre d'outil qui permet quelques
unes des fonctions usuelles mais aussi quelques fonctions de traitement
image.
|
4.2 La barre d'outils et le menu principal |
|
Nous décrirons ici brièvement les diverses
fonctions à partir de la barre d'outil, qui sont répétés
dans les diverses sections du menu principal: |
Nouveau document
|
Un document blanc sera créé - cette fonction n'est
actuellement pas implanter, elle ne fait que créé
une image noir |
Ouverture d'un fichier
|
Ouverture d'un fichier (*.mim, *.tif) situé sur le disque
dur. Attention - seul l'ouverture de fichier MIM et TIFF
est implanté, vous obtiendrez une erreur en tentant d'ouvrir
tout autre type de fichier. |
Sauvegarde
|
Sauvegarde du document ouvert et actif |
Début de capture
|
Début de la capture d'écran via la caméra
(capture continue). Pendant la capture continue, aucun traitement
image n'est possible. |
Fin de capture (pause)
|
Fin de la capture continue. La capture est arrêtée
et l'image est figée. Le traitement d'image est alors
possible. |
Traitement image
|
Affiche la boîte de traitement image. |
Couche de support graphique
|
Affiche ou rend invisible la couche de support graphique. Cette
couche affiche des données concernant l'image (taille,
grandeur, hauteur, traitement effectué, localisation des
formes détectées, etc.) |
À propos de ...
|
Affiche la boîte de présentation de la compagnie. |
Noter que les icônes sont temporaires et ne seront améliorés
que si et seulement si le temps le permet.
|
4.3 La boîte de dialogue d'analyse et traitement |
|
L'onglet de traitement image: Cet onglet permet le traitement
d'image de base. De la détection des contours, à
l'érosion de l'image, tout y est. Chacune des fonctions
possibles possèdent une série de paramètre
(par exemple, pour le cas de l'érosion - Open - nous devons
spécifier le nombre d'itérations et choisir la
méthode d'érosion) que l'on doit remplir. Le programme
ne traite cependant pas les données passés, d'où
il est à ce moment important de faire attention à
ce que l'on pose comme paramètres. L'image qui sera traité
est, bien sur, l'image de la fenêtre active en ce moment. |
Figure 2 - Onglet de traitement image
(cliquer pour obtenir une plus grande image) |
|
Les fonctions disponibles pour l'instant:
- Open
- Close
- EdgeDetect
- Binarize
- Convert
|
L'onglet d'analyse: Cet onglet permet de faire l'analyse
des "blobs" de l'image courante. Selon les spécifications
de détections, le logiciel inscrira sur l'image des croix
au centre de gravité des cibles trouvées et des
croix d'une autre couleur sur les obstacles. Ces inscriptions
sont temporaires et seront remplacés, si le temps le permet,
par un affichage plus diversifié et informatif (qui fonctionnera
en conjonction avec le bouton de couche de support graphique
de la barre d'outil). |
Figure 3 - Onlglet d'analyse
(cliquer pour obtenir une plus grande image) |
|
Les options possibles :
- Définition des la valeur de binarisation (0-255 - i.e.
une valeur de gris)
- Définition de l'aire maximale et minale pour les blob
à détectés
- Définition du périmètre minimale
- Définition de l'aire maximale et minimale pour une cible
- Option de sauvegarde des résultats dans un fichier
Il est possible de lancer l'application avec une ligne de commande.
Une seule de ces options est actuellement implantées :
PIIP.exe -a NomDuFichierDeSortie.log
Permet l'analyses de l'image en provenance de la caméra
et de la sauvegarde des résultats dans NomDuFichier.log
[ Application ] [ Communication ] [ Imagerie ] [ Robot ]