D’après les propos de Théodore Papadopulo
Un problème très général est celui de reconnaître qu’une portion d’image est présente dans une autre image. Par exemple reconnaître un visage donné dans une séquence vidéo. Ou bien suivre la vue 2D d’un objet d’une image à l’autre dans une séquence vidéo donc reconnaître où il s’est déplacé dans l’image suivante (voir l’asservissement visuel, Interstices). Ou encore, en stéréo-vision, reconnaître dans les deux vues la portion d’image correspondante pour calculer ensuite par triangulation la 3ème dimension (voir De la deuxième à la troisième dimension, Interstices)
Calculer la similarité entre deux images noir et blanc I et J de mêmes tailles est chose facile. Une image est un tableau de pixels indexés par i et j. Chaque pixel a une valeur disons entre 0% dans le cas le plus sombre à 100% dans le cas le plus clair. Superposons alors les deux images en soustrayant les valeurs pixel à pixel et faisons la somme de la valeur absolue de ces différences:
s = somme_(sur tous les pixels) | I_ij – J_ij |
Si les images sont très similaires, cette « distance » entre les images sera proche de zéro, sinon elle sera importante. Voilà comment définir une similarité entre deux images noir et blanc. Il y a évidemment bien d’autres définitions possibles entre deux portions d’images pixeliques, mais elles sont plus ou moins issues de cette idée là.
Il n’y a plus alors qu’à calculer cette similarité à chaque position de chaque image de la vidéo, jusqu’à trouver la correspondance. Nous avons donc un processus automatique pour détecter le visage recherché. Ou bien calculer de combien s’était déplacé ce visage d’une image à l’autre pour estimer son mouvement et le suivre au cours du temps au sein de la vidéo, etc.
Et voilà. Enfin, presque : cela marche si est seulement si le visage ne se déforme pas ! C’est à dire si le sujet ne tourne jamais la tête, reste à la même distance de la caméra pour que son image de grossisse ni ne retrécisse, et qu’aucun autre objet de la scène ne vienne partiellement l’occulter !!!
Bref: nous semblons être sur la bonne voie … mais pas encore rendu.
…
Le retour
Prenons le cas le plus simple du changement de taille : mettre en correspondance deux images après un zoom, dont on ne connaît évidemment pas le grossissement.
On pourrait essayer de les comparer en essayant tous les grossissements possibles: c’est une idée qui marche. Mais quand il faudra aussi tenir compte des orientations du visage dans l’espace, des déformations, etc, il sera juste impossible d’énumérer toutes les valeurs et cette méthode sera inutilisable.
Une très belle idée a alors émergé : au lieu de décrire ce qui change d’une image à l’autre, on va donner une description de ce qui ne change pas, entre cette image et sa référence.
Par exemple dans le cas du grossissement, toutes les tailles changent, mais avec un même facteur. Par conséquent, les rapports entre les tailles ne changent pas. Par exemple, la distance entre les yeux et la taille de la bouche, changent, mais le rapport entre ces deux tailles est invariant au cours d’un zoom. On va donc identifier des éléments de l’image (sans savoir que ce sont des yeux ou une bouche, puisque c’est un calcul mécanique !) et comparer d’une image à l’autre les rapports entre les couples de tailles. On note qu’on peut du coup calculer aussi la taille du zoom si la comparaison a marché : c’est le rapport entre les changements de tailles. On note aussi qu’il y a d’autres invariants, par exemple les angles, puisque le triangle formé du nez et des yeux change de taille au cours du zoom, mais ses angles sont invariants.
Ce qui est vraiment intéressant ici, c’est que cette idée se généralise à d’autres déformations. Ainsi, si le visage à reconnaître est « plat » (autrement dit on néglige son relief, par exemple une photo de visage) alors sa projection sur une image à travers, par exemple, une webcam, subit une déformation dite projective. Dans ce cas, ce ne sont plus les rapports mais les birapports (des rapports de rapports) entre les tailles (attention ceci n’est dans ce cas valable que pour des distances prises entre des points alignés) qui restent invariants à tout changement de position de la caméra (orientation, translation, …).
Le système va donc reconnaître mécaniquement l’image d’un objet en détectant des éléments primitifs dans les images, par exemple des points, puis en calculant ce qui peut-être invariant d’une image à l’autre indépendamment de la transformation qui a eu lieu.
Lire la Suite : Invariance et similitude en vision par ordinateur (2) : le making-of »