Suivi d'objets par la méthode KLT (Kanade-Lucas-Tomasi)

Julie JAUREGUY & Hugo LESME

 

Introdution

Au cours de cette polycompétence d'imagerie numérique, nous nous sommes intéressés à la méthode KLT (Kanade-Lucas-Tomasi). Après une période de familiarisation où nous avons notamment pris en main un programme Python proposé dans la librairie OpenCV, nous avons modifié ce dernier afin de faire du suivi d'objets. Cet article vous propose donc quelques unes des expérimentations qui ont été réalisées.

 

Présentation de la méthode KLT

Le tracking KLT (Kanade-Lucas-Tomasi) prend ses origines en 1981 avec Lucas et Kanade qui proposèrent une méthode de recherche locale de déplacement par flot optique en appliquant des moindres carrés. Puis la méthode fut améliorée en 1991 avec Kanade et Tomasi qui y ajoutèrent une recherche de points d'intérêt à traquer (similaire à une recherche des coins de Harris). Enfin, en 1994, Tomasi et Shi apportèrent une amélioration pour s'assurer que les points d'intérêt sont bien traqués au cours du temps.

Un algorithme basique de tracking KLT peut se décrire ainsi :

Concrètement, la méthode KLT retourne les points d'intérêt ainsi que leur déplacement comme nous pouvons le voir sur la vidéo suivante. Pour obtenir cette dernière, nous avons utilisé le programme lk_track.py (préalablement codé dans la librairie OpenCv sous Python). 

[Vidéo 1]

Suivi d'objets par la méthode KLT

lk_track.py nous retourne les points d'intérêt et leur déplacement. Nous avons modifié ce programme pour faire du suivi d'objets. Pour ce faire, nous plaçons "à la main" un rectangle sur la première frame de la vidéo. Lors du calcul des points d'intérêt, nous ne gardons que les points qui se situent à l'intérieur du rectangle. Enfin, nous faisons la moyenne du déplacement de ces derniers pour pouvoir déplacer le rectangle. Avec cette méthode, le rectangle reste de taille constante.

Si l'on souhaite ajuster la taille du rectangle, au lieu de déplacer ce dernier d'un déplacement correspondant à la moyenne du déplacement des points qu'il contient, on extrait la plus petite et plus grande abscisses - ainsi que la plus petite et plus grande ordonnée - des points d'intérêt de l'objet à suivre afin de déterminer une bounding box. Ainsi, au lieu de déplacer un rectangle initial, on affiche des rectangles successifs là où il faut et aux dimensions adaptées grâce à la bounding box.

 

Expérimentations

Nous avons testé ce programme sur 2 exemples. La qualité des vidéos ne sont pas bonnes. Cela vient peut-être du fait que nous avons utilisé une machine virtuelle. 

Test 1 : une voiture

Le premier exemple consiste à suivre une voiture. Le résultat est présent sur la vidéo suivante. Nous pouvons constater que le rectangle est un peu trop bas. Cela vient du fait que les points d'intérêt sur la première frame sont plus nombreux au niveau des arbres situés au dessus de la voiture que sur la voiture elle-même. En effet, le programme lk_track.py ne détecte que le rétroviseur.

[vidéo 2]

Nous avons également essayé de faire varier la taille du rectangle lorsque le véhicule s'éloigne en déterminant la bounding box des point d'intérêt proches de la voiture mais cela entraîne encore la détection des arbres et rend donc de mauvais résultat pour cet exemple. 

 

Test 2 : Mr Bean

Le deuxième exemple consiste à suivre la tête de Mr Bean. Le résultat du programme Python est présent sur la vidéo ci-dessous.

[Vidéo 3]

 

Conclusion

Ce projet d'imagerie numérique a été l'occasion d'appliquer sur des cas concrets des notions étudiées en cours telles que la détection de points d'intérêt. En effet, la méthode KLT a pour principal objectif de suivre le déplacement de ces derniers. La librairie OpenCV a été un véritable support pour la réalisation de ce projet, du fait qu'elle propose un programme qui applique cette méthode. Nous avons donc modifié ce dernier pour faire du suivi d'objet. La principale difficulté est de placer correctement le rectangle sur l'objet souhaité au début de la vidéo et ainsi de ne pas prendre en compte des mauvais points d'intérêt (s'ils sont plus nombreux alors c'est un autre objet qui est suivi). Finalement, les résultats obtenus avec la méthode KLT sont relativement satisfaisants pour faire du tracking d'objets.

Bibliographie

http://docs.opencv.org/3.2.0/d7/d8b/tutorial_py_lucas_kanade.html

https://www.researchgate.net/publication/228883294

https://www.researchgate.net/publication/265269977