Soustraction d'arrière-plan vidéo OpenCV (MOG, MOG2)
Dans le domaine de la vision par ordinateur, la soustraction d'arrière-plan est une technique couramment utilisée pour extraire des objets de premier plan à partir de séquences vidéo.
L'idée centrale de la soustraction d'arrière-plan est de modéliser l'arrière-plan, puis de comparer l'image courante avec le modèle d'arrière-plan afin d'isoler les objets de premier plan.
OpenCV fournit plusieurs algorithmes de soustraction d'arrière-plan, parmi lesquels MOG (mélange de gaussiennes) et MOG2 sont les deux méthodes les plus couramment utilisées.
Concepts de base de la soustraction d'arrière-plan
La soustraction d'arrière-plan est une technique utilisée pour l'analyse vidéo, principalement pour détecter des objets en mouvement dans des vidéos. Son processus de base est le suivant :
- Modélisation de l'arrière-plan: En analysant plusieurs images d'une séquence vidéo, établir un modèle d'arrière-plan.
- Détection du premier plan: Comparer l'image actuelle au modèle d'arrière-plan pour identifier les régions présentant des différences significatives par rapport à l'arrière-plan ; ces régions sont les objets du premier plan.
- Mise à jour de l'arrière-plan: Au fil du temps, l'arrière-plan peut changer (comme les changements d'éclairage, le mouvement d'objets d'arrière-plan, etc.), donc le modèle d'arrière-plan doit être continuellement mis à jour.
Algorithme MOG (mélange de gaussiennes)
Principe
L'algorithme MOG est une méthode de soustraction d'arrière-plan basée sur le modèle de mélange gaussien (GMM). Son idée centrale est d'utiliser plusieurs distributions gaussiennes pour modéliser les valeurs des pixels dans l'arrière-plan. Chaque valeur de pixel est considérée comme une variable aléatoire, dont la distribution est composée de plusieurs distributions gaussiennes. De cette façon, MOG peut gérer des changements complexes de l'arrière-plan, tels que les changements d'éclairage et les ombres.
Étapes de l'algorithme
- Initialisation: Initialiser plusieurs distributions gaussiennes pour chaque pixel.
- Mise à jour du modèle: Pour chaque image, mettre à jour les paramètres des distributions gaussiennes (moyenne, variance, poids) pour chaque pixel.
- Détection du premier plan: Comparer les valeurs des pixels de l'image actuelle avec les distributions gaussiennes du modèle d'arrière-plan. Si une valeur de pixel ne tombe pas dans la plage d'une distribution gaussienne, elle est marquée comme premier plan.
Implémentation dans OpenCV
En OpenCV, l'algorithme MOG peut être créé à l'aide de lacv2.bgsegm.createBackgroundSubtractorMOG()fonction permettant de créer un soustracteur d'arrière-plan. Voici un exemple de code simple :
Exemple
# Créer un soustracteur d'arrière-plan MOG
mog = cv2.bgsegm.createBackgroundSubtractorMOG()
# Lire la vidéo
cap = cv2.VideoCapture('video.mp4')
while True:
ret, frame = cap.read()
if not ret:
break
# Appliquer la soustraction d'arrière-plan
fg_mask = mog.apply(frame)
# Afficher le résultat
cv2.imshow('Frame', frame)
cv2.imshow('FG Mask', fg_mask)
if cv2.waitKey(30) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
Algorithme MOG2 (mélange de gaussiennes version 2)
Principe
MOG2 est une version améliorée de MOG. La principale différence est qu'il peut sélectionner automatiquement le nombre de distributions gaussiennes et mieux s'adapter aux changements d'arrière-plan. En ajustant dynamiquement le nombre et les paramètres des distributions gaussiennes, MOG2 peut modéliser l'arrière-plan plus précisément, améliorant ainsi la précision de la détection de premier plan.
Étapes de l'algorithme
- Initialisation: Initialiser plusieurs distributions gaussiennes pour chaque pixel.
- Mise à jour du modèle: Pour chaque image, mettez à jour les paramètres de distribution gaussienne pour chaque pixel, et augmentez ou diminuez le nombre de distributions gaussiennes selon les besoins.
- Détection du premier plan: Comparer les valeurs des pixels de l'image actuelle avec les distributions gaussiennes du modèle d'arrière-plan. Si une valeur de pixel ne tombe pas dans la plage d'une distribution gaussienne, elle est marquée comme premier plan.
Implémentation dans OpenCV
En OpenCV, l'algorithme MOG2 peut être créé à l'aide de lacv2.createBackgroundSubtractorMOG2()fonction permettant de créer un soustracteur d'arrière-plan. Voici un exemple de code simple :
Exemple
# Créer un soustracteur de fond MOG2
mog2 = cv2.createBackgroundSubtractorMOG2()
# Lire la vidéo
cap = cv2.VideoCapture('video.mp4')
while True:
ret, frame = cap.read()
if not ret:
break
# Appliquer la soustraction d'arrière-plan
fg_mask = mog2.apply(frame)
# Afficher le résultat
cv2.imshow('Frame', frame)
cv2.imshow('FG Mask', fg_mask)
if cv2.waitKey(30) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
Applications de la soustraction de fond
Vidéosurveillance :Utilisée pour détecter des cibles en mouvement dans des vidéos de surveillance, telles que des piétons, des véhicules, etc.
-
Analyse du mouvement :Utilisée pour analyser les trajectoires de mouvement et les comportements des cibles dans une vidéo.
-
Interaction homme-machine :Utilisée pour détecter les gestes ou les visages de l'utilisateur afin de réaliser une interaction homme-machine.
Voici un exemple complet de code de soustraction de fond MOG2 :
Exemple
# Lire la vidéo
cap = cv2.VideoCapture("path/to/video.mp4")
# Créer un soustracteur de fond MOG2
fgbg = cv2.createBackgroundSubtractorMOG2()
while True:
ret, frame = cap.read()
if not ret:
break
# Appliquer le soustracteur de fond
fgmask = fgbg.apply(frame)
# Afficher le résultat
cv2.imshow("Soustraction d'arrière-plan MOG2", fgmask)
# Appuyez sur 'q' pour quitter
if cv2.waitKey(30) & 0xFF == ord('q'):
break
# Libérer les ressources
cap.release()
cv2.destroyAllWindows()
Comparaison de MOG et MOG2
La soustraction d'arrière-plan est une technique importante dans l'analyse vidéo, et MOG et MOG2 sont deux algorithmes de soustraction d'arrière-plan couramment utilisés dans OpenCV.
L'algorithme MOG utilise un nombre fixe de distributions gaussiennes pour modéliser l'arrière-plan, ce qui le rend adapté aux scènes avec peu de changements d'arrière-plan, tandis que l'algorithme MOG2 ajuste dynamiquement le nombre et les paramètres des distributions gaussiennes, lui permettant de mieux s'adapter aux changements d'arrière-plan et le rendant adapté aux scènes avec davantage de changements d'arrière-plan.
| Fonctionnalité | MOG | MOG2 |
|---|---|---|
| Nombre de distributions gaussiennes | Fixe | Ajusté dynamiquement |
| Vitesse de mise à jour de l'arrière-plan | Plus lent | Plus rapide |
| Capacité à s'adapter aux changements d'arrière-plan | Plus faible | Plus fort |
| Complexité de calcul | Inférieur | Plus élevé |
| Scénarios applicables | Scènes avec moins de changements d'arrière-plan | Scènes avec plus de changements d'arrière-plan |