• Aucun résultat trouvé

Adaptation au cas circulaire

5.2 Appariement par programmation dynamique

5.2.7 Adaptation au cas circulaire

Les panoramas pris avec une caméra classique motorisée comme celle des Pioneer 2 ne font

pas le tour complet mais se limitent à 200. En revanche, en simulation comme avec un capteur

panoramique, on a accès à des images qui couvrent bien tout le cercle et il est nécessaire de savoir faire des appariements corrects entre ces panoramas. Malheureusement, la programmation dynamique considère l’appariement de deux listes non circulaires d’objets. En pratique, cela signifie qu’un objet tout près d’un bord du premier panorama ne sera jamais apparié avec un objet tout près de l’autre bord de l’autre panorama, parce que tous les autres amers les séparent dans la représentation linéaire du panorama, alors qu’ils sont tout proches dans la topologie circulaire naturelle des panoramas. Ignorer le problème peut aboutir à ne pas apparier jusqu’à la moitié du panorama, dans le cas où on tente

d’apparier deux panoramas pris avec des orientations opposées, comme illustré en figure5.2.

Une adaptation de la programmation dynamique au cas circulaire doit permettre non seulement d’apparier correctement des panoramas pris dans des orientations connues mais différentes (parce que la « coupure » dans la représentation linéaire de chaque panorama ne pose plus problème), mais surtout elle doit permettre d’apparier des panoramas sans connaître leur orientation respective.

Dans ce but, nous supprimons le terme qui dépend des angles dans la fonction de ressemblance

définie en 5.2.4.1. La ressemblance entre deux amers ne dépend plus de l’orientation relative dans

laquelle sont présentées les panoramas. La matrice sur laquelle opère l’algorithme ne dépend donc plus de cette orientation relative, et l’appariement obtenu non plus.

Nous avons donc cherché une façon d’adapter la programmation dynamique au cas circulaire.

Einsele [EIN 97, EIN 01] a utilisé la programmation dynamique avec des panoramas constitués de

segments de droites perçus par un télémètre laser. Dans sa thèse, il propose une méthode consistant à essayer toutes les combinaisons de points de départ, en effectuant une rotation des colonnes et des

lignes des deux tableaux utilisés par la méthode. Cela augmente le coût de l’algorithme en O(m2n2).

FIG. 5.2: Amélioration apportée par la programmation dynamique circulaire. L’animat prend un panorama et doit l’apparier avec le même panorama mais pris dans une orientation différente. Parce que la programmation dynamique ne traite que des listes d’éléments sans rebouclage, elle peut négliger jusqu’à la moitié des éléments à cause du décalage (en haut). Le cercle noir entou-rant les vues est interrompu pour montrer où la séquence commence et s’arrête. On constate que, en effet l’algorithme trouve bien la meilleure façon d’apparier ces deux séquences linéaires. La modification que nous proposons est simple : elle permet de tenir compte de la nature circulaire du panorama et d’apparier correctement quelle que soit l’orientation du robot (en bas).

5.2. APPARIEMENT PAR PROGRAMMATION DYNAMIQUE 123

« sauter » des éléments qui se ressemblent peu sans les apparier, et aussi de restreindre le remplissage du tableau d’une façon qui peut faire gagner un facteur 2.

Nous avons essayé de modifier la façon de remplir le tableau afin d’autoriser un bouclage (lui donner une topologie cylindrique voire torique si on boucle les deux dimensions). Le problème est

qu’il n’est plus évident que le principe d’optimalité de Bellman (section5.2.3) s’applique toujours à

cette nouvelle situation.

Finalement nous avons opté pour une modification de l’algorithme clairement définie et qui s’est avérée efficace dans toutes nos expériences.

Le principe de cette méthode est de dupliquer l’un des deux panoramas, en le concaténant avec une copie de lui-même, de sorte qu’il fait deux fois le tour, puis à appliquer l’algorithme de programmation dynamique non modifié à ce nouveau problème d’appariement. L’algorithme lui-même n’étant pas modifié, on continue de bénéficier de toutes ses propriétés.

La différence tient dans ce que l’algorithme n’est plus contraint à ne pas franchir la limite cir-culaire, puisqu’il peut la franchir à l’endroit de la limite entre les deux copies. En pratique, on n’a pas besoin de dupliquer le panorama lui-même, mais seulement l’information fournie à l’algorithme :

la matrice des ressemblances. On lui fournit donc M0 de dimensions 2m × n au lieu de m × n, en

accolant une copie de la matrice M sous elle-même :

