Romain Desternes & Pierre Flodrops

 

Suivi d’objets par la méthode KLT

 

Introduction

 

La polycompétence Imagerie Numérique est une polycompétence qui fait partie de la cinquième et dernière année de l’école d’ingénieurs Polytech Clermont-Ferrand. Dans le cadre de cette UE, un projet est réalisé. Tout d’abord, il s’agira d’effectuer un étude bibliographique et d’effectuer une prise en main de la librairie. Le sujet choisi par le binôme pour ce projet concerne le Suivi d’objets par la méthode KLT.

Dans un premier temps, une description de cette méthode sera présentée, et par la suite cette méthode sera appliquée à différents exemples.



1. Présentation et Principe générale de la méthode KLT

 

La méthode appelée KLT Tracking est une méthode de suivie d’objet en mouvement dans une séquence vidéo .  Elle a été mise au point par trois hommes: Kanade, Lucas et Tomasi d’où le nom de la méthode.

La genèse de cette méthode provient de Kanade et Lucas au travers de leurs premiers algorithmes publiés à partir de 1981. Avec le concours de Tomasi, cette méthode a évoluée et est devenu la méthode de tracking KLT ( Kanade - Lucas - Tomasi ).

 

 


Afficher l'image d'origine

Le principe de cette méthode est le suivant:

 

  • Sur la première image d’une séquence vidéo, on repère les points d'intérêts de l’objet à suivre. Pour rappel, les points d'intérêts d’un objet dans une image représentent les points pour lesquels nous pouvons observer une double discontinuité de l’intensité. Cette double discontinuité correspondent à des coins, nous pouvons l’observer sur l’image ci dessus où les points d'intérêts sont marqués d’un petit carré noir. Il existe plusieurs méthode permettant de détecter ces points d'intérêt. Une méthode rapide connue et mise en oeuvre au cours des travaux dirigés d’imagerie numérique est la méthode de Harris.

 

  • Après avoir repéré ces points d'intérêts sur la première image de la séquence, le but de la méthode est de retrouver ces points sur l’image suivante. Puis ,à son tour, cette dernière image servira de base à la recherche de ces mêmes points d'intérêts sur l’image suivante et ainsi de suite sur toute la séquence vidéo.
    Cette méthode s’appuie sur la minimisation d’une somme de différences carrées en utilisant un modèle de translation. En fonction des dimensions de l’objet à suivre ainsi que des zones texturée des images, une fenêtre de pixels autour de chaque point d'intérêt est déterminée.  La taille de cette fenêtre s’étalonne généralement de [3x3] à [25x25]. La minimisation de l’erreur résiduelle entre le point d'intérêt de l’image au temps t et des pixels de la fenêtre au temps  t+dt donne le déplacement d’un point d'intérêt. Sur chaque image, les déplacements de tous les points d'intérêts  de l’objet sont calculés, donnant ainsi le déplacement général de celui-ci dans la séquence vidéo.

 

2. Mise en place de la méthode KLT sur différents exemples

 

La librairie OpenCV met à disposition deux exemples pour mettre en évidence la méthode de tracking KLT, nous avons donc à notre disposition deux exemples, l’un en python et le second en C++.

L’objectif tout d’abord et de vérifier le bon fonctionnement du tracking KLT pour ces deux exemples. Par la suite, nous nous intéresserons au différences entre les deux exemples.

 

Nous pouvons observer sur les images ci-dessous la méthode KLT en exécution. Pour le première image qui concerne l’exemple C++, nous avons bien une détection et un suivi des différents points d’intérêts. La seconde image représente l'exécution de l’exemple Python. Il est possible d’observer le même fonctionnement, avec détection et suivi des points d'intérêts. En revanche, cet exemple trace le mouvement de ces points d’interêts.    

Revenons à l’exemple C++.

 

Capture du 2016-11-29 19-13-17.png 

 

Capture du 2016-11-29 19-04-10.png

 

