|
 |
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.
|
 |
 |
|