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
 
Suite à la discussion http://www.robot-serveur.net/phpBB2/viewtopic.php?t=39 un début d’étude du principe de la recherche d’une marque dans une image a été mise en œuvre. C’est ce qui est abordé dans la partie suivante. Nous exposons la théorie dans une première partie, puis nous montrons le résultat obtenu avec une image réelle de webcam. Nous finirons en donnant les perspectives du travail à venir.

I. La recherche d’un motif dans une image

Dans le cadre de la reconnaissance de formes, la recherche d’un motif en est un cas particulier. En effet, on choisit dans ce cas un motif connu et distinctif qui servira d'indice visuel afin de déterminer la zone s'intérêt de la scène. Le motif servira à l’élaboration d’un masque qui va alors servir lors d’un parcours sur l’ensemble de l’image. La scène doit elle aussi contenir ce motif et la découverte de celui-ci est faite lorsqu’une correspondance entre le motif du masque et la zone parcourue est détectée.

Techniquement cela revient à réaliser un produit de corrélation qui est une forme particulière de filtrage de l’image qui est d'un type dit non linéaire. Dans le cas qui nous intéresse, pour présenter la théorie, deux notions sont nécessaires : l’analyse par bloc d’une image et la notion de corrélation de deux signaux bidimensionnels. C'est ce que nous présentons dans les sous parties suivantes.

I.a. L’analyse par bloc d’une image

L’idée est assez élémentaire et est pourtant très largement utilisée dans la mise au point de certains algorithmes d’analyse d’une image. Le principe est le suivant : on définit un bloc et l’on en détermine le centre. Puis l’on fait correspondre le centre de ce bloc avec l’ensemble des pixels qui forment l’image (en la parcourant et cela à donc pour effet de diviser cette image en une multitude de blocs de pixel). Pour chaque pixel de l’image parcourue, une opération est appliquée sur la surface définie par le bloc. Cette opération peut, par exemple, être une moyenne du niveau de gris des pixels environnants. Cela a pour effet de créer une image résultat. L’interprétation de cette image dépend de l’opération réalisée à la base.

I.b. La corrélation

La corrélation (sous entendue linéaire) est une grandeur qui vise à déterminer (autant que faire se peut) dans quelle mesure il existe une relation linéaire entre deux variables statistiques. C’est une valeur scalaire comprise entre 1 et -1. Retenons que lorsque deux ensembles de variables sont identiques, c’est qu’il existe une fonction linéaire d’identité entre ces deux ensembles. L’utilisation de la corrélation donnera alors la valeur 1. Plus il existe de différences entre ces ensembles et plus cette valeur s’approchera de 0.

I.c. Le produit de corrélation

Nous avons maintenant assez d’éléments pour comprendre comment nous allons rechercher un motif dans une image.

Nous avons un motif et un masque. L’astuce consiste à considérer ces deux éléments comme deux variables statistiques bidimensionnelles. L’utilisation du produit de corrélation entre ces deux variables (en fait deux images) permet donc de définir un degré de ressemblance entre image. Il suffit pour cela de définir un seuil à partir duquel on considérera que les deux images sont identiques. Il est évident que lorsque le motif et le masque sont parfaitement identiques, le produit de corrélation vaut 1.

En utilisant la technique de l’analyse par bloc, chaque pixel de l’image résultat porte dans son niveau de gris (sous réserve de quelques modifications, mais ce n’est pas là l’essentiel) le résultat de ce produit de corrélation. Il suffit de rechercher dans cette image ceux qui ont une valeur supérieure ou égale au seuil. Ils indiqueront alors l’emplacement des motifs détectés !

I.d. Résultat avec une image de synthèse

L’objectif de cette partie est simple : tester ce qui est dit plus haut avec une image conçue pour le besoin (cf. figure Croix, Masque et Résultats). Cela permet de valider la théorie dans un cas idéal. On transposera ensuite au cas d’une véritable image qui aura subi l’ensemble des traitements vus jusqu’à maintenant.


Figure Croix, Masque et Résultats (l'image résultat est l'image après la recherche
des points ayant une valeur >= à la valeur seuil.)

L’image de départ est une image bmp 160x120 monochrome (1 bit de résolution pour la couleur). Ce choix est déterminé par l’idée qu’à la suite du traitement de l’acquisition de l’image (voir ce qui a déjà été fait à ce sujet) nous somme en présence d’une image à traiter légère et qui n’a que des contours. Le seuil utilisé est ici de >= 0.8. Dans ce cas idéal un seuil de 1 aurait très bien fonctionné. Force est de constater que pour l’instant l’algorithme est assez lourd et délicat à mettre en œuvre. Il faut en effet faire 19200 fois le calcul de la corrélation bidimensionnel et il faut prendre garde aux cas où le masque ne recouvre pas entièrement l’image. L’algorithme est sûrement améliorable.

II. Les problèmes qui se posent