M0 = M

M

!

(5.1)

Il faut ensuite interpréter l’appariement obtenu de façon un peu différente. En effet, chaque amer du premier panorama est représenté deux fois dans la matrice. Chacune des deux copies peut po-tentiellement être appariée avec un amer de l’autre panorama, ce qui contredit le choix que chaque élément d’une vue est apparié à au plus un élément de l’autre vue. Heureusement, ce cas indésirable est facile à caractériser car l’appariement couvre alors plus qu’un tour complet du premier panorama. Mathématiquement cela se traduit par : l’écart entre l’indice du premier amer apparié et du dernier amer apparié dépasse m.

Une façon simple de garantir qu’un amer reste apparié au plus une fois est alors de sélectionner dans le panorama doublé (2m secteurs) une fenêtre de largeur m secteurs, et de regarder le score de l’appariement partiel qui ne tient compte que de cette fenêtre. Nous conserverons la fenêtre qui maximise le score. Concrètement, cela revient à chercher à quel endroit il faut couper le panorama circulaire pour maximiser le score d’un appariement linéaire.

Grâce à l’appariement circulaire que nous avons à ce stade, c’est une opération rapide, il s’agit de

calculer des sommes de scores partiels sipour les appariements partiels sélectionné. Désignons par si

le score partiel de l’amer i : si i a été apparié avec j si = Mi,j, sinon si= 0.

m additions donnent le score de la fenêtre f0couvrant les amers de 0 à m − 1 :

S0 =

m−1

X

k=0

Pour obtenir le score Side la fenêtre fi, il n’est pas besoin de calculer m sommes de m termes. Il

suffit d’appliquer par récurrence Si= Si−1− si − 1 + si + m, ce qui fait deux opérations par fenêtre,

soit au total 3m opérations. C’est négligeable devant le coût d’un appariement et a fortiori devant celui

de faire tous les appariements. Le i qui donne le plus fort Siet l’indice de l’amer avant lequel il faut,

pour maximiser le score, couper le panorama que nous avions doublé.

Cette méthode a été appliquée avec succès dans toutes nos expériences réelles d’orientation. Il reste une possibilité de problème, que nous avons pu mettre en évidence en construisant à dessein un cas simulé. Nous avons exprimé mathématiquement que nous voulions maximiser le score de l’appariement, en ne tenant compte que des couleurs des objets et non de leur positions, de sorte que l’appariement qu’on obtient est complètement indépendant de l’orientation relative dans laquelle sont présentés les deux vues. Ce que nous obtenons est exactement ce que nous avons exprimé, mais le résultat est parfois un peu surprenant.

Le cas est illustré par la figure5.3. Il s’agit d’un environnement à 5 amers de tailles et distances

variées. La perspective change l’ordre dans lequel les amers apparaissent dans le panorama selon l’endroit où se trouve l’animat, mettant en difficulté l’appariement. Rappelons que la variante non circulaire tient compte de l’orientation relative des panoramas, non dans la fonction de ressemblance, mais par la représentation linéaire qui fait que, dans chaque panorama, il y a un premier et un dernier amer. Ici, les panoramas commencent au sud et tournent dans le sens horaire. Rappelons aussi que la programmation dynamique apparie toujours les objets en respectant l’ordre : un amer B apparaissant plus loin que A apparié à A’ ne sera jamais apparié avec un B’ qui apparaît avant A’, ce qui se traduit graphiquement par l’absence de croisement entre des flèches qui représentent les paires, dans une représentation rectiligne des panoramas. L’appariement au milieu à droite de la figure semble incorrect car les flèches courbes se croisent. Les appariements sont en fait aA cB eC et il n’y a pas de croisement dans la topologie linéaire qui a été choisie. En fait, aucun des 4 appariements présenté dans la figure n’est erroné. C’est le fait que l’ordre des amers change dans la vue qui cause l’incomplétude des appariements.

La bonne réponse à ce type de problème est de considérer, que si l’appariement peut être incomplet sans causer de tort majeur à l’animat, alors la méthode est suffisante. De plus, nous avons l’intuition (mais nous ne l’avons pas démontré) que le fait que les amers se répartissent sur plus de la moitié du

panorama (bas de la figure5.3) est suffisant pour éviter les croisements des flèches.

En fait, dans une application réelle, si l’ordre d’éléments saillants dans le paysage que perçoit l’animat dépend du déplacement de ce dernier, nous pensons que la bonne solution est de considérer qu’il s’agit de lieux différents et de mémoriser des vues aux points de transitions.