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 :

  1. 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.
  2. 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.
  3. 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

  1. Initialisation: Initialiser plusieurs distributions gaussiennes pour chaque pixel.
  2. Mise à jour du modèle: Pour chaque image, mettre à jour les paramètres des distributions gaussiennes (moyenne, variance, poids) pour chaque pixel.
  3. 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

import cv2

# 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

  1. Initialisation: Initialiser plusieurs distributions gaussiennes pour chaque pixel.
  2. 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.
  3. 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

import cv2

# 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

import cv2

# 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
Autres extensions