Motion Model

Généralités

Les modèles de mouvement suivants peuvent être utilisés indépendamment du modèle de détection utilisé précédemment.

Le calcul des déplacements se fait en cliquant sur le bouton Modèle de mouvement. Les déplacements sont alors stockés sous le format (pour chaque point) : identifiant de la trajectoire, position X, position Y, vitesse X, vitesse Y. Pour les algorithmes qui ne donnent pas de trajectoire, l’identifiant est égal à -1. Les déplacements de chaque image sont regroupés par image.

Les déplacements trouvés peuvent être visualisés après le calcul en sélectionnant Processed_with_Moves ou original_with_Moves dans le menu d’affichage. Une ligne bleue indique le déplacement entre l’image précédente et l’image actuelle. La taille de la ligne sur l’image peut être modifiée avec les flèches “haut” et “bas” du clavier. Par rapport à la détection, le nombre d’objets peut être réduit en fonction du filtrage opéré par le modèle de déplacement.

Si les méthodes permettent d’identifier des trajectoires, les trajectoires peuvent être visualisées après le calcul en sélectionnant Trajectoires dans le menu d’affichage.

KLT

L’algorithme KLT est directement dérivé des scripts disponibles sur https://github.com/groussea/opyflow même si le calcul des trajectoires est légèrement différent. Cet algorithme est lui-même basé sur l’algorithme de Luka-Kanade pour la détermination du déplacement par flux optique. Les paramètres de l’algorithme ne sont pas accessibles via l’interface graphique car les valeurs par défaut ont montré de bons résultats pour tous les flux testés. De plus cet algorithme a de bonnes performances en vitesse. Il est donc recommandé de l’essayer en premier. Par défaut, le calcul des trajectoires (association de points entre les images) est activé, mais il est possible de le désactiver pour gagner un peu en temps de calcul. Il est alors nécessaire d’ajouter une distance de recherche maximale pour l’association des points.

_images/deplacement01.png

Déplacements obtenus avec Opyflow.

Nearest

L’algorithme Nearest est adapté aux vidéos avec des particules de formes et d’intensités différentes. Il est donc plus pertinent avec la méthode de détection Seuil. Le principe est de faire correspondre les particules entre 2 images en se basant sur la vraisemblance de la similarité (distance, taille, intensité).

Le premier paramètre est le déplacement maximal estimé, afin de réduire le nombre de comparaison entre une particule et toutes les autres. Ce déplacement maximal peut être estimé visuellement à partir des détections de l’étape précédente. La valeur du paramètre est en pixels.

La vraisemblance est la variation maximale en taille et en intensité qui permet de dire qu’une particule est possiblement la même que celle de l’image précédente. Ce paramètre est donné en pourcentage de variation. Si la taille des particules est petite, ce paramètre peut dépasser 100 % afin de ne pas éliminer les particules qui passeraient de 1 à 2 pixels.

Il faut ensuite préciser les quantités qui seront utilisées pour comparer 2 particules. La méthode distance signifie que l’on prendra les particules les plus proches parmi les plus probables (c’est à dire qui satisfont le critère de vraisemblance précédent). On peut aussi prendre en compte la taille ou l’intensité. Ces valeurs sont pondérées de manière à avoir des valeurs du même ordre de grandeur : c’est-à-dire la racine carrée de la surface ou la variation relative de l’intensité (entre 0 et 1).

Nearest prediction

Cet algorithme est similaire au précédent. La différence est que la comparaison sera faite entre la particule détectée et la prédiction de la position des particules à partir des instants précédents. Cette prédiction est faite en utilisant un filtre de Kalman. Des explications détaillées sont disponibles sur https://github.com/L42Project/. L’intérêt du filtre de Kalman dans notre cas est de permettre la prédiction de la position même si une particule n’est plus détectée sur certains pas de temps (zone d’ombre). Il y a également un effet de lissage sur les trajectoires. Les paramètres sont identiques à ceux de la méthode “Nearest”. Un paramètre Max steps prevision permet de supprimer les prédictions et donc les trajectoires associées à une particule qui n’aurait pas été détectée sur ce nombre de pas de temps. L’utilisation et la mise à jour du filtre de Kalman à chaque pas rendent cet algorithme plus lent que les autres. Il est donc à utiliser dans des cas spécifiques (pertes de détection, mouvement unidirectionnel).

Tractrac

L’algorithme de tractrac provient directement des scripts disponibles sur https://perso.univ-rennes1.fr/joris.heyman/tractrac.html. Il est assez rapide pour un grand nombre de particules. Il permet d’extraire des trajectoires et de filtrer les détections en fonction du déplacement probable sur plusieurs pas de temps (filtre sur position, vitesse, accélération). Ce travail de sélection des trajectoires probables doit être activé avec le choix motion . On définit ensuite un nombre d’itérations pour la vérification des correspondances ainsi qu’une distance maximale de recherche. Si cette option n’est pas cochée, une seule itération est effectuée et le calcul se rapproche alors d’une distance minimale (méthode du plus proche) mais sur 2 pas de temps consécutifs. Le filtrage temporel est également disponible comme dans la version initiale, cependant dans nos applications où il y a peu de particules et des mouvements d’ensemble, ce filtrage a tendance à supprimer beaucoup de trajectoires probables. Le filtre temporel n’est donc pas recommandé pour la vélocité de surface.

DenseOpticalFlow

L’algorithme denseOpticalFlow est directement basé sur la fonction calcOpticalFlowFarneback d’openCV. Le flux optique est ici calculé pour tous les pixels de l’image, puis pour minimiser l’espace de stockage, une moyenne est faite sur un nombre prédéfini de pixels donnés par les utilisateurs. Ce nombre est fixé à 20 par défaut. Le temps de calcul est nettement supérieur. De plus, cette méthode mesure des déplacements d’intensité lumineuse qui ne sont pas corrélés au mouvement de l’eau. Elle est donc réservée à des conditions particulières telles que l’absence de traceurs spécifiques, la réflexion et les ondes de surface. Cependant, pour la mesure des déplacements de vagues, cette méthode peut être particulièrement adaptée. Pour l’instant, une détection doit être faite pour activer la méthode, même si les positions trouvées n’interviennent pas dans le calcul.

_images/deplacement02.png

Déplacements DenseOpticalFlow

PIV

Le calcul de la PIV (Particle Image Velocimetry) est basé sur la méthode “pyprocess” disponible sur https://github.com/OpenPIV/openpiv-python/blob/master/openpiv/. Les images consécutives sont saisies en niveaux de gris et la méthode n’a pas été modifiée. Les paramètres sont la taille de la fenêtre de corrélation, le nombre de pixels de recouvrement et la taille de la fenêtre de recherche des déplacements. A proprement parler, la méthode devrait être effectuée sur des images transformées, mais le calcul de l’intercorrélation sur des images non transformées donne également des résultats cohérents.