PRESENTATION ELECTRONIQUE SOFTWARE VISION MECANIQUE LE FORUM
    NEWS DU PROJET
 
2008-01-07 23:20:08
BONNE ET HEUREUSE ANNEE 2008
L'équipe du projet Robot-Serveur vous souhaite à tous une bonne et heureuse année. Qu'elle vous...Plus de détails...

2007-09-07 20:19:36
STATU QUO
Depuis quelques mois, le projet est à l'arrêt. Cela est du à nos emplois du temps respectif et à...Plus de détails...

2007-03-15 21:22:31
NOUVEAU SERVEUR
Le site est en place sur son nouveau serveur( un 90plan chez OVH). Pour vous, pour le moment, c'est...Plus de détails...

 
VISION
Première partie
Deuxième partie
L'ESSENTIEL
Sondage
Description
Carte principale
Code C18
Vision  
Prototype
RESSOURCES
Forum
Téléchargement
Liens
Vidéos  
Livre d or  
Contact
 
www.robot-serveur.net
VISION
 
L'approche de cette partie du robot par Guonzo s'effectue en deux temps.

Première partie
Deuxième partie


Suite à la discussion disponible : http://www.robot-serveur.net/phpBB2/viewtopic.php?t=30 une base de données d'images (correspondant à la mise en situation du robot face à une table qui dispose de verres) a été réalisée.

Nous avons pour objectif :
  1. d'arriver à extraire correctement le contour des objets qui composent la scène ;
  2. cette extraction faite, les différents contours serviront à la phase de reconnaissance des formes.
En fin de traitement, les contours doivent faire environs 1 pixel d'épaisseur. Un ensemble de pixels connexes peut alors se modéliser en mémoire comme un graphe (le pixel étant un sommet, l'arête exprime une notion de voisinage entre les pixels). Dans ces conditions il est possible d'extraire des éléments constitutifs de l'image, il suffit pour cela de construire le graphe associé en parcourant l'image. Ces différents éléments de l'image peuvent alors servir à la reconnaissance de formes proprement dite.

On présente ici les premiers essais qui visent à obtenir les bords des objets qui composent l'image. Aucune solution n'est donnée, mais cela permet d'identifier les problèmes qui se posent.

Tout d'abord un petit mot sur la détection des bords d'une image : c'est un domaine actif du traitement de l'image que l'on nomme "la segmentation". Il y a deux grandes familles d'approche, soit en recherchant les bords des objets, soit en identifiant les caractéristiques des différentes régions qui composent l'image.