Le passage en niveau de gris, le calcul du gradient puis la binarisation par seuillage nous font perdre beaucoup d’informations sur l’image. Il est alors nécessaire de fixer un seuil de ressemblance assez faible. On prend le risque de ne pas détecter ce que l’on souhaite. Ce problème est à voir en condition d’utilisation.

Autre problème, beaucoup plus délicat, est celui de l’échelle de l’élément à détecter. La figure -robot serveur- illustre le robot à l’arrêt pendant une saisie. Comme le montre le schéma, le robot étant à l’arrêt pendant la saisie, la taille du marqueur restera identique.


Figure -robot serveur-

Au moment où le robot se positionne à la table, l’image du marqueur sera plus grande ou plus petite que le masque (en fonction de l’éloignement de la caméra). Dans ces conditions il n’est pas possible d’utiliser le produit de corrélation seul. Le problème de l'échelle d'un élément à détecter est un problème connu et qui ne dispose, pour l'instant (et selon la littérature) aucune solution fiable. Une analyse multi-résolutions semble possible, mais bien trop lourde pour notre application. Il existe une approche brute qui peut convenir en terme de résultats. Il suffit d'utiliser plusieurs masques, chacun représentant le marqueur dans une situation spécifique (orientation et échelle). Cette approche possède une forte restriction : la nécessité de répéter le produit de corrélation sur l'image autant de fois que nous avons de masque. Ainsi pour fixer les idées, avec 5 marqueurs spécifiques, 5 orientations par marqueurs et 10 situations d'échelles par marqueur (comprendre que chaque marqueur est considéré à 10 échelles différentes) et sachant, de plus, que lors du parcours d'une image le calcul de corrélation est réalisé 19200 fois nous avons à faire face à :  4 800 000 opérations à réaliser... C'est déraisonnable (car nous ne sommes même pas en présence d'opérations élémentaires) mais un début de solution est envisagé. Nous y reviendrons à la conclusion de cette partie.

III. Application de la technique à une image réelle

Nous avons cherché à présenter dans la partie ci-dessus une méthodologie qui nous permettra de détecter un objet marqué d’un signe distinctif. La théorie s’applique sans trop de difficultés malgré les restrictions qu'elle semble imposer. La prochaine étape consiste assez naturellement à tester cette approche sur une image réelle de webcam. C'est ce que nous présentons maintenant.
La première étape consiste à réaliser l’ensemble des traitements étudiés jusqu’ici pour obtenir une image légère et qui servira de base à la reconnaissance puis, à terme, à l’asservissement visuel. Cette partie du traitement correspond à l'ensemble de ce qui a été décrit jusqu'à maintenant. Les figures suivantes présentent l’ensemble des images intermédiaires :



Ensuite on applique effectivement le produit de corrélation et nous avons pour résultat :



La méthode (en terme de détection) fonctionne bien mieux que ce que l’on aurait pu imaginer. (En effet les zones parasites de l’image ne sont pas détectées.) Le critère de ressemblance est fixé à 0.5 et suffit à ne détecter que la zone qui est effectivement délimitée par une croix. Il y a quand même un sacré inconvénient auquel on pouvait s'attendre : l’ensemble du traitement demande environ 1 minute sur un Céléron 2Ghz. Il faut bien comprendre que pour l’instant rien n’est optimisé, toutefois cela ne présage rien de bon.

IV. Perspectives

A partir du moment où nous sommes effectivement capable de détecter (au moins dans un cas particulier) un objet grâce à son marqueur, nous pouvons commencer à penser à l’asservissement visuel en lui-même. Cet aspect sera bientôt abordé. D'un point de vue théorique il reste encore à résoudre le problème de calcul d'une pose pour positionner l'objet relativement au robot et à déterminer le modèle géométrique et cinématique de celui-ci pour envisager les algorithmes de commande et d'asservissement. Ces aspects là ne semblent pas les plus complexes (à voir quand même)... Par contre on risque de se retrouver dans un cas ou huit fois sur dix le robot sera incapable de détecter quelque chose en raison du problème d’échelle. De plus il semblerait que la méthode du produit de corrélation risque de rapidement montrer des limites vis à vis des problèmes que l'on cherche à résoudre et des moyens que l'on se donne (trop de calculs à réaliser si l'on recherche une certaine robustesse de la reconnaissance). Les dernières discussions du forum (http://www.robot-serveur.net/phpBB2/viewtopic.php?t=55) laissent envisager la possibilité d'utiliser un réseau de neurones artificiels (RNA) comme masque. L'idée est de faire apprendre à un seul réseau (et une fois pour toute) plusieurs marqueurs et dans différentes situations. Un seul passage du réseau suffira alors pour détecter différents types de marqueurs et à des échelles différentes. Cette approche est à explorer en complément du produit de corrélation. S'il se trouve que l'utilisation d'un RNA est possible, on remplacera la corrélation par le RNA.

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