Optical Flow
Le flux optique estime le déplacement de chaque pixel entre deux images vidéo sous la forme d’un champ de vecteurs de mouvement. Découvre les méthodes classiques et profondes, leurs usages et du code OpenCV.
Le flux optique correspond au mouvement apparent des motifs de luminosité entre deux images, généralement des images vidéo consécutives. Un algorithme de flux optique estime, pour chaque pixel de la première image, un vecteur de déplacement 2D (dx, dy) qui indique où le contenu de ce pixel apparaît dans la deuxième image. Le résultat, appelé champ de flux, capture le mouvement des objets mobiles et de la caméra elle-même, ce qui permet aux systèmes de vision par ordinateur de stabiliser les vidéos, d’estimer le mouvement propre, d’interpoler les images et de reconnaître les actions. Le flux mesure ce que voit la caméra plutôt que le véritable mouvement 3D : une sphère parfaitement uniforme qui tourne sur place ne produit aucun flux, tandis qu’une ombre en mouvement produit du flux là où rien ne bouge physiquement.
Comment le flux optique est estimé#
La plupart des méthodes partent de la constance de la luminosité, selon laquelle un point conserve la même intensité lorsqu’il se déplace. Sa linéarisation donne une équation par pixel, Ix·u + Iy·v + It = 0, où Ix, Iy et It sont les dérivées de l’image selon x, y et le temps, et (u, v) correspond au flux inconnu. Une équation ne permet pas de déterminer deux inconnues : c’est le problème de l’ouverture. En observant une arête droite à travers une petite fenêtre, seul le mouvement perpendiculaire à l’arête est mesurable. Les méthodes classiques ajoutent une deuxième hypothèse pour résoudre ce problème :
- Méthode de Lucas-Kanade (1981) : suppose que le flux est constant dans une petite fenêtre et résout les équations de tous ses pixels par moindres carrés. Elle fonctionne lorsque la fenêtre contient des gradients dans deux directions, comme dans le cas des coins ; elle est donc généralement utilisée pour calculer un flux clairsemé sur des points caractéristiques sélectionnés.
- Méthode de Horn-Schunck (1981) : suppose que le champ de flux est lisse sur toute l’image et résout un problème d’optimisation global, produisant un flux dense pour chaque pixel.
Les deux hypothèses ne tiennent plus pour les grands mouvements. Les méthodes pratiques estiment donc le flux à différentes échelles sur une pyramide d’images, où un mouvement de 16 pixels à pleine résolution correspond à un mouvement de 2 pixels trois niveaux plus bas :
OpenCV implémente Lucas-Kanade pyramidal pour les points clairsemés et l’algorithme d’expansion polynomiale de Gunnar Farnebäck (2003) pour le flux dense. Ce code déplace une texture aléatoire d’une quantité connue et récupère le mouvement avec le flux dense de Farnebäck :
import cv2
import numpy as np
# A smooth random texture, then the same texture moved 3 px right and 2 px down
rng = np.random.default_rng(0)
texture = cv2.GaussianBlur(rng.random((240, 320)), (0, 0), 3)
frame1 = cv2.normalize(texture, None, 0, 255, cv2.NORM_MINMAX).astype(np.uint8)
frame2 = np.roll(frame1, shift=(2, 3), axis=(0, 1))
# Dense Farneback optical flow: one (dx, dy) displacement vector for every pixel
flow = cv2.calcOpticalFlowFarneback(
frame1, frame2, None, pyr_scale=0.5, levels=3, winsize=15, iterations=3, poly_n=5, poly_sigma=1.2, flags=0
)
print(f"flow field shape: {flow.shape}")
print(f"median motion: dx={np.median(flow[..., 0]):.2f}, dy={np.median(flow[..., 1]):.2f} pixels")Il affiche flow field shape: (240, 320, 2) et median motion: dx=3.00, dy=2.00 pixels : un vecteur à deux composantes pour chacun des 76 800 pixels, ce qui permet de retrouver le décalage de 3 pixels horizontalement et de 2 pixels verticalement.
Méthodes d’apprentissage profond#
FlowNet a montré en 2015 qu’un réseau neuronal convolutif pouvait apprendre le flux de bout en bout à partir de données d’entraînement synthétiques, car les vidéos réelles sont rarement accompagnées d’un flux de référence. PWC-Net a intégré dans un réseau compact les idées de pyramide, de déformation et de volume de coûts des méthodes classiques. RAFT, qui a remporté le prix du meilleur article à ECCV 2020, compare chaque pixel de la première image à chaque pixel de la deuxième dans un volume de corrélation et affine un seul champ de flux haute résolution au moyen de mises à jour récurrentes répétées. Les méthodes apprises gèrent bien mieux les grands déplacements, le flou de mouvement et les régions sans texture que les méthodes classiques, et torchvision fournit des modèles RAFT préentraînés. La précision est rapportée sous forme d’erreur de point d’extrémité (EPE), la distance moyenne en pixels entre les vecteurs de flux prédits et réels, sur des benchmarks comme MPI Sintel et KITTI 2015.
Flux optique et notions connexes#
- Suivi d’objets : suit des objets entiers avec des identifiants persistants sur de nombreuses images, tandis que le flux optique décrit le mouvement de chaque pixel entre deux images sans connaître les objets. Les systèmes de suivi utilisent le flux comme indice : dans le mode de suivi d’Ultralytics YOLO, le système de suivi TrackTrack par défaut et BoT-SORT estiment le mouvement de la caméra avec le flux clairsemé de Lucas-Kanade (
gmc_method: sparseOptFlow), suivent jusqu’à 400 coins dans une image à demi-résolution, ajustent une rotation, une échelle et une translation à ces points avec RANSAC, puis décalent chaque boîte de suivi prédite selon ce mouvement avant de l’associer aux nouvelles détections. - Suivi de points : suit des points sélectionnés dans de longues vidéos, y compris à travers les occultations, au lieu d’estimer le mouvement de chaque pixel entre deux images.
- Flux de scène : mouvement 3D de points dans l’espace, estimé à partir de données stéréo ou de profondeur. Le flux optique en est la projection sur le plan de l’image.
- Vecteurs de mouvement des codecs vidéo : les encodeurs H.264, HEVC et AV1 stockent un vecteur de mouvement par bloc, choisi pour minimiser le nombre de bits nécessaires à l’encodage de l’image ; ce vecteur s’écarte donc souvent du mouvement réel.
Applications concrètes#
- Stabilisation vidéo : le flux dominant sur une image révèle les tremblements de la caméra, que le logiciel compense en déformant chaque image dans la direction opposée.
- Interpolation d’images : le ralenti et la conversion de fréquence d’images synthétisent des images intermédiaires en déplaçant les pixels d’une fraction de la longueur de leurs vecteurs de flux.
- Véhicules autonomes et drones : le flux contribue à l’odométrie visuelle, et la vitesse à laquelle le flux d’un objet s’étend signale une collision imminente.
- Reconnaissance d’actions : le réseau à deux flux de 2014 classait les actions à partir d’un flux spatial constitué d’images isolées et d’un flux temporel alimenté par une pile de 10 champs de flux optique consécutifs.