La première approche définit les bords comme étant une forte variation de l'intensité lumineuse entre, par exemple, deux points. D'une certaine façon elle détecte une différence de contraste importante. Intuitivement on peut comprendre la seconde approche de la façon suivante : une zone de même texture définira probablement le même objet (mais la texture en tant que critère n'est pas une obligation).

On n'explore ici que l'approche de la segmentation par la recherche des bords. Un document plus complet (avec les détails théoriques) sera rédigé dans le futur.
>
Commentons la figure 1 suivante :



L'image de départ (image 1) est obtenue à partir d'une webcam et nous avons comme caractéristiques de l'image une résolution de 160x120x24 (soit environs 57 Ko, pour un format de codage RGB) qui est par défaut la plus faible de disponible sur une webcam. Le premier travail consiste à transformer l'image en niveau de gris pour simplifier les traitements.

L'histogramme (image 4) met en évidence la répartition du nombres de pixels par valeur de niveau de gris. On distingue trois zone différentes. La 1ère plage de gris (~0-50) correspond à la zone de l'image en haut à droite (image 2). La seconde plage de gris (~75-125) correspond à celle qui est en haut à gauche, et enfin la dernière plage (~125-250) correspond à toute la zone du bas et des verres.

Première constation : les verres ne se détachent pas du fond de l'image et il n'y a aucune plage de niveau de gris qui permet d'identifier de façon certaine un verre.

Allons plus loins et calculons la norme du gradient de l'image 2. en chaque point de celle-ci. La norme du gradient permet d'estimer en un point (x,y) la variation du niveau de gris. Plus cette valeur est importante (i.e. qui tend vers la couleur blanche comme l'illustre l'image 3) et plus l'écart entre une zone sombre et une zone claire est marquée. Le gradient met donc en évidence les zones de contraste de l'image.

Or si les reflets apparaissent bien, les résultats sont décevants en ce qui concerne les bords. La figure 2 suivante plonge l'image 2D de la scène dans un espace à trois dimensions :



On reconnait assez facilement la scène, chaque intersection du cadrillage correspond à un pixel de l'image et la hauteur indique le niveau de gris. Une échelle de couleurs est associée à la hauteur avec pour un niveau de gris sombre la couleur bleue foncée et pour un niveau de gris clair la couleur rouge.

D'une certaine façon, le gradient est capable de mettre en avant les "falaises" de l'image. Un fait remarquable, qui n'est pourtant pas une évidence pour notre système de vision très développé, c'est que toute une partie du verre central se confond pratiquement avec son support.

En conséquence le calcul de la norme du gradient pour cette zone renvoie des valeurs très faibles qui ne permettent pas de détecter tous les bords. Cela met en évidence la transparence du verre dans la scène, ce qui le rend plus difficile à la détection !

On confirme cet état de fait par les calculs de bords et de contours :



Ici les calculs sont obtenus directement à partir des images en niveau de gris. La figure suivante montre les résultats obtenus lorsque l'on réalise un seuillage de l'image gradient :



Pour conclure, les premiers essais montrent :
  1. que l'acquisition d'une image issue d'une webcam est lourde (~57 Ko) en terme de mémoire ;
  2. la transparence d'un verre et la faible qualité de l'image (nécessaire en raison de la volonté d'un système "léger") rend la détection des contours dans la majorité des cas délicate.
Le point 1 nous amène à nous poser le problème de l'interfaçage d'une webcam pour identifier les possibilités bas niveau que nous offre un tel système.

Le point 2 demande une étude plus précise de ce qu'il est possible de faire en traitement de l'image. Parmis différentes voies d'exploration, mais sans être exhaustif, nous avons la possibilité de déterminer des algorithmes de calcul du gradient plus efficace, de vérifier si changer d'espace de couleur met en avant une information pertinente vis-à-vis de notre problème (par exemple en passant d'un format de codage RGB au format HSV), enfin nous avons la possibilité de faire un pré-traitement de l'image à l'aide d'un filtre adapté.


Suite à cela, la discussion s'oriente vers de nouveaux problèmes.
I. RGB-IHS

Nous nous posons dans cette partie la question de savoir s'il y a un intérêt pour le traitement de changer d'espace de couleurs. Nous discutons les deux cas suivants : le format RGB et le format HSV (idem HSB et HSI ... qui sont autant de façon différentes de parler de la même chose).

En chromatographie l'espace de couleur permet de représenter les couleurs et leurs relations entre elles. On utilise des formules pour passer d'un espace à un autre. Il est fréquent en analyse de l'image de travailler en niveau de gris et/ou avec exclusivement le canal d'intensité de l'image.

Lorsque l'espace de couleur de départ est au format RGB, le niveau de gris se calcul par la formule :

Gr = 0.299*R+0.587*G+0.114*B

Autrement on détermine l'intensité (V de Value pour l'espace HSV) à partir de l'espace RGB par la formule suivante :

V=1/3*(R+G+B)

Nous avons alors les valeurs d'intensité qui composent l'image (dans l'espace HSV toujours). On utilise alors une échelle en niveau de gris pour représenter l'intensité de chaque pixel de sorte que l'on a en général (visuellement) une image très proche de ce que l'on aurait obtenu avec la formule qui donne Gr.

Les formules Gr et V étant toutes les deux de la forme a1*R+a2*G+a3*B, il est légitime de se poser la question de savoir s'il existe des différences notables de résultats entre les deux. On part du principe que dans les deux cas nous avons une échelle en niveau de gris. On se pose alors la question de savoir si l'écart de niveau de gris (Gr-V) est important ou non.

Après différents calculs on obtient que l'écart maximum que l'on peut avoir correspond à 55 % de l'écart maximum que l'échelle en niveau de gris peut permettre, l'écart moyen étant de 42 %. Pratiquement cela n'améliore pas l'image et cela n'a aucune incidence sur la qualité du résultat du seuillage. Il n'est donc pas vraiment utile de changer d'espace de couleurs.

II. Amélioration de l'algorithme du gradient

Sur la conclusion de la partie I. on préfèrera améliorer l'algorithme de calcul du gradient ; la figure suivante présente les résultats obtenus.



L'image 2 est le résultat de l'algorithme amélioré du gradient, l'image 4 est le résultat du seuillage obtenu à partir de l'image 2. La différence entre l'image 3 et l'image 4 est subjectivement parlante et le verre semble bien apparaître.

Nous pouvons à ce moment préciser la quantité d'espace mémoire nécessaire pour le traitement de l'image (la discussion porte uniquement sur la zone mémoire qui contient l'image). Le poids de l'image au départ est de 56.25 Ko. A la fin du traitement le poids de l'image est de 2.34 Ko. En moyenne l'ensemble des traitements demande 21.11 Ko.

utilise la méthode d'Otsu, méthode efficace mais qui demande un certain temps de traitement de l'image en niveau de gris pour obtenir l'image binaire. Or en étudiant les histogrammes obtenus à partir des images résultats du calcul du gradient, nous remarquons que nous pouvons les décrire de la même façon. En effet il y a, en proportion, beaucoup moins de pixels blancs qui expriment les différences de contraste de l'image qu'il n'y a de pixels noirs (d'où l'accumulation des bars en début de l'histogramme). Sauf cas exceptionnel, ce phénomène se retrouve à chaque fois. On propose de déterminer le seuil de la binarisation a priori (par exemple en le fixant à 125), ce qui permet de traiter l'image "à la volée" sans dégradation significative de l'image obtenue.

Remarquons que l'image binarisée contient encore de nombreux défauts (le contour du verre n'est pas complètement fermé) et qu'un contour (qui correspond aux bords de la table) fusionne avec le bord droit du verre (en rouge sur l'image 1-1. de la seconde figure). L'ensemble de ces défauts qui persistent malgré l'amélioration apportée à la recherche des zones de contraste rend la méthode qui consiste à déterminer les contours de façon classique caduque. L'image 2-1. montre l'échec de cette approche.



La première idée (qui consiste à chercher l'objet en extrayant les contours de l'image pour en analyser la connexité ensuite) ne semble pas viable en raison des nombreux défauts de l'image et de l'impossibilité de réaliser de lourds traitements (implémentation matérielle oblige). On s'orientera plutôt vers une recherche d'éléments caractéristiques de l'image (comme la recherche de coins, ce qui est illustré en vert dans l'image 1-1) avec une méthode robuste aux défauts de l'image et aux changements d'échelles.

III. Perspectives

Les dernières discussions du forum (http://www.robot-serveur.net/phpBB2/viewtopic.php?t=39) proposent d'utiliser directement des marqueurs spécifiques sur les objets que l'on souhaite détecter. Il y a plusieurs avantages à cela. Tout d'abord la connaissance a priori de la forme géométrique à détecter rend possible l'utilisation de masque de corrélation pour la détection. Il est aussi possible d'utiliser des méthodes de reconstruction spécifique sur la forme à détecter (choix d'éléments structurants spécifiques pour le cas de la morphologie mathématique par exemple). Afin il y a un dernier avantage : reconnaitre le marqueur visuel c'est déjà avoir reconnu l'objet  mais c'est aussi posséder les primitives pour l'asservissement visuel.

Les prochains développements vont donc explorer cet aspect de la détection. On commencera par vérifier si l'on peut facilement détecter une croix ou un ensemble de croix dans une image "de synthèse" (i.e. une image artificielle construite pour notre besoin). Il viendra assez naturellement la question de savoir si la méthode est résistante aux bruits qui peuvent composer une image réelle. Il se posera aussi le problème de l'échelle de l'élément à détecter. Ces travaux méneront à un essai sur une image réelle de webcam.

SUITE

Page rédigée par Guonzo

Ce document n'est soumis à aucune contrainte de reproduction, d'exploitation et de distribution. Toutefois, merci de respecter l'auteur en le citant -par son pseudo si la situation le permet, par son nom de préférence- et en référençant vos sources en cas d'utilisation d'un ou des éléments de ce document.
FORUM
 
PARTENAIRES  


   lelectronique.com : Le premier portail consacré à lélectronique     



PUBLICITE  


iGraal