Les différentes fonctionnalités de cet exemple utilisent le clavier. Nous faisons une recherche des points d'intérêts grâce à la touche ‘R’,  nous pouvons soustraire l’image pour ne laisser que les points d’intérêts sur fond noir avec la touche ‘N’, puis nous pouvons effacer tous les points d’intérêts avec la touche ‘C’.

Nous pouvons voir ci dessous l’image des points d'intérêts sur fond noir.

 

Capture du 2016-12-01 09-05-38.png

 

Comme il a été dit plus haut, le principe du tracking KLT repose sur la détection initiale de points d'intérêts puis de retrouver ces points sur l’image suivante sans nouvelle détection de points d’intérêts. Nous avons pu observer aisément ce phénomène. Après avoir détecté les points d'intérêts, nous avons ensuite approcher notre main pour couvrir une zone fournie, ainsi les points disparaissent et ne reviennent pas. Cela est tout à fait logique, puisque qu’il n’y a pas de rafraichissement des points d’intérêts.


Capture du 2016-12-01 09-06-14.png

Capture du 2016-12-01 09-06-39.png

Concernant le second exemple, la détection des points démarre automatiquement. De plus, il a été observé que dans dans cet exemple en Python, il y a un rafraichissement des points d’intérêts assez rapide (il peut être modifié dans le code). Nous pouvons le mettre en évidence en essayant de faire disparaître les points comme pour l’exemple précédent, mais de nouveaux sont calculés.

Capture du 2016-12-01 09-07-40.png

Capture du 2016-12-01 09-08-33.png

 

Cela est visible sur les deux images ci-dessus qui ont été prises à quelques secondes d’intervalle. La trace, qui est dans le cas du cas par défaut de 10 points, nous permets d’observer les précédents points. Plus que les points, nous nous apercevons qu’il s’agit en fait des directions prises par le points d’intérêts. Nous pouvons l’observer ci-dessous.

Capture du 2016-12-01 09-09-00.png



 

3. Utilisation de la libraire openCV permettant le tracking d'objet sur des échantillons vidéo

La librairie openCV permet de réaliser le suivi d'objet au sein d'une vidéo. Deux vidéos ont été prises pour exemple dans cette section. Chacune d'entre d'elle fait l'objet de deux traitements d'image. Un premier traitement est effectué à l'aide d'un programme informatique écrit en langage C ++tandis que le deuxième traitement est écrit en langage python.

Tracking de véhicule:

Programme python:

Programme C++:

 

Tracking de piétons:

Programme python:

 

Programme C++:

 

 

Nous pouvons de nouveau observer la différence entre les deux programmes. Sur le premier exemple (en C++), nous perdons les points d'intérêts au fur et à mesure de l'avancement de notre vidéo. En revanche, il y a toujours un nombre de points d'intérêts conséquent de points d'intérêts, celui est du au fait que le code Python rafraichi les points d'intérêts régulièrement.  

 

Conclusion

 

Dans ce rapport de projet d’imagerie, nous avons mis en évidence le principe de la méthode de tracking KLT qui permet de suivre un objet au sein d’une séquence vidéo.  A travers différents exemple, nous avons essayé cette méthode tout en prenant en main la librairie openCV. Nous avons pu constater le bon fonctionnement de cette méthode.

Il a été possible d'utiliser cette méthode via deux variantes de l'algorithme. Nous avons pu observer que ces deux variantes proposaient des résultats différents, en effet le code C++ perd des points d'intérêts car lorsque la vidéo est lancée, il n'y a plus de détection de points d'intérêts contrairement au programme Python qui rafraichi les points d'intérêts. La question que nous pourrions nous poser est la suivante : lequel des deux programmes représente le mieux l'esprit de la méthode Tracking KLT ?   

 

 


Webographie

 

https://cmp.felk.cvut.cz/cmp/courses/Y33ROV/Y33ROV_ZS20082009/Lectures/Motion/klt.pdf

 

http://repository.usthb.dz/bitstream/123456789/2168/1/RESUME.pdf

 

http://crcv.ucf.edu/courses/CAP5415/Fall2013/Lecture-10-KLT.pdf

 

http://devernay.free.fr/cours/vision/pdf/c4.pdf